Fix view size

pull/22/head
Mattia Iavarone 8 years ago
parent eedd659374
commit d2275c5ddf
  1. 13
      cameraview/src/androidTest/java/com/otaliastudios/cameraview/GestureLayoutTest.java
  2. 40
      cameraview/src/androidTest/java/com/otaliastudios/cameraview/PreviewTest.java
  3. 3
      cameraview/src/androidTest/java/com/otaliastudios/cameraview/ScrollGestureLayoutTest.java
  4. 8
      cameraview/src/androidTest/java/com/otaliastudios/cameraview/TapGestureLayoutTest.java
  5. 13
      cameraview/src/androidTest/java/com/otaliastudios/cameraview/TestActivity.java

@ -4,15 +4,24 @@ package com.otaliastudios.cameraview;
import android.annotation.TargetApi; import android.annotation.TargetApi;
import android.content.Context; import android.content.Context;
import android.support.test.espresso.Espresso; 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.ViewInteraction;
import android.support.test.espresso.assertion.ViewAssertions;
import android.support.test.espresso.matcher.ViewMatchers;
import android.support.test.rule.ActivityTestRule; import android.support.test.rule.ActivityTestRule;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.View; import android.view.View;
import org.hamcrest.BaseMatcher;
import org.hamcrest.Description;
import org.hamcrest.Matchers; import org.hamcrest.Matchers;
import org.junit.Before; import org.junit.Before;
import org.junit.Rule; import org.junit.Rule;
import static android.support.test.espresso.Espresso.onView;
import static org.hamcrest.Matchers.any;
@TargetApi(17) @TargetApi(17)
public abstract class GestureLayoutTest<T extends GestureLayout> extends BaseTest { public abstract class GestureLayoutTest<T extends GestureLayout> extends BaseTest {
@ -47,7 +56,7 @@ public abstract class GestureLayoutTest<T extends GestureLayout> extends BaseTes
}); });
} }
protected ViewInteraction onLayout() { protected final ViewInteraction onLayout() {
return Espresso.onView(Matchers.<View>is(layout)); return onView(Matchers.<View>is(layout)).inRoot(any(Root.class));
} }
} }

@ -98,29 +98,41 @@ public abstract class PreviewTest extends BaseTest {
public void testCropCenter() throws Exception { public void testCropCenter() throws Exception {
surfaceAvailability.await(); surfaceAvailability.await();
// Not cropping. // This is given by the activity, it's the fixed size.
preview.mCropTask.listen(); float view = getViewAspectRatio();
preview.setDesiredSize(100, 100); // Wait...
preview.mCropTask.await(); // If we apply a desired size with same aspect ratio, there should be no crop.
assertEquals(100f / 100f, getScaledAspectRatio(), 0.01f); setDesiredAspectRatio(view);
assertFalse(preview.isCropping()); assertFalse(preview.isCropping());
// Cropping. // If we apply a different aspect ratio, there should be cropping.
preview.mCropTask.listen(); float desired = view * 1.2f;
preview.setDesiredSize(160, 50); // Wait... setDesiredAspectRatio(desired);
preview.mCropTask.await();
assertEquals(160f / 50f, getScaledAspectRatio(), 0.01f);
assertTrue(preview.isCropping()); 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.mCropTask.listen();
preview.onSurfaceSizeChanged(1600, 500); // Wait... preview.onSurfaceSizeChanged((int) (50f * desired), 50); // Wait...
preview.mCropTask.await(); preview.mCropTask.await();
assertEquals(160f / 50f, getScaledAspectRatio(), 0.01f); assertEquals(desired, getViewAspectRatioWithScale(), 0.01f);
assertFalse(preview.isCropping()); 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(); Size size = preview.getSurfaceSize();
int newWidth = (int) (((float) size.getWidth()) * preview.getView().getScaleX()); int newWidth = (int) (((float) size.getWidth()) * preview.getView().getScaleX());
int newHeight = (int) (((float) size.getHeight()) * preview.getView().getScaleY()); int newHeight = (int) (((float) size.getHeight()) * preview.getView().getScaleY());

@ -3,9 +3,11 @@ package com.otaliastudios.cameraview;
import android.content.Context; import android.content.Context;
import android.support.test.espresso.ViewAction; import android.support.test.espresso.ViewAction;
import android.support.test.espresso.assertion.ViewAssertions;
import android.support.test.filters.SmallTest; import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4; import android.support.test.runner.AndroidJUnit4;
import org.hamcrest.Matchers;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; 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.swipeRight;
import static android.support.test.espresso.action.ViewActions.swipeUp; import static android.support.test.espresso.action.ViewActions.swipeUp;
import static android.support.test.espresso.matcher.ViewMatchers.withId; 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.assertEquals;
import static org.junit.Assert.assertNull; import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;

@ -42,8 +42,8 @@ public class TapGestureLayoutTest extends GestureLayoutTest<TapGestureLayout> {
public void testTap() { public void testTap() {
touch.listen(); touch.listen();
touch.start(); touch.start();
GeneralClickAction a = new GeneralClickAction(Tap.SINGLE, GeneralClickAction a = new GeneralClickAction(
GeneralLocation.CENTER, Press.FINGER, Tap.SINGLE, GeneralLocation.CENTER, Press.FINGER,
InputDevice.SOURCE_UNKNOWN, MotionEvent.BUTTON_PRIMARY); InputDevice.SOURCE_UNKNOWN, MotionEvent.BUTTON_PRIMARY);
onLayout().perform(a); onLayout().perform(a);
Gesture found = touch.await(500, TimeUnit.MILLISECONDS); Gesture found = touch.await(500, TimeUnit.MILLISECONDS);
@ -68,8 +68,8 @@ public class TapGestureLayoutTest extends GestureLayoutTest<TapGestureLayout> {
public void testLongTap() { public void testLongTap() {
touch.listen(); touch.listen();
touch.start(); touch.start();
GeneralClickAction a = new GeneralClickAction(Tap.LONG, GeneralClickAction a = new GeneralClickAction(
GeneralLocation.CENTER, Press.FINGER, Tap.LONG, GeneralLocation.CENTER, Press.FINGER,
InputDevice.SOURCE_UNKNOWN, MotionEvent.BUTTON_PRIMARY); InputDevice.SOURCE_UNKNOWN, MotionEvent.BUTTON_PRIMARY);
onLayout().perform(a); onLayout().perform(a);
Gesture found = touch.await(500, TimeUnit.MILLISECONDS); Gesture found = touch.await(500, TimeUnit.MILLISECONDS);

@ -4,9 +4,11 @@ package com.otaliastudios.cameraview;
import android.app.Activity; import android.app.Activity;
import android.app.KeyguardManager; import android.app.KeyguardManager;
import android.content.Context; import android.content.Context;
import android.graphics.Point;
import android.os.Bundle; import android.os.Bundle;
import android.os.PersistableBundle; import android.os.PersistableBundle;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.view.Gravity;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.WindowManager; import android.view.WindowManager;
@ -30,9 +32,16 @@ public class TestActivity extends Activity {
root.setLayoutParams(new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT)); root.setLayoutParams(new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT));
// Inner content view with fixed size. // 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 = new FrameLayout(this);
content.setLayoutParams(new ViewGroup.LayoutParams( content.setLayoutParams(params);
contentSize.getWidth(), contentSize.getHeight())); contentSize = new Size(width, height);
// Add. // Add.
root.addView(content); root.addView(content);

Loading…
Cancel
Save