diff --git a/cameraview/src/androidTest/AndroidManifest.xml b/cameraview/src/androidTest/AndroidManifest.xml
index 36b84bf2..1795db1e 100644
--- a/cameraview/src/androidTest/AndroidManifest.xml
+++ b/cameraview/src/androidTest/AndroidManifest.xml
@@ -5,7 +5,9 @@
-
+
\ No newline at end of file
diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/PreviewTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/PreviewTest.java
index de19c4b4..0bad986d 100644
--- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/PreviewTest.java
+++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/PreviewTest.java
@@ -26,14 +26,15 @@ public abstract class PreviewTest extends BaseTest {
@Rule
public ActivityTestRule rule = new ActivityTestRule<>(TestActivity.class);
- private Preview preview;
+ protected Preview preview;
+ protected Size surfaceSize;
private Preview.SurfaceCallback callback;
- private Size surfaceSize;
+ private Task availability;
@Before
public void setUp() {
- final Task task = new Task<>();
- task.listen();
+ availability = new Task<>();
+ availability.listen();
ui(new Runnable() {
@Override
@@ -45,16 +46,29 @@ public abstract class PreviewTest extends BaseTest {
doAnswer(new Answer() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
- task.end(true);
+ availability.end(true);
return null;
}
}).when(callback).onSurfaceAvailable();
preview = createPreview(a, a.getContentView(), callback);
}
});
+ }
+
+ // Wait for surface to be available.
+ protected void ensureAvailable() {
+ assertNotNull(availability.await(2, TimeUnit.SECONDS));
+ }
- Boolean available = task.await(2, TimeUnit.SECONDS);
- assertNotNull(available);
+ // Trigger a destroy.
+ protected void ensureDestroyed() {
+ ui(new Runnable() {
+ @Override
+ public void run() {
+ rule.getActivity().getContentView().removeView(preview.getView());
+ }
+ });
+ waitUi();
}
@After
@@ -62,14 +76,14 @@ public abstract class PreviewTest extends BaseTest {
preview = null;
callback = null;
surfaceSize = null;
+ availability = null;
}
@Test
public void testDefaults() {
+ ensureAvailable();
assertTrue(preview.isReady());
- ViewGroup parent = rule.getActivity().getContentView();
assertNotNull(preview.getView());
- assertEquals(parent.getChildAt(0), preview.getView());
assertNotNull(preview.getOutputClass());
}
@@ -82,6 +96,7 @@ public abstract class PreviewTest extends BaseTest {
@Test
public void testSurfaceAvailable() {
+ ensureAvailable();
verify(callback, times(1)).onSurfaceAvailable();
assertEquals(surfaceSize.getWidth(), preview.getSurfaceSize().getWidth());
assertEquals(surfaceSize.getHeight(), preview.getSurfaceSize().getHeight());
@@ -89,19 +104,16 @@ public abstract class PreviewTest extends BaseTest {
@Test
public void testSurfaceDestroyed() {
- // Trigger a destroy.
- ui(new Runnable() {
- @Override
- public void run() {
- rule.getActivity().getContentView().removeView(preview.getView());
- }
- });
+ ensureAvailable();
+ ensureDestroyed();
assertEquals(0, preview.getSurfaceSize().getWidth());
assertEquals(0, preview.getSurfaceSize().getHeight());
}
@Test
public void testCropCenter() throws Exception {
+ ensureAvailable();
+
// This is given by the activity, it's the fixed size.
float view = getViewAspectRatio();
diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/TextureViewPreviewTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/TextureViewPreviewTest.java
index 5d0d1f31..39391063 100644
--- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/TextureViewPreviewTest.java
+++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/TextureViewPreviewTest.java
@@ -16,4 +16,28 @@ public class TextureViewPreviewTest extends PreviewTest {
protected Preview createPreview(Context context, ViewGroup parent, Preview.SurfaceCallback callback) {
return new TextureViewPreview(context, parent, callback);
}
+
+ @Override
+ protected void ensureAvailable() {
+ if (isHardwareAccelerated()) {
+ super.ensureAvailable();
+ } else {
+ preview.onSurfaceAvailable(
+ surfaceSize.getWidth(),
+ surfaceSize.getHeight());
+ }
+ }
+
+ @Override
+ protected void ensureDestroyed() {
+ super.ensureDestroyed();
+ if (!isHardwareAccelerated()) {
+ // Ensure it is called.
+ preview.onSurfaceDestroyed();
+ }
+ }
+
+ private boolean isHardwareAccelerated() {
+ return preview.getView().isHardwareAccelerated();
+ }
}