diff --git a/packages/camera/camera_android/CHANGELOG.md b/packages/camera/camera_android/CHANGELOG.md index 01dab3badc0..66cd2dc329e 100644 --- a/packages/camera/camera_android/CHANGELOG.md +++ b/packages/camera/camera_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.10.9+1 + +* Changes the visibility of a number of fields to `@VisibleForTesting` in order simplify testing. + ## 0.10.9 * Adds support to control video FPS and bitrate. See `CameraController.withSettings`. diff --git a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Camera.java b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Camera.java index c6eeb65545b..7668ec97eec 100644 --- a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Camera.java +++ b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Camera.java @@ -105,15 +105,15 @@ class Camera * Takes an input/output surface and orients the recording correctly. This is needed because * switching cameras while recording causes the wrong orientation. */ - private VideoRenderer videoRenderer; + @VisibleForTesting VideoRenderer videoRenderer; /** * Whether or not the camera aligns with the initial way the camera was facing if the camera was * flipped. */ - private int initialCameraFacing; + @VisibleForTesting int initialCameraFacing; - private final SurfaceTextureEntry flutterTexture; + @VisibleForTesting final SurfaceTextureEntry flutterTexture; private final VideoCaptureSettings videoCaptureSettings; private final Context applicationContext; final DartMessenger dartMessenger; @@ -130,16 +130,16 @@ class Camera CameraDeviceWrapper cameraDevice; CameraCaptureSession captureSession; - private ImageReader pictureImageReader; + @VisibleForTesting ImageReader pictureImageReader; ImageStreamReader imageStreamReader; /** {@link CaptureRequest.Builder} for the camera preview */ CaptureRequest.Builder previewRequestBuilder; - private MediaRecorder mediaRecorder; + @VisibleForTesting MediaRecorder mediaRecorder; /** True when recording video. */ boolean recordingVideo; /** True when the preview is paused. */ - private boolean pausedPreview; + @VisibleForTesting boolean pausedPreview; private File captureFile; diff --git a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/MethodCallHandlerImpl.java b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/MethodCallHandlerImpl.java index 19b16e8f7bf..eae8c650fe6 100644 --- a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/MethodCallHandlerImpl.java +++ b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/MethodCallHandlerImpl.java @@ -10,6 +10,7 @@ import android.os.Looper; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.annotation.VisibleForTesting; import io.flutter.embedding.engine.systemchannels.PlatformChannel; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.EventChannel; @@ -36,7 +37,7 @@ final class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler { private final TextureRegistry textureRegistry; private final MethodChannel methodChannel; private final EventChannel imageStreamChannel; - private @Nullable Camera camera; + @VisibleForTesting @Nullable Camera camera; MethodCallHandlerImpl( Activity activity, diff --git a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/CameraTest.java b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/CameraTest.java index 507f2aefe1a..d2d90b7beca 100644 --- a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/CameraTest.java +++ b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/CameraTest.java @@ -51,7 +51,6 @@ import io.flutter.plugins.camera.features.sensororientation.SensorOrientationFeature; import io.flutter.plugins.camera.features.zoomlevel.ZoomLevelFeature; import io.flutter.plugins.camera.media.ImageStreamReader; -import io.flutter.plugins.camera.utils.TestUtils; import io.flutter.view.TextureRegistry; import java.io.Closeable; import java.io.File; @@ -110,7 +109,7 @@ public void close() {} public class CameraTest { private CameraProperties mockCameraProperties; - private CameraFeatureFactory mockCameraFeatureFactory; + private TestCameraFeatureFactory mockCameraFeatureFactory; private DartMessenger mockDartMessenger; private Camera camera; private CameraCaptureSession mockCaptureSession; @@ -174,8 +173,8 @@ public void before() { mockProfileLegacy.videoFrameRate = 15; when(camera.getRecordingProfileLegacy()).thenReturn(mockProfileLegacy); - TestUtils.setPrivateField(camera, "captureSession", mockCaptureSession); - TestUtils.setPrivateField(camera, "previewRequestBuilder", mockPreviewRequestBuilder); + camera.captureSession = mockCaptureSession; + camera.previewRequestBuilder = mockPreviewRequestBuilder; } @After @@ -556,7 +555,7 @@ public void setZoomLevel_shouldCallErrorOnResultOnCameraAccessException() @Test public void pauseVideoRecording_shouldSendNullResultWhenNotRecording() { - TestUtils.setPrivateField(camera, "recordingVideo", false); + camera.recordingVideo = false; MethodChannel.Result mockResult = mock(MethodChannel.Result.class); camera.pauseVideoRecording(mockResult); @@ -569,8 +568,8 @@ public void pauseVideoRecording_shouldSendNullResultWhenNotRecording() { public void pauseVideoRecording_shouldCallPauseWhenRecordingAndOnAPIN() { MethodChannel.Result mockResult = mock(MethodChannel.Result.class); MediaRecorder mockMediaRecorder = mock(MediaRecorder.class); - TestUtils.setPrivateField(camera, "mediaRecorder", mockMediaRecorder); - TestUtils.setPrivateField(camera, "recordingVideo", true); + camera.mediaRecorder = mockMediaRecorder; + camera.recordingVideo = true; SdkCapabilityChecker.SDK_VERSION = 24; camera.pauseVideoRecording(mockResult); @@ -582,7 +581,7 @@ public void pauseVideoRecording_shouldCallPauseWhenRecordingAndOnAPIN() { @Test public void pauseVideoRecording_shouldSendVideoRecordingFailedErrorWhenVersionCodeSmallerThenN() { - TestUtils.setPrivateField(camera, "recordingVideo", true); + camera.recordingVideo = true; SdkCapabilityChecker.SDK_VERSION = 23; MethodChannel.Result mockResult = mock(MethodChannel.Result.class); @@ -597,8 +596,8 @@ public void pauseVideoRecording_shouldSendVideoRecordingFailedErrorWhenVersionCo public void pauseVideoRecording_shouldSendVideoRecordingFailedErrorWhenMediaRecorderPauseThrowsIllegalStateException() { MediaRecorder mockMediaRecorder = mock(MediaRecorder.class); - TestUtils.setPrivateField(camera, "mediaRecorder", mockMediaRecorder); - TestUtils.setPrivateField(camera, "recordingVideo", true); + camera.mediaRecorder = mockMediaRecorder; + camera.recordingVideo = true; SdkCapabilityChecker.SDK_VERSION = 24; IllegalStateException expectedException = new IllegalStateException("Test error message"); @@ -616,7 +615,7 @@ public void pauseVideoRecording_shouldSendVideoRecordingFailedErrorWhenVersionCo @Test public void resumeVideoRecording_shouldSendNullResultWhenNotRecording() { MethodChannel.Result mockResult = mock(MethodChannel.Result.class); - TestUtils.setPrivateField(camera, "recordingVideo", false); + camera.recordingVideo = false; camera.resumeVideoRecording(mockResult); @@ -628,8 +627,8 @@ public void resumeVideoRecording_shouldSendNullResultWhenNotRecording() { public void resumeVideoRecording_shouldCallPauseWhenRecordingAndOnAPIN() { MethodChannel.Result mockResult = mock(MethodChannel.Result.class); MediaRecorder mockMediaRecorder = mock(MediaRecorder.class); - TestUtils.setPrivateField(camera, "mediaRecorder", mockMediaRecorder); - TestUtils.setPrivateField(camera, "recordingVideo", true); + camera.mediaRecorder = mockMediaRecorder; + camera.recordingVideo = true; SdkCapabilityChecker.SDK_VERSION = 24; camera.resumeVideoRecording(mockResult); @@ -644,9 +643,9 @@ public void setDescriptionWhileRecording_errorsWhenUnsupported() { MethodChannel.Result mockResult = mock(MethodChannel.Result.class); MediaRecorder mockMediaRecorder = mock(MediaRecorder.class); VideoRenderer mockVideoRenderer = mock(VideoRenderer.class); - TestUtils.setPrivateField(camera, "mediaRecorder", mockMediaRecorder); - TestUtils.setPrivateField(camera, "recordingVideo", true); - TestUtils.setPrivateField(camera, "videoRenderer", mockVideoRenderer); + camera.mediaRecorder = mockMediaRecorder; + camera.recordingVideo = true; + camera.videoRenderer = mockVideoRenderer; SdkCapabilityChecker.SDK_VERSION = Build.VERSION_CODES.LOLLIPOP; final CameraProperties newCameraProperties = mock(CameraProperties.class); @@ -664,9 +663,9 @@ public void setDescriptionWhileRecording_succeedsWhenSupported() { MethodChannel.Result mockResult = mock(MethodChannel.Result.class); MediaRecorder mockMediaRecorder = mock(MediaRecorder.class); VideoRenderer mockVideoRenderer = mock(VideoRenderer.class); - TestUtils.setPrivateField(camera, "mediaRecorder", mockMediaRecorder); - TestUtils.setPrivateField(camera, "recordingVideo", true); - TestUtils.setPrivateField(camera, "videoRenderer", mockVideoRenderer); + camera.mediaRecorder = mockMediaRecorder; + camera.recordingVideo = true; + camera.videoRenderer = mockVideoRenderer; SdkCapabilityChecker.SDK_VERSION = Build.VERSION_CODES.O; final CameraProperties newCameraProperties = mock(CameraProperties.class); @@ -684,18 +683,15 @@ public void startPreview_shouldPullStreamFromVideoRenderer() mockRequestBuilders.add(mock(CaptureRequest.Builder.class)); SurfaceTexture mockSurfaceTexture = mock(SurfaceTexture.class); Size mockSize = mock(Size.class); - TestUtils.setPrivateField(camera, "recordingVideo", true); - TestUtils.setPrivateField(camera, "videoRenderer", mockVideoRenderer); + camera.recordingVideo = true; + camera.videoRenderer = mockVideoRenderer; CameraDeviceWrapper fakeCamera = new FakeCameraDeviceWrapper(mockRequestBuilders); - TestUtils.setPrivateField(camera, "cameraDevice", fakeCamera); + camera.cameraDevice = fakeCamera; ImageReader mockPictureImageReader = mock(ImageReader.class); - TestUtils.setPrivateField(camera, "pictureImageReader", mockPictureImageReader); + camera.pictureImageReader = mockPictureImageReader; - TextureRegistry.SurfaceTextureEntry cameraFlutterTexture = - (TextureRegistry.SurfaceTextureEntry) TestUtils.getPrivateField(camera, "flutterTexture"); - ResolutionFeature resolutionFeature = - (ResolutionFeature) - TestUtils.getPrivateField(mockCameraFeatureFactory, "mockResolutionFeature"); + TextureRegistry.SurfaceTextureEntry cameraFlutterTexture = camera.flutterTexture; + ResolutionFeature resolutionFeature = mockCameraFeatureFactory.mockResolutionFeature; when(cameraFlutterTexture.surfaceTexture()).thenReturn(mockSurfaceTexture); when(resolutionFeature.getPreviewSize()).thenReturn(mockSize); @@ -713,16 +709,13 @@ public void startPreview_shouldPullStreamFromImageReader() SurfaceTexture mockSurfaceTexture = mock(SurfaceTexture.class); Size mockSize = mock(Size.class); ImageReader mockImageReader = mock(ImageReader.class); - TestUtils.setPrivateField(camera, "recordingVideo", false); - TestUtils.setPrivateField(camera, "pictureImageReader", mockImageReader); + camera.recordingVideo = false; + camera.pictureImageReader = mockImageReader; CameraDeviceWrapper fakeCamera = new FakeCameraDeviceWrapper(mockRequestBuilders); - TestUtils.setPrivateField(camera, "cameraDevice", fakeCamera); + camera.cameraDevice = fakeCamera; - TextureRegistry.SurfaceTextureEntry cameraFlutterTexture = - (TextureRegistry.SurfaceTextureEntry) TestUtils.getPrivateField(camera, "flutterTexture"); - ResolutionFeature resolutionFeature = - (ResolutionFeature) - TestUtils.getPrivateField(mockCameraFeatureFactory, "mockResolutionFeature"); + TextureRegistry.SurfaceTextureEntry cameraFlutterTexture = camera.flutterTexture; + ResolutionFeature resolutionFeature = mockCameraFeatureFactory.mockResolutionFeature; when(cameraFlutterTexture.surfaceTexture()).thenReturn(mockSurfaceTexture); when(resolutionFeature.getPreviewSize()).thenReturn(mockSize); @@ -740,19 +733,16 @@ public void startPreview_shouldFlipRotation() throws InterruptedException, Camer mockRequestBuilders.add(mock(CaptureRequest.Builder.class)); SurfaceTexture mockSurfaceTexture = mock(SurfaceTexture.class); Size mockSize = mock(Size.class); - TestUtils.setPrivateField(camera, "recordingVideo", true); - TestUtils.setPrivateField(camera, "videoRenderer", mockVideoRenderer); - TestUtils.setPrivateField(camera, "initialCameraFacing", CameraMetadata.LENS_FACING_BACK); + camera.recordingVideo = true; + camera.videoRenderer = mockVideoRenderer; + camera.initialCameraFacing = CameraMetadata.LENS_FACING_BACK; CameraDeviceWrapper fakeCamera = new FakeCameraDeviceWrapper(mockRequestBuilders); - TestUtils.setPrivateField(camera, "cameraDevice", fakeCamera); + camera.cameraDevice = fakeCamera; ImageReader mockPictureImageReader = mock(ImageReader.class); - TestUtils.setPrivateField(camera, "pictureImageReader", mockPictureImageReader); + camera.pictureImageReader = mockPictureImageReader; - TextureRegistry.SurfaceTextureEntry cameraFlutterTexture = - (TextureRegistry.SurfaceTextureEntry) TestUtils.getPrivateField(camera, "flutterTexture"); - ResolutionFeature resolutionFeature = - (ResolutionFeature) - TestUtils.getPrivateField(mockCameraFeatureFactory, "mockResolutionFeature"); + TextureRegistry.SurfaceTextureEntry cameraFlutterTexture = camera.flutterTexture; + ResolutionFeature resolutionFeature = mockCameraFeatureFactory.mockResolutionFeature; when(cameraFlutterTexture.surfaceTexture()).thenReturn(mockSurfaceTexture); when(resolutionFeature.getPreviewSize()).thenReturn(mockSize); @@ -771,17 +761,14 @@ public void startPreviewWithImageStream_shouldPullStreamsFromImageReaders() Size mockSize = mock(Size.class); ImageReader mockPictureImageReader = mock(ImageReader.class); ImageStreamReader mockImageStreamReader = mock(ImageStreamReader.class); - TestUtils.setPrivateField(camera, "recordingVideo", false); - TestUtils.setPrivateField(camera, "pictureImageReader", mockPictureImageReader); + camera.recordingVideo = false; + camera.pictureImageReader = mockPictureImageReader; CameraDeviceWrapper fakeCamera = new FakeCameraDeviceWrapper(mockRequestBuilders); - TestUtils.setPrivateField(camera, "cameraDevice", fakeCamera); + camera.cameraDevice = fakeCamera; camera.imageStreamReader = mockImageStreamReader; - TextureRegistry.SurfaceTextureEntry cameraFlutterTexture = - (TextureRegistry.SurfaceTextureEntry) TestUtils.getPrivateField(camera, "flutterTexture"); - ResolutionFeature resolutionFeature = - (ResolutionFeature) - TestUtils.getPrivateField(mockCameraFeatureFactory, "mockResolutionFeature"); + TextureRegistry.SurfaceTextureEntry cameraFlutterTexture = camera.flutterTexture; + ResolutionFeature resolutionFeature = mockCameraFeatureFactory.mockResolutionFeature; when(cameraFlutterTexture.surfaceTexture()).thenReturn(mockSurfaceTexture); when(resolutionFeature.getPreviewSize()).thenReturn(mockSize); @@ -798,7 +785,7 @@ public void startPreviewWithImageStream_shouldPullStreamsFromImageReaders() @Test public void setDescriptionWhileRecording_shouldErrorWhenNotRecording() { MethodChannel.Result mockResult = mock(MethodChannel.Result.class); - TestUtils.setPrivateField(camera, "recordingVideo", false); + camera.recordingVideo = false; final CameraProperties newCameraProperties = mock(CameraProperties.class); camera.setDescriptionWhileRecording(mockResult, newCameraProperties); @@ -810,7 +797,7 @@ public void setDescriptionWhileRecording_shouldErrorWhenNotRecording() { @Test public void resumeVideoRecording_shouldSendVideoRecordingFailedErrorWhenVersionCodeSmallerThanN() { - TestUtils.setPrivateField(camera, "recordingVideo", true); + camera.recordingVideo = true; SdkCapabilityChecker.SDK_VERSION = 23; MethodChannel.Result mockResult = mock(MethodChannel.Result.class); @@ -826,8 +813,8 @@ public void setDescriptionWhileRecording_shouldErrorWhenNotRecording() { public void resumeVideoRecording_shouldSendVideoRecordingFailedErrorWhenMediaRecorderPauseThrowsIllegalStateException() { MediaRecorder mockMediaRecorder = mock(MediaRecorder.class); - TestUtils.setPrivateField(camera, "mediaRecorder", mockMediaRecorder); - TestUtils.setPrivateField(camera, "recordingVideo", true); + camera.mediaRecorder = mockMediaRecorder; + camera.recordingVideo = true; SdkCapabilityChecker.SDK_VERSION = 24; IllegalStateException expectedException = new IllegalStateException("Test error message"); @@ -877,7 +864,7 @@ public void setFocusMode_shouldUnlockAutoFocusForAutoMode() { @Test public void setFocusMode_shouldSkipUnlockAutoFocusWhenNullCaptureSession() { - TestUtils.setPrivateField(camera, "captureSession", null); + camera.captureSession = null; camera.setFocusMode(mock(MethodChannel.Result.class), FocusMode.auto); verify(mockPreviewRequestBuilder, never()) .set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_CANCEL); @@ -904,19 +891,15 @@ public void startVideoRecording_shouldPullStreamsFromMediaRecorderAndImageReader Size mockSize = mock(Size.class); MediaRecorder mockMediaRecorder = mock(MediaRecorder.class); ImageReader mockPictureImageReader = mock(ImageReader.class); - TestUtils.setPrivateField(cameraSpy, "mediaRecorder", mockMediaRecorder); - TestUtils.setPrivateField(cameraSpy, "recordingVideo", false); - TestUtils.setPrivateField(cameraSpy, "pictureImageReader", mockPictureImageReader); + cameraSpy.mediaRecorder = mockMediaRecorder; + cameraSpy.recordingVideo = false; + cameraSpy.pictureImageReader = mockPictureImageReader; CameraDeviceWrapper fakeCamera = new FakeCameraDeviceWrapper(mockRequestBuilders); - TestUtils.setPrivateField(cameraSpy, "cameraDevice", fakeCamera); + cameraSpy.cameraDevice = fakeCamera; MethodChannel.Result mockResult = mock(MethodChannel.Result.class); - TextureRegistry.SurfaceTextureEntry cameraFlutterTexture = - (TextureRegistry.SurfaceTextureEntry) - TestUtils.getPrivateField(cameraSpy, "flutterTexture"); - ResolutionFeature resolutionFeature = - (ResolutionFeature) - TestUtils.getPrivateField(mockCameraFeatureFactory, "mockResolutionFeature"); + TextureRegistry.SurfaceTextureEntry cameraFlutterTexture = cameraSpy.flutterTexture; + ResolutionFeature resolutionFeature = mockCameraFeatureFactory.mockResolutionFeature; when(cameraFlutterTexture.surfaceTexture()).thenReturn(mockSurfaceTexture); when(resolutionFeature.getPreviewSize()).thenReturn(mockSize); @@ -942,7 +925,7 @@ public void setFocusMode_shouldLockAutoFocusForLockedMode() throws CameraAccessE @Test public void setFocusMode_shouldSkipLockAutoFocusWhenNullCaptureSession() { - TestUtils.setPrivateField(camera, "captureSession", null); + camera.captureSession = null; camera.setFocusMode(mock(MethodChannel.Result.class), FocusMode.locked); verify(mockPreviewRequestBuilder, never()) .set(CaptureRequest.CONTROL_AF_TRIGGER, CaptureRequest.CONTROL_AF_TRIGGER_START); @@ -1040,7 +1023,7 @@ public void unlockCaptureOrientation_shouldUnlockCaptureOrientation() { public void pausePreview_shouldPausePreview() throws CameraAccessException { camera.pausePreview(); - assertEquals(TestUtils.getPrivateField(camera, "pausedPreview"), true); + camera.pausedPreview = true; verify(mockCaptureSession, times(1)).stopRepeating(); } @@ -1048,7 +1031,7 @@ public void pausePreview_shouldPausePreview() throws CameraAccessException { public void resumePreview_shouldResumePreview() throws CameraAccessException { camera.resumePreview(); - assertEquals(TestUtils.getPrivateField(camera, "pausedPreview"), false); + camera.pausedPreview = false; verify(mockCaptureSession, times(1)).setRepeatingRequest(any(), any(), any()); } @@ -1068,7 +1051,7 @@ public void startBackgroundThread_shouldStartNewThread() { camera.startBackgroundThread(); verify(mockHandlerThread, times(1)).start(); - assertEquals(mockHandler, TestUtils.getPrivateField(camera, "backgroundHandler")); + assertEquals(mockHandler, camera.backgroundHandler); } @Test @@ -1094,8 +1077,8 @@ public void onConverge_shouldTakePictureWithoutAbortingSession() throws CameraAc mockRequestBuilders.add(mock(CaptureRequest.Builder.class)); CameraDeviceWrapper fakeCamera = new FakeCameraDeviceWrapper(mockRequestBuilders); // Stub out other features used by the flow. - TestUtils.setPrivateField(camera, "cameraDevice", fakeCamera); - TestUtils.setPrivateField(camera, "pictureImageReader", mock(ImageReader.class)); + camera.cameraDevice = fakeCamera; + camera.pictureImageReader = mock(ImageReader.class); SensorOrientationFeature mockSensorOrientationFeature = mockCameraFeatureFactory.createSensorOrientationFeature(mockCameraProperties, null, null); DeviceOrientationManager mockDeviceOrientationManager = mock(DeviceOrientationManager.class); @@ -1120,15 +1103,11 @@ public void createCaptureSession_doesNotCloseCaptureSession() throws CameraAcces ArrayList mockRequestBuilders = new ArrayList<>(); mockRequestBuilders.add(mock(CaptureRequest.Builder.class)); CameraDeviceWrapper fakeCamera = new FakeCameraDeviceWrapper(mockRequestBuilders); - TestUtils.setPrivateField(camera, "cameraDevice", fakeCamera); + camera.cameraDevice = fakeCamera; - TextureRegistry.SurfaceTextureEntry cameraFlutterTexture = - (TextureRegistry.SurfaceTextureEntry) TestUtils.getPrivateField(camera, "flutterTexture"); - CameraFeatures cameraFeatures = - (CameraFeatures) TestUtils.getPrivateField(camera, "cameraFeatures"); - ResolutionFeature resolutionFeature = - (ResolutionFeature) - TestUtils.getPrivateField(mockCameraFeatureFactory, "mockResolutionFeature"); + TextureRegistry.SurfaceTextureEntry cameraFlutterTexture = camera.flutterTexture; + CameraFeatures cameraFeatures = camera.cameraFeatures; + ResolutionFeature resolutionFeature = mockCameraFeatureFactory.mockResolutionFeature; when(cameraFlutterTexture.surfaceTexture()).thenReturn(mockSurfaceTexture); when(resolutionFeature.getPreviewSize()).thenReturn(mockSize); @@ -1150,17 +1129,13 @@ public void createCaptureSession_shouldNotAddPictureImageSurfaceToPreviewRequest mockRequestBuilders.add(mock(CaptureRequest.Builder.class)); CameraDeviceWrapper fakeCamera = spy(new FakeCameraDeviceWrapper(mockRequestBuilders)); ImageReader mockPictureImageReader = mock(ImageReader.class); - TestUtils.setPrivateField(camera, "cameraDevice", fakeCamera); - TestUtils.setPrivateField(camera, "pictureImageReader", mockPictureImageReader); + camera.cameraDevice = fakeCamera; + camera.pictureImageReader = mockPictureImageReader; CaptureRequest.Builder mockPreviewRequestBuilder = mock(CaptureRequest.Builder.class); - TextureRegistry.SurfaceTextureEntry cameraFlutterTexture = - (TextureRegistry.SurfaceTextureEntry) TestUtils.getPrivateField(camera, "flutterTexture"); - CameraFeatures cameraFeatures = - (CameraFeatures) TestUtils.getPrivateField(camera, "cameraFeatures"); - ResolutionFeature resolutionFeature = - (ResolutionFeature) - TestUtils.getPrivateField(mockCameraFeatureFactory, "mockResolutionFeature"); + TextureRegistry.SurfaceTextureEntry cameraFlutterTexture = camera.flutterTexture; + CameraFeatures cameraFeatures = camera.cameraFeatures; + ResolutionFeature resolutionFeature = mockCameraFeatureFactory.mockResolutionFeature; when(cameraFlutterTexture.surfaceTexture()).thenReturn(mockSurfaceTexture); when(resolutionFeature.getPreviewSize()).thenReturn(mockSize); @@ -1189,7 +1164,7 @@ public void close_doesNotCloseCaptureSessionWhenCameraDeviceNonNull() { ArrayList mockRequestBuilders = new ArrayList<>(); mockRequestBuilders.add(mock(CaptureRequest.Builder.class)); CameraDeviceWrapper fakeCamera = new FakeCameraDeviceWrapper(mockRequestBuilders); - TestUtils.setPrivateField(camera, "cameraDevice", fakeCamera); + camera.cameraDevice = fakeCamera; camera.close(); @@ -1264,8 +1239,8 @@ public void startVideoRecording_shouldApplySettingsToMediaRecorder() when(mockSensorOrientationFeature.getDeviceOrientationManager()) .thenReturn(mockDeviceOrientationManager); - TestUtils.setPrivateField(camera, "captureSession", mockCaptureSession); - TestUtils.setPrivateField(camera, "previewRequestBuilder", mockPreviewRequestBuilder); + camera.captureSession = mockCaptureSession; + camera.previewRequestBuilder = mockPreviewRequestBuilder; final ArrayList mockRequestBuilders = new ArrayList<>(); CaptureRequest.Builder mockRequestBuilder = mock(CaptureRequest.Builder.class); @@ -1273,19 +1248,16 @@ public void startVideoRecording_shouldApplySettingsToMediaRecorder() final SurfaceTexture mockSurfaceTexture = mock(SurfaceTexture.class); final Size mockSize = mock(Size.class); final ImageReader mockPictureImageReader = mock(ImageReader.class); - TestUtils.setPrivateField(camera, "pictureImageReader", mockPictureImageReader); + camera.pictureImageReader = mockPictureImageReader; final CameraDeviceWrapper fakeCamera = new FakeCameraDeviceWrapper(mockRequestBuilders, mockCaptureSession); - TestUtils.setPrivateField(camera, "cameraDevice", fakeCamera); + camera.cameraDevice = fakeCamera; MethodChannel.Result mockResult = mock(MethodChannel.Result.class); - TextureRegistry.SurfaceTextureEntry cameraFlutterTexture = - (TextureRegistry.SurfaceTextureEntry) TestUtils.getPrivateField(camera, "flutterTexture"); + TextureRegistry.SurfaceTextureEntry cameraFlutterTexture = camera.flutterTexture; - ResolutionFeature resolutionFeature = - (ResolutionFeature) - TestUtils.getPrivateField(mockCameraFeatureFactory, "mockResolutionFeature"); + ResolutionFeature resolutionFeature = mockCameraFeatureFactory.mockResolutionFeature; assertNotNull(cameraFlutterTexture); when(cameraFlutterTexture.surfaceTexture()).thenReturn(mockSurfaceTexture); @@ -1306,8 +1278,7 @@ public void startVideoRecording_shouldApplySettingsToMediaRecorder() (Range range) -> range.getLower() == fps && range.getUpper() == fps)); //endregion - final MediaRecorder recorder = - (MediaRecorder) TestUtils.getPrivateField(camera, "mediaRecorder"); + final MediaRecorder recorder = camera.mediaRecorder; //region Check that parameters affects movies, written by MediaRecorder. verify(recorder).setVideoFrameRate(fps); @@ -1322,7 +1293,7 @@ public void pausePreview_doesNotCallStopRepeatingWhenCameraClosed() throws Camer ArrayList mockRequestBuilders = new ArrayList<>(); mockRequestBuilders.add(mock(CaptureRequest.Builder.class)); CameraDeviceWrapper fakeCamera = new FakeCameraDeviceWrapper(mockRequestBuilders); - TestUtils.setPrivateField(camera, "cameraDevice", fakeCamera); + camera.cameraDevice = fakeCamera; camera.close(); camera.pausePreview(); diff --git a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/MethodCallHandlerImplTest.java b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/MethodCallHandlerImplTest.java index 868e2e9e6d5..e4ab82d9eda 100644 --- a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/MethodCallHandlerImplTest.java +++ b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/MethodCallHandlerImplTest.java @@ -16,14 +16,13 @@ import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; -import io.flutter.plugins.camera.utils.TestUtils; import io.flutter.view.TextureRegistry; import org.junit.Before; import org.junit.Test; public class MethodCallHandlerImplTest { - MethodChannel.MethodCallHandler handler; + MethodCallHandlerImpl handler; MethodChannel.Result mockResult; Camera mockCamera; @@ -38,7 +37,7 @@ public void setUp() { mock(TextureRegistry.class)); mockResult = mock(MethodChannel.Result.class); mockCamera = mock(Camera.class); - TestUtils.setPrivateField(handler, "camera", mockCamera); + handler.camera = mockCamera; } @Test diff --git a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/utils/TestUtils.java b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/utils/TestUtils.java deleted file mode 100644 index 79911a0b0b5..00000000000 --- a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/utils/TestUtils.java +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package io.flutter.plugins.camera.utils; - -import java.lang.reflect.Field; -import org.junit.Assert; - -public class TestUtils { - public static void setPrivateField(T instance, String fieldName, Object newValue) { - try { - Field field = instance.getClass().getDeclaredField(fieldName); - field.setAccessible(true); - field.set(instance, newValue); - } catch (Exception e) { - Assert.fail("Unable to mock private field: " + fieldName); - } - } - - public static Object getPrivateField(T instance, String fieldName) { - try { - Field field = instance.getClass().getDeclaredField(fieldName); - field.setAccessible(true); - return field.get(instance); - } catch (Exception e) { - Assert.fail("Unable to mock private field: " + fieldName); - return null; - } - } -} diff --git a/packages/camera/camera_android/pubspec.yaml b/packages/camera/camera_android/pubspec.yaml index 6446f3c7e8d..06958bbd322 100644 --- a/packages/camera/camera_android/pubspec.yaml +++ b/packages/camera/camera_android/pubspec.yaml @@ -3,7 +3,7 @@ description: Android implementation of the camera plugin. repository: https://github.com/flutter/packages/tree/main/packages/camera/camera_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.10.9 +version: 0.10.9+1 environment: sdk: ^3.1.0