From d2275c5ddf13618dc28edbc3dbfb3e5d578f0896 Mon Sep 17 00:00:00 2001 From: Mattia Iavarone Date: Thu, 7 Sep 2017 12:38:26 +0200 Subject: [PATCH] Fix view size --- .../cameraview/GestureLayoutTest.java | 13 +++++- .../otaliastudios/cameraview/PreviewTest.java | 40 ++++++++++++------- .../cameraview/ScrollGestureLayoutTest.java | 3 ++ .../cameraview/TapGestureLayoutTest.java | 8 ++-- .../cameraview/TestActivity.java | 13 +++++- 5 files changed, 55 insertions(+), 22 deletions(-) diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/GestureLayoutTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/GestureLayoutTest.java index 8617b892..e6c2a5cf 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/GestureLayoutTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/GestureLayoutTest.java @@ -4,15 +4,24 @@ package com.otaliastudios.cameraview; import android.annotation.TargetApi; import android.content.Context; import android.support.test.espresso.Espresso; +import android.support.test.espresso.Root; +import android.support.test.espresso.ViewAssertion; import android.support.test.espresso.ViewInteraction; +import android.support.test.espresso.assertion.ViewAssertions; +import android.support.test.espresso.matcher.ViewMatchers; import android.support.test.rule.ActivityTestRule; import android.view.MotionEvent; import android.view.View; +import org.hamcrest.BaseMatcher; +import org.hamcrest.Description; import org.hamcrest.Matchers; import org.junit.Before; import org.junit.Rule; +import static android.support.test.espresso.Espresso.onView; +import static org.hamcrest.Matchers.any; + @TargetApi(17) public abstract class GestureLayoutTest extends BaseTest { @@ -47,7 +56,7 @@ public abstract class GestureLayoutTest extends BaseTes }); } - protected ViewInteraction onLayout() { - return Espresso.onView(Matchers.is(layout)); + protected final ViewInteraction onLayout() { + return onView(Matchers.is(layout)).inRoot(any(Root.class)); } } diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/PreviewTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/PreviewTest.java index f375c06c..47abac00 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/PreviewTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/PreviewTest.java @@ -98,29 +98,41 @@ public abstract class PreviewTest extends BaseTest { public void testCropCenter() throws Exception { surfaceAvailability.await(); - // Not cropping. - preview.mCropTask.listen(); - preview.setDesiredSize(100, 100); // Wait... - preview.mCropTask.await(); - assertEquals(100f / 100f, getScaledAspectRatio(), 0.01f); + // This is given by the activity, it's the fixed size. + float view = getViewAspectRatio(); + + // If we apply a desired size with same aspect ratio, there should be no crop. + setDesiredAspectRatio(view); assertFalse(preview.isCropping()); - // Cropping. - preview.mCropTask.listen(); - preview.setDesiredSize(160, 50); // Wait... - preview.mCropTask.await(); - assertEquals(160f / 50f, getScaledAspectRatio(), 0.01f); + // If we apply a different aspect ratio, there should be cropping. + float desired = view * 1.2f; + setDesiredAspectRatio(desired); assertTrue(preview.isCropping()); - // Not cropping. + // Since desired is 'desired', let's fake a new view size that is consistent with it. + // Ensure crop is not happening anymore. preview.mCropTask.listen(); - preview.onSurfaceSizeChanged(1600, 500); // Wait... + preview.onSurfaceSizeChanged((int) (50f * desired), 50); // Wait... preview.mCropTask.await(); - assertEquals(160f / 50f, getScaledAspectRatio(), 0.01f); + assertEquals(desired, getViewAspectRatioWithScale(), 0.01f); assertFalse(preview.isCropping()); } - private float getScaledAspectRatio() { + private void setDesiredAspectRatio(float desiredAspectRatio) { + preview.mCropTask.listen(); + preview.setDesiredSize((int) (10f * desiredAspectRatio), 10); // Wait... + preview.mCropTask.await(); + assertEquals(desiredAspectRatio, getViewAspectRatioWithScale(), 0.01f); + + } + + private float getViewAspectRatio() { + Size size = preview.getSurfaceSize(); + return AspectRatio.of(size.getWidth(), size.getHeight()).toFloat(); + } + + private float getViewAspectRatioWithScale() { Size size = preview.getSurfaceSize(); int newWidth = (int) (((float) size.getWidth()) * preview.getView().getScaleX()); int newHeight = (int) (((float) size.getHeight()) * preview.getView().getScaleY()); diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/ScrollGestureLayoutTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/ScrollGestureLayoutTest.java index ea6b9c5d..ad5e8433 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/ScrollGestureLayoutTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/ScrollGestureLayoutTest.java @@ -3,9 +3,11 @@ package com.otaliastudios.cameraview; import android.content.Context; import android.support.test.espresso.ViewAction; +import android.support.test.espresso.assertion.ViewAssertions; import android.support.test.filters.SmallTest; import android.support.test.runner.AndroidJUnit4; +import org.hamcrest.Matchers; import org.junit.Test; import org.junit.runner.RunWith; @@ -18,6 +20,7 @@ import static android.support.test.espresso.action.ViewActions.swipeLeft; import static android.support.test.espresso.action.ViewActions.swipeRight; import static android.support.test.espresso.action.ViewActions.swipeUp; import static android.support.test.espresso.matcher.ViewMatchers.withId; +import static junit.framework.Assert.assertNotNull; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/TapGestureLayoutTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/TapGestureLayoutTest.java index d78b33b3..cf976b5f 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/TapGestureLayoutTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/TapGestureLayoutTest.java @@ -42,8 +42,8 @@ public class TapGestureLayoutTest extends GestureLayoutTest { public void testTap() { touch.listen(); touch.start(); - GeneralClickAction a = new GeneralClickAction(Tap.SINGLE, - GeneralLocation.CENTER, Press.FINGER, + GeneralClickAction a = new GeneralClickAction( + Tap.SINGLE, GeneralLocation.CENTER, Press.FINGER, InputDevice.SOURCE_UNKNOWN, MotionEvent.BUTTON_PRIMARY); onLayout().perform(a); Gesture found = touch.await(500, TimeUnit.MILLISECONDS); @@ -68,8 +68,8 @@ public class TapGestureLayoutTest extends GestureLayoutTest { public void testLongTap() { touch.listen(); touch.start(); - GeneralClickAction a = new GeneralClickAction(Tap.LONG, - GeneralLocation.CENTER, Press.FINGER, + GeneralClickAction a = new GeneralClickAction( + Tap.LONG, GeneralLocation.CENTER, Press.FINGER, InputDevice.SOURCE_UNKNOWN, MotionEvent.BUTTON_PRIMARY); onLayout().perform(a); Gesture found = touch.await(500, TimeUnit.MILLISECONDS); diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/TestActivity.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/TestActivity.java index acce6085..92c9c69b 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/TestActivity.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/TestActivity.java @@ -4,9 +4,11 @@ package com.otaliastudios.cameraview; import android.app.Activity; import android.app.KeyguardManager; import android.content.Context; +import android.graphics.Point; import android.os.Bundle; import android.os.PersistableBundle; import android.support.annotation.Nullable; +import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; @@ -30,9 +32,16 @@ public class TestActivity extends Activity { root.setLayoutParams(new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT)); // Inner content view with fixed size. + // We want it to be fully visible or expresso will crash. + Point size = new Point(); + getWindowManager().getDefaultDisplay().getSize(size); + int width = Math.min(size.x, size.y); + int height = Math.min(size.x, size.y); + FrameLayout.LayoutParams params = new FrameLayout.LayoutParams( + width, height, Gravity.CENTER); content = new FrameLayout(this); - content.setLayoutParams(new ViewGroup.LayoutParams( - contentSize.getWidth(), contentSize.getHeight())); + content.setLayoutParams(params); + contentSize = new Size(width, height); // Add. root.addView(content);