From c3f6e59fdcdbc658df7ee6eee379dc2ea46172b8 Mon Sep 17 00:00:00 2001 From: Mattia Iavarone Date: Fri, 21 Jun 2019 18:22:57 -0500 Subject: [PATCH] Refactor androidTests --- .../cameraview/CameraOptions1Test.java | 3 +- .../cameraview/CameraViewCallbacksTest.java | 11 +- .../cameraview/CameraViewTest.java | 29 +-- .../cameraview/MockCameraEngine.java | 149 --------------- .../cameraview/PictureResultTest.java | 17 +- .../cameraview/VideoResultTest.java | 31 ++-- .../{ => engine}/IntegrationTest.java | 16 +- .../cameraview/{ => engine}/Mapper1Test.java | 7 +- .../cameraview/engine/MockCameraEngine.java | 175 ++++++++++++++++++ .../{ => gesture}/GestureLayoutTest.java | 4 +- .../{ => gesture}/PinchGestureLayoutTest.java | 3 +- .../ScrollGestureLayoutTest.java | 3 +- .../{ => gesture}/TapGestureLayoutTest.java | 3 +- .../{ => internal}/GridLinesLayoutTest.java | 4 +- .../{ => internal/utils}/CropHelperTest.java | 3 +- .../utils}/OrientationHelperTest.java | 3 +- .../utils}/WorkerHandlerTest.java | 3 +- .../{ => picture}/PictureRecorderTest.java | 18 +- .../{ => preview}/CameraPreviewTest.java | 4 +- .../{ => preview}/GlCameraPreviewTest.java | 3 +- .../{ => preview}/MockCameraPreview.java | 13 +- .../SurfaceCameraPreviewTest.java | 3 +- .../TextureCameraPreviewTest.java | 3 +- .../{ => video}/VideoRecorderTest.java | 21 ++- .../otaliastudios/cameraview/CameraUtils.java | 5 +- .../otaliastudios/cameraview/CameraView.java | 4 +- .../cameraview/engine/CameraEngine.java | 6 +- 27 files changed, 316 insertions(+), 228 deletions(-) delete mode 100644 cameraview/src/androidTest/java/com/otaliastudios/cameraview/MockCameraEngine.java rename cameraview/src/androidTest/java/com/otaliastudios/cameraview/{ => engine}/IntegrationTest.java (97%) rename cameraview/src/androidTest/java/com/otaliastudios/cameraview/{ => engine}/Mapper1Test.java (94%) create mode 100644 cameraview/src/androidTest/java/com/otaliastudios/cameraview/engine/MockCameraEngine.java rename cameraview/src/androidTest/java/com/otaliastudios/cameraview/{ => gesture}/GestureLayoutTest.java (93%) rename cameraview/src/androidTest/java/com/otaliastudios/cameraview/{ => gesture}/PinchGestureLayoutTest.java (95%) rename cameraview/src/androidTest/java/com/otaliastudios/cameraview/{ => gesture}/ScrollGestureLayoutTest.java (96%) rename cameraview/src/androidTest/java/com/otaliastudios/cameraview/{ => gesture}/TapGestureLayoutTest.java (96%) rename cameraview/src/androidTest/java/com/otaliastudios/cameraview/{ => internal}/GridLinesLayoutTest.java (92%) rename cameraview/src/androidTest/java/com/otaliastudios/cameraview/{ => internal/utils}/CropHelperTest.java (95%) rename cameraview/src/androidTest/java/com/otaliastudios/cameraview/{ => internal/utils}/OrientationHelperTest.java (97%) rename cameraview/src/androidTest/java/com/otaliastudios/cameraview/{ => internal/utils}/WorkerHandlerTest.java (91%) rename cameraview/src/androidTest/java/com/otaliastudios/cameraview/{ => picture}/PictureRecorderTest.java (59%) rename cameraview/src/androidTest/java/com/otaliastudios/cameraview/{ => preview}/CameraPreviewTest.java (97%) rename cameraview/src/androidTest/java/com/otaliastudios/cameraview/{ => preview}/GlCameraPreviewTest.java (88%) rename cameraview/src/androidTest/java/com/otaliastudios/cameraview/{ => preview}/MockCameraPreview.java (72%) rename cameraview/src/androidTest/java/com/otaliastudios/cameraview/{ => preview}/SurfaceCameraPreviewTest.java (87%) rename cameraview/src/androidTest/java/com/otaliastudios/cameraview/{ => preview}/TextureCameraPreviewTest.java (93%) rename cameraview/src/androidTest/java/com/otaliastudios/cameraview/{ => video}/VideoRecorderTest.java (58%) diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/CameraOptions1Test.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/CameraOptions1Test.java index 15c3e52d..f40b8a0b 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/CameraOptions1Test.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/CameraOptions1Test.java @@ -7,7 +7,6 @@ import com.otaliastudios.cameraview.controls.Audio; import com.otaliastudios.cameraview.controls.Facing; import com.otaliastudios.cameraview.controls.Flash; import com.otaliastudios.cameraview.engine.Mapper; -import com.otaliastudios.cameraview.engine.Mapper1; import com.otaliastudios.cameraview.gesture.GestureAction; import com.otaliastudios.cameraview.controls.Grid; import com.otaliastudios.cameraview.controls.Hdr; @@ -251,7 +250,7 @@ public class CameraOptions1Test extends BaseTest { } CameraOptions o = new CameraOptions(mock(Camera.Parameters.class), false); - Mapper m = new Mapper1(); + Mapper m = Mapper.get(); Collection s = o.getSupportedControls(Facing.class); assertEquals(s.size(), supported.size()); for (Facing facing : s) { diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/CameraViewCallbacksTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/CameraViewCallbacksTest.java index 4ed4fd7f..d7ae45a3 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/CameraViewCallbacksTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/CameraViewCallbacksTest.java @@ -16,6 +16,8 @@ import com.otaliastudios.cameraview.frame.FrameProcessor; import com.otaliastudios.cameraview.gesture.Gesture; import com.otaliastudios.cameraview.gesture.GestureAction; import com.otaliastudios.cameraview.internal.utils.Task; +import com.otaliastudios.cameraview.engine.MockCameraEngine; +import com.otaliastudios.cameraview.preview.MockCameraPreview; import com.otaliastudios.cameraview.preview.CameraPreview; import org.junit.After; @@ -38,6 +40,9 @@ import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; +/** + * Tests {@link CameraView#mCameraCallbacks} dispatch functions. + */ @RunWith(AndroidJUnit4.class) @MediumTest public class CameraViewCallbacksTest extends BaseTest { @@ -58,9 +63,11 @@ public class CameraViewCallbacksTest extends BaseTest { listener = mock(CameraListener.class); processor = mock(FrameProcessor.class); camera = new CameraView(context) { + + @NonNull @Override - protected CameraEngine instantiateCameraController(CameraCallbacks callbacks) { - mockController = new MockCameraEngine(callbacks); + protected CameraEngine instantiateCameraController(@NonNull CameraEngine.Callback callback) { + mockController = new MockCameraEngine(callback); return mockController; } diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/CameraViewTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/CameraViewTest.java index df6de389..fa82d655 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/CameraViewTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/CameraViewTest.java @@ -28,6 +28,8 @@ import com.otaliastudios.cameraview.gesture.GestureParser; import com.otaliastudios.cameraview.gesture.PinchGestureLayout; import com.otaliastudios.cameraview.gesture.ScrollGestureLayout; import com.otaliastudios.cameraview.gesture.TapGestureLayout; +import com.otaliastudios.cameraview.engine.MockCameraEngine; +import com.otaliastudios.cameraview.preview.MockCameraPreview; import com.otaliastudios.cameraview.preview.CameraPreview; import com.otaliastudios.cameraview.size.Size; import com.otaliastudios.cameraview.size.SizeSelector; @@ -61,9 +63,11 @@ public class CameraViewTest extends BaseTest { public void run() { Context context = context(); cameraView = new CameraView(context) { + + @NonNull @Override - protected CameraEngine instantiateCameraController(CameraCallbacks callbacks) { - mockController = spy(new MockCameraEngine(callbacks)); + protected CameraEngine instantiateCameraController(@NonNull CameraEngine.Callback callback) { + mockController = spy(new MockCameraEngine(callback)); return mockController; } @@ -141,6 +145,7 @@ public class CameraViewTest extends BaseTest { assertEquals(cameraView.getHdr(), controls.getHdr()); assertEquals(cameraView.getAudio(), controls.getAudio()); assertEquals(cameraView.getVideoCodec(), controls.getVideoCodec()); + //noinspection SimplifiableJUnitAssertion assertEquals(cameraView.getLocation(), null); assertEquals(cameraView.getExposureCorrection(), 0f, 0f); assertEquals(cameraView.getZoom(), 0f, 0f); @@ -476,11 +481,11 @@ public class CameraViewTest extends BaseTest { @Test public void testSetLocation() { cameraView.setLocation(50d, -50d); - assertEquals(50d, mockController.mLocation.getLatitude(), 0); - assertEquals(-50d, mockController.mLocation.getLongitude(), 0); - assertEquals(0, mockController.mLocation.getAltitude(), 0); - assertEquals("Unknown", mockController.mLocation.getProvider()); - assertEquals(System.currentTimeMillis(), mockController.mLocation.getTime(), 1000f); + assertEquals(50d, mockController.getLocation().getLatitude(), 0); + assertEquals(-50d, mockController.getLocation().getLongitude(), 0); + assertEquals(0, mockController.getLocation().getAltitude(), 0); + assertEquals("Unknown", mockController.getLocation().getProvider()); + assertEquals(System.currentTimeMillis(), mockController.getLocation().getTime(), 1000f); Location source = new Location("Provider"); source.setTime(5000); @@ -613,7 +618,7 @@ public class CameraViewTest extends BaseTest { public void testPreviewStreamSizeSelector() { SizeSelector source = SizeSelectors.minHeight(50); cameraView.setPreviewStreamSize(source); - SizeSelector result = mockController.getPreviewStreamSizeSelector(); + SizeSelector result = mockController.getInternalPreviewStreamSizeSelector(); assertNotNull(result); assertEquals(result, source); } @@ -622,7 +627,7 @@ public class CameraViewTest extends BaseTest { public void testPictureSizeSelector() { SizeSelector source = SizeSelectors.minHeight(50); cameraView.setPictureSize(source); - SizeSelector result = mockController.getPictureSizeSelector(); + SizeSelector result = mockController.getInternalPictureSizeSelector(); assertNotNull(result); assertEquals(result, source); } @@ -631,7 +636,7 @@ public class CameraViewTest extends BaseTest { public void testVideoSizeSelector() { SizeSelector source = SizeSelectors.minHeight(50); cameraView.setVideoSize(source); - SizeSelector result = mockController.getVideoSizeSelector(); + SizeSelector result = mockController.getInternalVideoSizeSelector(); assertNotNull(result); assertEquals(result, source); } @@ -718,8 +723,8 @@ public class CameraViewTest extends BaseTest { public void testSetSnapshotMaxSize() { cameraView.setSnapshotMaxWidth(500); cameraView.setSnapshotMaxHeight(1000); - assertEquals(mockController.mSnapshotMaxWidth, 500); - assertEquals(mockController.mSnapshotMaxHeight, 1000); + assertEquals(mockController.getSnapshotMaxWidth(), 500); + assertEquals(mockController.getSnapshotMaxHeight(), 1000); } //endregion diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/MockCameraEngine.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/MockCameraEngine.java deleted file mode 100644 index bf2e353a..00000000 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/MockCameraEngine.java +++ /dev/null @@ -1,149 +0,0 @@ -package com.otaliastudios.cameraview; - - -import android.graphics.PointF; -import android.location.Location; - -import com.otaliastudios.cameraview.controls.Audio; -import com.otaliastudios.cameraview.controls.Facing; -import com.otaliastudios.cameraview.controls.Flash; -import com.otaliastudios.cameraview.engine.CameraEngine; -import com.otaliastudios.cameraview.gesture.Gesture; -import com.otaliastudios.cameraview.controls.Hdr; -import com.otaliastudios.cameraview.controls.Mode; -import com.otaliastudios.cameraview.controls.WhiteBalance; -import com.otaliastudios.cameraview.size.AspectRatio; -import com.otaliastudios.cameraview.size.Size; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import java.io.File; - -public class MockCameraEngine extends CameraEngine { - - boolean mPictureCaptured; - boolean mFocusStarted; - boolean mZoomChanged; - boolean mExposureCorrectionChanged; - - MockCameraEngine(CameraView.CameraCallbacks callback) { - super(callback); - } - - void setMockCameraOptions(CameraOptions options) { - mCameraOptions = options; - } - - void setMockPreviewStreamSize(Size size) { - mPreviewStreamSize = size; - } - - void mockStarted(boolean started) { - mState = started ? STATE_STARTED : STATE_STOPPED; - } - - @Override - void onStart() { - } - - @Override - void onStop() { - } - - @Override - void setZoom(float zoom, @Nullable PointF[] points, boolean notify) { - mZoomValue = zoom; - mZoomChanged = true; - } - - @Override - void setExposureCorrection(float EVvalue, @NonNull float[] bounds, @Nullable PointF[] points, boolean notify) { - mExposureCorrectionValue = EVvalue; - mExposureCorrectionChanged = true; - } - - @Override - void setFacing(@NonNull Facing facing) { - mFacing = facing; - } - - @Override - void setFlash(@NonNull Flash flash) { - mFlash = flash; - } - - @Override - void setWhiteBalance(@NonNull WhiteBalance whiteBalance) { - mWhiteBalance = whiteBalance; - } - - @Override - void setMode(@NonNull Mode mode) { - mMode = mode; - } - - @Override - void setHdr(@NonNull Hdr hdr) { - mHdr = hdr; - } - - @Override - void setAudio(@NonNull Audio audio) { - mAudio = audio; - } - - @Override - void setLocation(@Nullable Location location) { - mLocation = location; - } - - @Override - void takePicture() { - mPictureCaptured = true; - } - - @Override - void takePictureSnapshot(@NonNull AspectRatio viewAspectRatio) { - } - - @Override - void takeVideo(@NonNull File file) { - } - - @Override - void takeVideoSnapshot(@NonNull File file, @NonNull AspectRatio viewAspectRatio) { - - } - - @Override - void stopVideo() { - } - - @Override - void startAutoFocus(@Nullable Gesture gesture, @NonNull PointF point) { - mFocusStarted = true; - } - - @Override - public void onSurfaceChanged() { - } - - @Override - public void onSurfaceAvailable() { - } - - @Override - public void onSurfaceDestroyed() { - - } - - @Override - public void onBufferAvailable(@NonNull byte[] buffer) { - } - - @Override - void setPlaySounds(boolean playSounds) { - - } -} diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/PictureResultTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/PictureResultTest.java index fd014f84..138dbdd9 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/PictureResultTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/PictureResultTest.java @@ -20,7 +20,7 @@ import static org.junit.Assert.assertEquals; @SmallTest public class PictureResultTest extends BaseTest { - private PictureResult result = new PictureResult(); + private PictureResult.Stub stub = new PictureResult.Stub(); @Test public void testResult() { @@ -32,15 +32,16 @@ public class PictureResultTest extends BaseTest { boolean isSnapshot = true; Facing facing = Facing.FRONT; - result. format = format; - result.rotation = rotation; - result.size = size; - result.data = jpeg; - result.location = location; - result.facing = facing; + stub.format = format; + stub.rotation = rotation; + stub.size = size; + stub.data = jpeg; + stub.location = location; + stub.facing = facing; //noinspection ConstantConditions - result.isSnapshot = isSnapshot; + stub.isSnapshot = isSnapshot; + PictureResult result = new PictureResult(stub); assertEquals(result.getFormat(), format); assertEquals(result.getRotation(), rotation); assertEquals(result.getSize(), size); diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/VideoResultTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/VideoResultTest.java index 303cc7b7..2f470906 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/VideoResultTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/VideoResultTest.java @@ -24,7 +24,7 @@ import static org.junit.Assert.assertEquals; @SmallTest public class VideoResultTest extends BaseTest { - private VideoResult result = new VideoResult(); + private VideoResult.Stub stub = new VideoResult.Stub(); @Test public void testResult() { @@ -43,21 +43,22 @@ public class VideoResultTest extends BaseTest { Audio audio = Audio.ON; Facing facing = Facing.FRONT; - result.file = file; - result.rotation = rotation; - result.size = size; - result.codec = codec; - result.location = location; - result.isSnapshot = isSnapshot; - result.maxDuration = maxDuration; - result.maxSize = maxFileSize; - result.endReason = reason; - result.videoFrameRate = videoFrameRate; - result.videoBitRate = videoBitRate; - result.audioBitRate = audioBitRate; - result.audio = audio; - result.facing = facing; + stub.file = file; + stub.rotation = rotation; + stub.size = size; + stub.videoCodec = codec; + stub.location = location; + stub.isSnapshot = isSnapshot; + stub.maxDuration = maxDuration; + stub.maxSize = maxFileSize; + stub.endReason = reason; + stub.videoFrameRate = videoFrameRate; + stub.videoBitRate = videoBitRate; + stub.audioBitRate = audioBitRate; + stub.audio = audio; + stub.facing = facing; + VideoResult result = new VideoResult(stub); assertEquals(result.getFile(), file); assertEquals(result.getRotation(), rotation); assertEquals(result.getSize(), size); diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/IntegrationTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/engine/IntegrationTest.java similarity index 97% rename from cameraview/src/androidTest/java/com/otaliastudios/cameraview/IntegrationTest.java rename to cameraview/src/androidTest/java/com/otaliastudios/cameraview/engine/IntegrationTest.java index 2e073c74..555611e1 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/IntegrationTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/engine/IntegrationTest.java @@ -1,4 +1,4 @@ -package com.otaliastudios.cameraview; +package com.otaliastudios.cameraview.engine; import android.graphics.Bitmap; @@ -6,6 +6,14 @@ import android.graphics.PointF; import android.hardware.Camera; import android.os.Build; +import com.otaliastudios.cameraview.BaseTest; +import com.otaliastudios.cameraview.CameraListener; +import com.otaliastudios.cameraview.CameraOptions; +import com.otaliastudios.cameraview.CameraUtils; +import com.otaliastudios.cameraview.CameraView; +import com.otaliastudios.cameraview.PictureResult; +import com.otaliastudios.cameraview.TestActivity; +import com.otaliastudios.cameraview.VideoResult; import com.otaliastudios.cameraview.controls.Audio; import com.otaliastudios.cameraview.controls.Flash; import com.otaliastudios.cameraview.controls.Hdr; @@ -78,9 +86,11 @@ public class IntegrationTest extends BaseTest { @Override public void run() { camera = new CameraView(rule.getActivity()) { + + @NonNull @Override - protected CameraEngine instantiateCameraController(CameraCallbacks callbacks) { - controller = new Camera1Engine(callbacks); + protected CameraEngine instantiateCameraController(@NonNull CameraEngine.Callback callback) { + controller = new Camera1Engine(callback); return controller; } }; diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/Mapper1Test.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/engine/Mapper1Test.java similarity index 94% rename from cameraview/src/androidTest/java/com/otaliastudios/cameraview/Mapper1Test.java rename to cameraview/src/androidTest/java/com/otaliastudios/cameraview/engine/Mapper1Test.java index 882683bd..86dbbcb6 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/Mapper1Test.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/engine/Mapper1Test.java @@ -1,14 +1,13 @@ -package com.otaliastudios.cameraview; +package com.otaliastudios.cameraview.engine; import android.hardware.Camera; +import com.otaliastudios.cameraview.BaseTest; import com.otaliastudios.cameraview.controls.Facing; import com.otaliastudios.cameraview.controls.Flash; import com.otaliastudios.cameraview.controls.Hdr; import com.otaliastudios.cameraview.controls.WhiteBalance; -import com.otaliastudios.cameraview.engine.Mapper; -import com.otaliastudios.cameraview.engine.Mapper1; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; @@ -23,7 +22,7 @@ import static org.junit.Assert.*; @SmallTest public class Mapper1Test extends BaseTest { - private Mapper mapper = new Mapper1(); + private Mapper mapper = Mapper.get(); @Test public void testMap() { diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/engine/MockCameraEngine.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/engine/MockCameraEngine.java new file mode 100644 index 00000000..aa101253 --- /dev/null +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/engine/MockCameraEngine.java @@ -0,0 +1,175 @@ +package com.otaliastudios.cameraview.engine; + + +import android.graphics.PointF; +import android.location.Location; + +import com.otaliastudios.cameraview.CameraOptions; +import com.otaliastudios.cameraview.PictureResult; +import com.otaliastudios.cameraview.VideoResult; +import com.otaliastudios.cameraview.controls.Audio; +import com.otaliastudios.cameraview.controls.Facing; +import com.otaliastudios.cameraview.controls.Flash; +import com.otaliastudios.cameraview.engine.CameraEngine; +import com.otaliastudios.cameraview.gesture.Gesture; +import com.otaliastudios.cameraview.controls.Hdr; +import com.otaliastudios.cameraview.controls.Mode; +import com.otaliastudios.cameraview.controls.WhiteBalance; +import com.otaliastudios.cameraview.size.AspectRatio; +import com.otaliastudios.cameraview.size.Size; +import com.otaliastudios.cameraview.size.SizeSelector; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.VisibleForTesting; + +import java.io.File; + +public class MockCameraEngine extends CameraEngine { + + public boolean mPictureCaptured; + public boolean mFocusStarted; + public boolean mZoomChanged; + public boolean mExposureCorrectionChanged; + + public MockCameraEngine(CameraEngine.Callback callback) { + super(callback); + } + + @Override + protected void onStart() { + } + + @Override + protected void onStop() { + } + + public void setMockCameraOptions(CameraOptions options) { + mCameraOptions = options; + } + + public void setMockPreviewStreamSize(Size size) { + mPreviewStreamSize = size; + } + + public void mockStarted(boolean started) { + mState = started ? STATE_STARTED : STATE_STOPPED; + } + + public int getSnapshotMaxWidth() { + return mSnapshotMaxWidth; + } + + public int getSnapshotMaxHeight() { + return mSnapshotMaxHeight; + } + + public SizeSelector getInternalPreviewStreamSizeSelector() { + return super.getPreviewStreamSizeSelector(); + } + + public SizeSelector getInternalPictureSizeSelector() { + return super.getPictureSizeSelector(); + } + + public SizeSelector getInternalVideoSizeSelector() { + return super.getVideoSizeSelector(); + } + + + @Override + public void setZoom(float zoom, @Nullable PointF[] points, boolean notify) { + mZoomValue = zoom; + mZoomChanged = true; + } + + @Override + public void setExposureCorrection(float EVvalue, @NonNull float[] bounds, @Nullable PointF[] points, boolean notify) { + mExposureCorrectionValue = EVvalue; + mExposureCorrectionChanged = true; + } + + @Override + public void setFacing(@NonNull Facing facing) { + mFacing = facing; + } + + @Override + public void setFlash(@NonNull Flash flash) { + mFlash = flash; + } + + @Override + public void setWhiteBalance(@NonNull WhiteBalance whiteBalance) { + mWhiteBalance = whiteBalance; + } + + @Override + public void setMode(@NonNull Mode mode) { + mMode = mode; + } + + @Override + public void setHdr(@NonNull Hdr hdr) { + mHdr = hdr; + } + + @Override + public void setAudio(@NonNull Audio audio) { + mAudio = audio; + } + + @Override + public void setLocation(@Nullable Location location) { + mLocation = location; + } + + @Override + public void takePicture(@NonNull PictureResult.Stub stub) { + mPictureCaptured = true; + } + + @Override + public void takePictureSnapshot(@NonNull PictureResult.Stub stub, @NonNull AspectRatio viewAspectRatio) { + } + + @Override + public void takeVideo(@NonNull VideoResult.Stub stub, @NonNull File file) { + } + + @Override + public void takeVideoSnapshot(@NonNull VideoResult.Stub stub, @NonNull File file, @NonNull AspectRatio viewAspectRatio) { + } + + + @Override + public void stopVideo() { + } + + @Override + public void startAutoFocus(@Nullable Gesture gesture, @NonNull PointF point) { + mFocusStarted = true; + } + + @Override + public void onSurfaceChanged() { + } + + @Override + public void onSurfaceAvailable() { + } + + @Override + public void onSurfaceDestroyed() { + + } + + @Override + public void onBufferAvailable(@NonNull byte[] buffer) { + } + + @Override + public void setPlaySounds(boolean playSounds) { + + } +} diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/GestureLayoutTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/gesture/GestureLayoutTest.java similarity index 93% rename from cameraview/src/androidTest/java/com/otaliastudios/cameraview/GestureLayoutTest.java rename to cameraview/src/androidTest/java/com/otaliastudios/cameraview/gesture/GestureLayoutTest.java index 65eec527..1740c8d6 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/GestureLayoutTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/gesture/GestureLayoutTest.java @@ -1,4 +1,4 @@ -package com.otaliastudios.cameraview; +package com.otaliastudios.cameraview.gesture; import android.annotation.TargetApi; @@ -10,6 +10,8 @@ import androidx.test.rule.ActivityTestRule; import android.view.MotionEvent; import android.view.View; +import com.otaliastudios.cameraview.BaseTest; +import com.otaliastudios.cameraview.TestActivity; import com.otaliastudios.cameraview.gesture.Gesture; import com.otaliastudios.cameraview.gesture.GestureLayout; import com.otaliastudios.cameraview.internal.utils.Task; diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/PinchGestureLayoutTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/gesture/PinchGestureLayoutTest.java similarity index 95% rename from cameraview/src/androidTest/java/com/otaliastudios/cameraview/PinchGestureLayoutTest.java rename to cameraview/src/androidTest/java/com/otaliastudios/cameraview/gesture/PinchGestureLayoutTest.java index fb57d21a..2e39b210 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/PinchGestureLayoutTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/gesture/PinchGestureLayoutTest.java @@ -1,9 +1,10 @@ -package com.otaliastudios.cameraview; +package com.otaliastudios.cameraview.gesture; import android.content.Context; import com.otaliastudios.cameraview.gesture.Gesture; +import com.otaliastudios.cameraview.gesture.GestureLayoutTest; import com.otaliastudios.cameraview.gesture.PinchGestureLayout; import androidx.test.espresso.ViewAction; diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/ScrollGestureLayoutTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/gesture/ScrollGestureLayoutTest.java similarity index 96% rename from cameraview/src/androidTest/java/com/otaliastudios/cameraview/ScrollGestureLayoutTest.java rename to cameraview/src/androidTest/java/com/otaliastudios/cameraview/gesture/ScrollGestureLayoutTest.java index f158af3d..6ceb5772 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/ScrollGestureLayoutTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/gesture/ScrollGestureLayoutTest.java @@ -1,9 +1,10 @@ -package com.otaliastudios.cameraview; +package com.otaliastudios.cameraview.gesture; import android.content.Context; import com.otaliastudios.cameraview.gesture.Gesture; +import com.otaliastudios.cameraview.gesture.GestureLayoutTest; import com.otaliastudios.cameraview.gesture.ScrollGestureLayout; import androidx.test.espresso.ViewAction; diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/TapGestureLayoutTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/gesture/TapGestureLayoutTest.java similarity index 96% rename from cameraview/src/androidTest/java/com/otaliastudios/cameraview/TapGestureLayoutTest.java rename to cameraview/src/androidTest/java/com/otaliastudios/cameraview/gesture/TapGestureLayoutTest.java index b65097f3..895c4de3 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/TapGestureLayoutTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/gesture/TapGestureLayoutTest.java @@ -1,4 +1,4 @@ -package com.otaliastudios.cameraview; +package com.otaliastudios.cameraview.gesture; import android.content.Context; @@ -12,6 +12,7 @@ import android.view.InputDevice; import android.view.MotionEvent; import com.otaliastudios.cameraview.gesture.Gesture; +import com.otaliastudios.cameraview.gesture.GestureLayoutTest; import com.otaliastudios.cameraview.gesture.TapGestureLayout; import com.otaliastudios.cameraview.size.Size; diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/GridLinesLayoutTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/internal/GridLinesLayoutTest.java similarity index 92% rename from cameraview/src/androidTest/java/com/otaliastudios/cameraview/GridLinesLayoutTest.java rename to cameraview/src/androidTest/java/com/otaliastudios/cameraview/internal/GridLinesLayoutTest.java index fb951982..f6ec2c68 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/GridLinesLayoutTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/internal/GridLinesLayoutTest.java @@ -1,6 +1,8 @@ -package com.otaliastudios.cameraview; +package com.otaliastudios.cameraview.internal; +import com.otaliastudios.cameraview.BaseTest; +import com.otaliastudios.cameraview.TestActivity; import com.otaliastudios.cameraview.controls.Grid; import com.otaliastudios.cameraview.internal.GridLinesLayout; diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/CropHelperTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/internal/utils/CropHelperTest.java similarity index 95% rename from cameraview/src/androidTest/java/com/otaliastudios/cameraview/CropHelperTest.java rename to cameraview/src/androidTest/java/com/otaliastudios/cameraview/internal/utils/CropHelperTest.java index 7330d5ef..27108f83 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/CropHelperTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/internal/utils/CropHelperTest.java @@ -1,8 +1,9 @@ -package com.otaliastudios.cameraview; +package com.otaliastudios.cameraview.internal.utils; import android.graphics.Rect; +import com.otaliastudios.cameraview.BaseTest; import com.otaliastudios.cameraview.internal.utils.CropHelper; import com.otaliastudios.cameraview.size.AspectRatio; import com.otaliastudios.cameraview.size.Size; diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/OrientationHelperTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/internal/utils/OrientationHelperTest.java similarity index 97% rename from cameraview/src/androidTest/java/com/otaliastudios/cameraview/OrientationHelperTest.java rename to cameraview/src/androidTest/java/com/otaliastudios/cameraview/internal/utils/OrientationHelperTest.java index e2baf05e..558f62be 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/OrientationHelperTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/internal/utils/OrientationHelperTest.java @@ -1,10 +1,11 @@ -package com.otaliastudios.cameraview; +package com.otaliastudios.cameraview.internal.utils; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; import android.view.OrientationEventListener; +import com.otaliastudios.cameraview.BaseTest; import com.otaliastudios.cameraview.internal.utils.OrientationHelper; import org.junit.After; diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/WorkerHandlerTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/internal/utils/WorkerHandlerTest.java similarity index 91% rename from cameraview/src/androidTest/java/com/otaliastudios/cameraview/WorkerHandlerTest.java rename to cameraview/src/androidTest/java/com/otaliastudios/cameraview/internal/utils/WorkerHandlerTest.java index a9c05ca3..1b4b7b35 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/WorkerHandlerTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/internal/utils/WorkerHandlerTest.java @@ -1,6 +1,7 @@ -package com.otaliastudios.cameraview; +package com.otaliastudios.cameraview.internal.utils; +import com.otaliastudios.cameraview.BaseTest; import com.otaliastudios.cameraview.internal.utils.Task; import com.otaliastudios.cameraview.internal.utils.WorkerHandler; diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/PictureRecorderTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/picture/PictureRecorderTest.java similarity index 59% rename from cameraview/src/androidTest/java/com/otaliastudios/cameraview/PictureRecorderTest.java rename to cameraview/src/androidTest/java/com/otaliastudios/cameraview/picture/PictureRecorderTest.java index ecae5d2b..6b05f8ce 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/PictureRecorderTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/picture/PictureRecorderTest.java @@ -1,6 +1,8 @@ -package com.otaliastudios.cameraview; +package com.otaliastudios.cameraview.picture; +import com.otaliastudios.cameraview.BaseTest; +import com.otaliastudios.cameraview.PictureResult; import com.otaliastudios.cameraview.picture.PictureRecorder; import androidx.test.ext.junit.runners.AndroidJUnit4; @@ -10,6 +12,8 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; +import java.lang.reflect.Constructor; + import static org.junit.Assert.assertNull; @@ -18,11 +22,11 @@ import static org.junit.Assert.assertNull; public class PictureRecorderTest extends BaseTest { @Test - public void testRecorder() { - PictureResult result = new PictureResult(); + public void testRecorder() throws Exception { + PictureResult.Stub result = createStub(); PictureRecorder.PictureResultListener listener = Mockito.mock(PictureRecorder.PictureResultListener.class); PictureRecorder recorder = new PictureRecorder(result, listener) { - void take() { + public void take() { dispatchResult(); } }; @@ -31,4 +35,10 @@ public class PictureRecorderTest extends BaseTest { assertNull(recorder.mListener); assertNull(recorder.mResult); } + + private PictureResult.Stub createStub() throws Exception { + Constructor constructor = PictureResult.Stub.class.getConstructor(); + constructor.setAccessible(true); + return constructor.newInstance(); + } } diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/CameraPreviewTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/preview/CameraPreviewTest.java similarity index 97% rename from cameraview/src/androidTest/java/com/otaliastudios/cameraview/CameraPreviewTest.java rename to cameraview/src/androidTest/java/com/otaliastudios/cameraview/preview/CameraPreviewTest.java index 660005ae..ad1501e2 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/CameraPreviewTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/preview/CameraPreviewTest.java @@ -1,10 +1,12 @@ -package com.otaliastudios.cameraview; +package com.otaliastudios.cameraview.preview; import android.content.Context; import androidx.test.rule.ActivityTestRule; import android.view.ViewGroup; +import com.otaliastudios.cameraview.BaseTest; +import com.otaliastudios.cameraview.TestActivity; import com.otaliastudios.cameraview.internal.utils.Task; import com.otaliastudios.cameraview.preview.CameraPreview; import com.otaliastudios.cameraview.size.AspectRatio; diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/GlCameraPreviewTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/preview/GlCameraPreviewTest.java similarity index 88% rename from cameraview/src/androidTest/java/com/otaliastudios/cameraview/GlCameraPreviewTest.java rename to cameraview/src/androidTest/java/com/otaliastudios/cameraview/preview/GlCameraPreviewTest.java index d2c33fe4..f7617f99 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/GlCameraPreviewTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/preview/GlCameraPreviewTest.java @@ -1,4 +1,4 @@ -package com.otaliastudios.cameraview; +package com.otaliastudios.cameraview.preview; import android.content.Context; @@ -8,6 +8,7 @@ import androidx.test.filters.SmallTest; import android.view.ViewGroup; import com.otaliastudios.cameraview.preview.CameraPreview; +import com.otaliastudios.cameraview.preview.CameraPreviewTest; import com.otaliastudios.cameraview.preview.GlCameraPreview; import org.junit.runner.RunWith; diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/MockCameraPreview.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/preview/MockCameraPreview.java similarity index 72% rename from cameraview/src/androidTest/java/com/otaliastudios/cameraview/MockCameraPreview.java rename to cameraview/src/androidTest/java/com/otaliastudios/cameraview/preview/MockCameraPreview.java index cd923bc9..302bfe4f 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/MockCameraPreview.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/preview/MockCameraPreview.java @@ -1,4 +1,4 @@ -package com.otaliastudios.cameraview; +package com.otaliastudios.cameraview.preview; import android.content.Context; @@ -11,12 +11,12 @@ import com.otaliastudios.cameraview.preview.CameraPreview; public class MockCameraPreview extends CameraPreview { - MockCameraPreview(Context context, ViewGroup parent) { + public MockCameraPreview(Context context, ViewGroup parent) { super(context, parent, null); } @Override - boolean supportsCropping() { + public boolean supportsCropping() { return true; } @@ -28,19 +28,20 @@ public class MockCameraPreview extends CameraPreview { @NonNull @Override - Class getOutputClass() { + public Class getOutputClass() { return null; } @NonNull @Override - Void getOutput() { + public Void getOutput() { return null; } + @NonNull @Override - View getRootView() { + public View getRootView() { return null; } } diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/SurfaceCameraPreviewTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/preview/SurfaceCameraPreviewTest.java similarity index 87% rename from cameraview/src/androidTest/java/com/otaliastudios/cameraview/SurfaceCameraPreviewTest.java rename to cameraview/src/androidTest/java/com/otaliastudios/cameraview/preview/SurfaceCameraPreviewTest.java index aa1b6170..9555d341 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/SurfaceCameraPreviewTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/preview/SurfaceCameraPreviewTest.java @@ -1,4 +1,4 @@ -package com.otaliastudios.cameraview; +package com.otaliastudios.cameraview.preview; import android.content.Context; @@ -8,6 +8,7 @@ import androidx.test.filters.SmallTest; import android.view.ViewGroup; import com.otaliastudios.cameraview.preview.CameraPreview; +import com.otaliastudios.cameraview.preview.CameraPreviewTest; import com.otaliastudios.cameraview.preview.SurfaceCameraPreview; import org.junit.runner.RunWith; diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/TextureCameraPreviewTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/preview/TextureCameraPreviewTest.java similarity index 93% rename from cameraview/src/androidTest/java/com/otaliastudios/cameraview/TextureCameraPreviewTest.java rename to cameraview/src/androidTest/java/com/otaliastudios/cameraview/preview/TextureCameraPreviewTest.java index fbb77575..916c4344 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/TextureCameraPreviewTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/preview/TextureCameraPreviewTest.java @@ -1,4 +1,4 @@ -package com.otaliastudios.cameraview; +package com.otaliastudios.cameraview.preview; import android.content.Context; @@ -8,6 +8,7 @@ import androidx.test.filters.SmallTest; import android.view.ViewGroup; import com.otaliastudios.cameraview.preview.CameraPreview; +import com.otaliastudios.cameraview.preview.CameraPreviewTest; import com.otaliastudios.cameraview.preview.TextureCameraPreview; import org.junit.runner.RunWith; diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/VideoRecorderTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/video/VideoRecorderTest.java similarity index 58% rename from cameraview/src/androidTest/java/com/otaliastudios/cameraview/VideoRecorderTest.java rename to cameraview/src/androidTest/java/com/otaliastudios/cameraview/video/VideoRecorderTest.java index f77ce6c1..631c7b90 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/VideoRecorderTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/video/VideoRecorderTest.java @@ -1,6 +1,9 @@ -package com.otaliastudios.cameraview; +package com.otaliastudios.cameraview.video; +import com.otaliastudios.cameraview.BaseTest; +import com.otaliastudios.cameraview.PictureResult; +import com.otaliastudios.cameraview.VideoResult; import com.otaliastudios.cameraview.video.VideoRecorder; import androidx.test.ext.junit.runners.AndroidJUnit4; @@ -10,6 +13,8 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; +import java.lang.reflect.Constructor; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; @@ -19,12 +24,12 @@ import static org.junit.Assert.assertNull; public class VideoRecorderTest extends BaseTest { @Test - public void testRecorder() { - VideoResult result = new VideoResult(); + public void testRecorder() throws Exception { + VideoResult.Stub result = createStub(); VideoRecorder.VideoResultListener listener = Mockito.mock(VideoRecorder.VideoResultListener.class); VideoRecorder recorder = new VideoRecorder(result, listener) { - void start() {} - void stop() { + public void start() {} + public void stop() { dispatchResult(); } }; @@ -34,4 +39,10 @@ public class VideoRecorderTest extends BaseTest { assertNull(recorder.mListener); assertNull(recorder.mResult); } + + private VideoResult.Stub createStub() throws Exception { + Constructor constructor = VideoResult.Stub.class.getConstructor(); + constructor.setAccessible(true); + return constructor.newInstance(); + } } diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraUtils.java b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraUtils.java index 724cdb80..80c39c72 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraUtils.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraUtils.java @@ -217,9 +217,12 @@ public class CameraUtils { * @param source a JPEG byte array * @param maxWidth the max allowed width * @param maxHeight the max allowed height + * @return decoded bitmap or null if error is encountered */ @SuppressWarnings("SameParameterValue") - static Bitmap decodeBitmap(@NonNull byte[] source, int maxWidth, int maxHeight) { + @Nullable + @WorkerThread + public static Bitmap decodeBitmap(@NonNull byte[] source, int maxWidth, int maxHeight) { return decodeBitmap(source, maxWidth, maxHeight, new BitmapFactory.Options()); } diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java index fdf11de7..70e3416c 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java @@ -1633,8 +1633,8 @@ public class CameraView extends FrameLayout implements LifecycleObserver { //region Callbacks and dispatching - - private class CameraCallbacks implements CameraEngine.Callback, OrientationHelper.Callback { + @VisibleForTesting + class CameraCallbacks implements CameraEngine.Callback, OrientationHelper.Callback { private CameraLogger mLogger = CameraLogger.create(CameraCallbacks.class.getSimpleName()); diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/CameraEngine.java b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/CameraEngine.java index b5760924..cc5a0ca8 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/CameraEngine.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/CameraEngine.java @@ -129,7 +129,7 @@ public abstract class CameraEngine implements @VisibleForTesting(otherwise = VisibleForTesting.PROTECTED) Task mStartVideoTask = new Task<>(); @VisibleForTesting(otherwise = VisibleForTesting.PROTECTED) Task mPlaySoundsTask = new Task<>(); - CameraEngine(Callback callback) { + protected CameraEngine(Callback callback) { mCallback = callback; mCrashHandler = new Handler(Looper.getMainLooper()); mHandler = WorkerHandler.get("CameraViewController"); @@ -300,11 +300,11 @@ public abstract class CameraEngine implements // Starts the preview. // At the end of this method camera must be available, e.g. for setting parameters. @WorkerThread - abstract void onStart(); + protected abstract void onStart(); // Stops the preview. @WorkerThread - abstract void onStop(); + protected abstract void onStop(); // Returns current state. public final int getState() {