Skip to content

Commit fcb1272

Browse files
authored
camera_android: Camera.java pausePreview null check (#5265)
Fix: Check `captureSession` before call to stopRepeating in pausePreview. [camera_android] sometimes crashes on pausePreview [#137544](flutter/flutter#137544) *If you had to change anything in the [flutter/tests] repo, include a link to the migration guide as per the [breaking change policy].*
1 parent b12fb57 commit fcb1272

File tree

4 files changed

+24
-4
lines changed

4 files changed

+24
-4
lines changed

packages/camera/camera_android/CHANGELOG.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
## NEXT
1+
## 0.10.8+14
22

3+
* Fixes `pausePreview` null pointer error. `pausePreview` should not be called
4+
when camera is closed or not configured.
35
* Updates minimum supported SDK version to Flutter 3.10/Dart 3.0.
46

57
## 0.10.8+13

packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Camera.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1076,8 +1076,13 @@ public void unlockCaptureOrientation() {
10761076

10771077
/** Pause the preview from dart. */
10781078
public void pausePreview() throws CameraAccessException {
1079-
this.pausedPreview = true;
1080-
this.captureSession.stopRepeating();
1079+
if (!this.pausedPreview) {
1080+
this.pausedPreview = true;
1081+
1082+
if (this.captureSession != null) {
1083+
this.captureSession.stopRepeating();
1084+
}
1085+
}
10811086
}
10821087

10831088
/** Resume the preview from dart. */

packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/CameraTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1165,6 +1165,19 @@ public void close_doesNotCloseCaptureSessionWhenCameraDeviceNonNull() {
11651165
verify(mockCaptureSession, never()).close();
11661166
}
11671167

1168+
@Test
1169+
public void pausePreview_doesNotCallStopRepeatingWhenCameraClosed() throws CameraAccessException {
1170+
ArrayList<CaptureRequest.Builder> mockRequestBuilders = new ArrayList<>();
1171+
mockRequestBuilders.add(mock(CaptureRequest.Builder.class));
1172+
CameraDeviceWrapper fakeCamera = new FakeCameraDeviceWrapper(mockRequestBuilders);
1173+
TestUtils.setPrivateField(camera, "cameraDevice", fakeCamera);
1174+
1175+
camera.close();
1176+
camera.pausePreview();
1177+
1178+
verify(mockCaptureSession, never()).stopRepeating();
1179+
}
1180+
11681181
private static class TestCameraFeatureFactory implements CameraFeatureFactory {
11691182
private final AutoFocusFeature mockAutoFocusFeature;
11701183
private final ExposureLockFeature mockExposureLockFeature;

packages/camera/camera_android/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ description: Android implementation of the camera plugin.
33
repository: https://github.com/flutter/packages/tree/main/packages/camera/camera_android
44
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22
55

6-
version: 0.10.8+13
6+
version: 0.10.8+14
77

88
environment:
99
sdk: ">=3.0.0 <4.0.0"

0 commit comments

Comments
 (0)