diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/CameraControllerIntegrationTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/CameraControllerIntegrationTest.java index 23b0b426..d2f7a72c 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/CameraControllerIntegrationTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/CameraControllerIntegrationTest.java @@ -2,6 +2,7 @@ package com.otaliastudios.cameraview; import android.content.Context; +import android.graphics.PointF; import android.support.test.filters.MediumTest; import android.support.test.rule.ActivityTestRule; import android.support.test.runner.AndroidJUnit4; @@ -16,6 +17,7 @@ import org.junit.runner.RunWith; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; +import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -71,6 +73,7 @@ public class CameraControllerIntegrationTest extends BaseTest { waitForClose(true); } */ camera.destroy(); + WorkerHandler.clearCache(); } private CameraOptions waitForOpen(boolean expectSuccess) { @@ -99,6 +102,32 @@ public class CameraControllerIntegrationTest extends BaseTest { return result; } + private Boolean waitForVideo(boolean expectSuccess) { + final Task video = new Task<>(); + video.listen(); + doEndTask(video, true).when(listener).onVideoTaken(any(File.class)); + Boolean result = video.await(2000); + if (expectSuccess) { + assertNotNull("Can take video", result); + } else { + assertNull("Should not take video", result); + } + return result; + } + + private PointF waitForFocusStart(boolean expectSuccess) { + final Task focus = new Task<>(); + focus.listen(); + doEndTask(focus, 0).when(listener).onFocusStart(any(PointF.class)); + PointF result = focus.await(5000); + if (expectSuccess) { + assertNotNull("Can do autofocus", result); + } else { + assertNull("Should not do autofocus", result); + } + return result; + } + //region test open/close @Test @@ -319,9 +348,52 @@ public class CameraControllerIntegrationTest extends BaseTest { //endregion - // TODO: startVideo, endVideo + //region test startVideo - // TODO: startAutoFocus + @Test(expected = IllegalStateException.class) + public void testStartVideo_whileInPictureMode() { + camera.setSessionType(SessionType.PICTURE); + camera.start(); + waitForOpen(true); + camera.startCapturingVideo(null); + } + + @Test + public void testStartEndVideo() { + camera.setSessionType(SessionType.VIDEO); + camera.start(); + waitForOpen(true); + camera.startCapturingVideo(null, 1000); + waitForVideo(true); // waits 2000 + } + + @Test + public void testEndVideo_withoutStarting() { + camera.setSessionType(SessionType.VIDEO); + camera.start(); + waitForOpen(true); + camera.stopCapturingVideo(); + waitForVideo(false); + } + + //endregion + + //region startAutoFocus + // TODO: won't test onStopAutoFocus because that is not guaranteed to be called + + @Test + public void testStartAutoFocus() { + camera.start(); + CameraOptions o = waitForOpen(true); + camera.startAutoFocus(1, 1); + if (o.isAutoFocusSupported()) { + verify(listener, times(1)).onFocusStart(new PointF(1, 1)); + } else { + verify(listener, never()).onFocusStart(any(PointF.class)); + } + } + + //endregion // TODO: capturePicture diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java b/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java index 84b8f8ea..ed76dd0c 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java @@ -564,10 +564,10 @@ class Camera1 extends CameraController { @Override boolean startVideo(@NonNull File videoFile) { - mVideoFile = videoFile; if (mIsCapturingVideo) return false; if (!isCameraAvailable()) return false; if (mSessionType == SessionType.VIDEO) { + mVideoFile = videoFile; mIsCapturingVideo = true; initMediaRecorder(); try { @@ -575,7 +575,6 @@ class Camera1 extends CameraController { mMediaRecorder.start(); return true; } catch (Exception e) { - Exception m = e; // FileNotFoundException: Read only file system. LOG.e("Error while starting MediaRecorder.", e); mVideoFile = null; mCamera.lock(); diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java index 719e180f..de7d5b1a 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java @@ -1129,7 +1129,7 @@ public class CameraView extends FrameLayout { throw new IllegalArgumentException("Video duration can't be < 500 milliseconds"); } startCapturingVideo(file); - postDelayed(new Runnable() { + mUiHandler.postDelayed(new Runnable() { @Override public void run() { stopCapturingVideo();