diff --git a/packages/camera/camera_android/CHANGELOG.md b/packages/camera/camera_android/CHANGELOG.md index f070dc7e157..ef7c4c4ab4b 100644 --- a/packages/camera/camera_android/CHANGELOG.md +++ b/packages/camera/camera_android/CHANGELOG.md @@ -1,5 +1,7 @@ -## NEXT +## 0.10.8+14 +* Fixes `pausePreview` null pointer error. `pausePreview` should not be called + when camera is closed or not configured. * Updates minimum supported SDK version to Flutter 3.10/Dart 3.0. ## 0.10.8+13 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 5e526975172..13dd0d74b12 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 @@ -1076,8 +1076,13 @@ public void unlockCaptureOrientation() { /** Pause the preview from dart. */ public void pausePreview() throws CameraAccessException { - this.pausedPreview = true; - this.captureSession.stopRepeating(); + if (!this.pausedPreview) { + this.pausedPreview = true; + + if (this.captureSession != null) { + this.captureSession.stopRepeating(); + } + } } /** Resume the preview from dart. */ 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 db05691ada4..7fdfa24d99f 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 @@ -1165,6 +1165,19 @@ public void close_doesNotCloseCaptureSessionWhenCameraDeviceNonNull() { verify(mockCaptureSession, never()).close(); } + @Test + public void pausePreview_doesNotCallStopRepeatingWhenCameraClosed() throws CameraAccessException { + ArrayList mockRequestBuilders = new ArrayList<>(); + mockRequestBuilders.add(mock(CaptureRequest.Builder.class)); + CameraDeviceWrapper fakeCamera = new FakeCameraDeviceWrapper(mockRequestBuilders); + TestUtils.setPrivateField(camera, "cameraDevice", fakeCamera); + + camera.close(); + camera.pausePreview(); + + verify(mockCaptureSession, never()).stopRepeating(); + } + private static class TestCameraFeatureFactory implements CameraFeatureFactory { private final AutoFocusFeature mockAutoFocusFeature; private final ExposureLockFeature mockExposureLockFeature; diff --git a/packages/camera/camera_android/pubspec.yaml b/packages/camera/camera_android/pubspec.yaml index 021e8facd8c..4d7554d6178 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.8+13 +version: 0.10.8+14 environment: sdk: ">=3.0.0 <4.0.0"