From e81d5141cc4eb4ccffab28dc9e89b0e263ba36f1 Mon Sep 17 00:00:00 2001 From: "Vladimir E. Koltunov" Date: Mon, 30 Oct 2023 18:24:37 +0300 Subject: [PATCH 1/7] camera_android: Camera.java pausePreview null check Check `captureSession` before call to stopRepeating in pausePreview. --- .../src/main/java/io/flutter/plugins/camera/Camera.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) 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. */ From c8d19546a444d33c21b5b6a99997474e1fe52fa3 Mon Sep 17 00:00:00 2001 From: PROGrand Date: Mon, 30 Oct 2023 18:49:10 +0300 Subject: [PATCH 2/7] version --- packages/camera/camera_android/CHANGELOG.md | 4 ++++ packages/camera/camera_android/pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/camera/camera_android/CHANGELOG.md b/packages/camera/camera_android/CHANGELOG.md index acaa3506443..01c2da43cdb 100644 --- a/packages/camera/camera_android/CHANGELOG.md +++ b/packages/camera/camera_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.10.8+14 + +* Check captureSession before call to stopRepeating in pausePreview + ## 0.10.8+13 * Updates annotations lib to 1.7.0. diff --git a/packages/camera/camera_android/pubspec.yaml b/packages/camera/camera_android/pubspec.yaml index f920e2336fa..d8d921da958 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: ">=2.19.0 <4.0.0" From 50544b6d39e08da6e4b84c08db7ed5ace3390ac6 Mon Sep 17 00:00:00 2001 From: "vladimir.koltunov" Date: Sun, 5 Nov 2023 12:03:47 +0300 Subject: [PATCH 3/7] CHANGELOG comment --- packages/camera/camera_android/CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/camera/camera_android/CHANGELOG.md b/packages/camera/camera_android/CHANGELOG.md index 01c2da43cdb..605c6eda7e5 100644 --- a/packages/camera/camera_android/CHANGELOG.md +++ b/packages/camera/camera_android/CHANGELOG.md @@ -1,6 +1,7 @@ ## 0.10.8+14 -* Check captureSession before call to stopRepeating in pausePreview +* Fixes `pausePreview` null pointer error. `pausePreview` should not be called + when camera is closed or not configured. ## 0.10.8+13 From 8db1f603140d5c870a336947c9776c8545ab5460 Mon Sep 17 00:00:00 2001 From: "vladimir.koltunov" Date: Mon, 6 Nov 2023 12:22:10 +0300 Subject: [PATCH 4/7] close_doesNotThrowExceptionWhenPauseCalledOnClosedCamera test added --- .../java/io/flutter/plugins/camera/CameraTest.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) 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..f7fe80aadf4 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 close_doesNotThrowExceptionWhenPauseCalledOnClosedCamera() 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; From c9532b56cae680a931b6411ee0961cd53d301fff Mon Sep 17 00:00:00 2001 From: "vladimir.koltunov" Date: Mon, 6 Nov 2023 12:38:57 +0300 Subject: [PATCH 5/7] formatted --- .../src/test/java/io/flutter/plugins/camera/CameraTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 f7fe80aadf4..3c803321281 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 @@ -1166,7 +1166,8 @@ public void close_doesNotCloseCaptureSessionWhenCameraDeviceNonNull() { } @Test - public void close_doesNotThrowExceptionWhenPauseCalledOnClosedCamera() throws CameraAccessException { + public void close_doesNotThrowExceptionWhenPauseCalledOnClosedCamera() + throws CameraAccessException { ArrayList mockRequestBuilders = new ArrayList<>(); mockRequestBuilders.add(mock(CaptureRequest.Builder.class)); CameraDeviceWrapper fakeCamera = new FakeCameraDeviceWrapper(mockRequestBuilders); From bb99d70b66989031b136968545fab752f590eeed Mon Sep 17 00:00:00 2001 From: "Vladimir E. Koltunov" Date: Sat, 25 Nov 2023 11:18:40 +0300 Subject: [PATCH 6/7] Update packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/CameraTest.java Co-authored-by: Camille Simon <43054281+camsim99@users.noreply.github.com> --- .../src/test/java/io/flutter/plugins/camera/CameraTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 3c803321281..422f991958f 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 @@ -1166,7 +1166,7 @@ public void close_doesNotCloseCaptureSessionWhenCameraDeviceNonNull() { } @Test - public void close_doesNotThrowExceptionWhenPauseCalledOnClosedCamera() + public void pausePreview_doesNotCallStopRepeatingWhenCameraClosed() throws CameraAccessException { ArrayList mockRequestBuilders = new ArrayList<>(); mockRequestBuilders.add(mock(CaptureRequest.Builder.class)); From fe939b6ec90926cc76ea83f66005ab3fa1c7e8dc Mon Sep 17 00:00:00 2001 From: "vladimir.koltunov" Date: Sat, 25 Nov 2023 19:50:02 +0300 Subject: [PATCH 7/7] format --- .../src/test/java/io/flutter/plugins/camera/CameraTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 422f991958f..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 @@ -1166,8 +1166,7 @@ public void close_doesNotCloseCaptureSessionWhenCameraDeviceNonNull() { } @Test - public void pausePreview_doesNotCallStopRepeatingWhenCameraClosed() - throws CameraAccessException { + public void pausePreview_doesNotCallStopRepeatingWhenCameraClosed() throws CameraAccessException { ArrayList mockRequestBuilders = new ArrayList<>(); mockRequestBuilders.add(mock(CaptureRequest.Builder.class)); CameraDeviceWrapper fakeCamera = new FakeCameraDeviceWrapper(mockRequestBuilders);