From e397649e61a9d02a838518786ab09c9b37ffd915 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 4 May 2022 14:02:03 -0700 Subject: [PATCH 01/26] Make initial changes --- .../java/io/flutter/plugins/camera/CameraPermissions.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraPermissions.java b/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraPermissions.java index 7d60e0fffa5c..b325742ffed7 100644 --- a/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraPermissions.java +++ b/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraPermissions.java @@ -31,9 +31,6 @@ void requestPermissions( PermissionsRegistry permissionsRegistry, boolean enableAudio, ResultCallback callback) { - if (ongoing) { - callback.onResult("cameraPermission", "Camera permission request ongoing"); - } if (!hasCameraPermission(activity) || (enableAudio && !hasAudioPermission(activity))) { permissionsRegistry.addListener( new CameraRequestPermissionsListener( @@ -90,9 +87,9 @@ public boolean onRequestPermissionsResult(int id, String[] permissions, int[] gr alreadyCalled = true; if (grantResults[0] != PackageManager.PERMISSION_GRANTED) { - callback.onResult("cameraPermission", "MediaRecorderCamera permission not granted"); + callback.onResult("CameraAccessDenied", "Camera access permission was denied."); } else if (grantResults.length > 1 && grantResults[1] != PackageManager.PERMISSION_GRANTED) { - callback.onResult("cameraPermission", "MediaRecorderAudio permission not granted"); + callback.onResult("AudioAccessDenied", "Audio access permission was denied."); } else { callback.onResult(null, null); } From 120ef5da18c236733968cb2c3b565216dd23cd11 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 4 May 2022 14:17:26 -0700 Subject: [PATCH 02/26] Remove ongoing, add tests --- .../plugins/camera/CameraPermissions.java | 3 -- .../plugins/camera/CameraPermissionsTest.java | 40 +++++++++++++++++++ 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraPermissions.java b/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraPermissions.java index b325742ffed7..7ef3f4c10bfb 100644 --- a/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraPermissions.java +++ b/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraPermissions.java @@ -24,7 +24,6 @@ interface ResultCallback { } private static final int CAMERA_REQUEST_ID = 9796; - private boolean ongoing = false; void requestPermissions( Activity activity, @@ -35,10 +34,8 @@ void requestPermissions( permissionsRegistry.addListener( new CameraRequestPermissionsListener( (String errorCode, String errorDescription) -> { - ongoing = false; callback.onResult(errorCode, errorDescription); })); - ongoing = true; ActivityCompat.requestPermissions( activity, enableAudio diff --git a/packages/camera/camera/android/src/test/java/io/flutter/plugins/camera/CameraPermissionsTest.java b/packages/camera/camera/android/src/test/java/io/flutter/plugins/camera/CameraPermissionsTest.java index ecb96a88f31a..320c2a2c6bff 100644 --- a/packages/camera/camera/android/src/test/java/io/flutter/plugins/camera/CameraPermissionsTest.java +++ b/packages/camera/camera/android/src/test/java/io/flutter/plugins/camera/CameraPermissionsTest.java @@ -5,6 +5,9 @@ package io.flutter.plugins.camera; import static junit.framework.TestCase.assertEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; import android.content.pm.PackageManager; import io.flutter.plugins.camera.CameraPermissions.CameraRequestPermissionsListener; @@ -24,4 +27,41 @@ public void listener_respondsOnce() { assertEquals(1, calledCounter[0]); } + + @Test + public void callback_respondsWithCameraAccessDenied() { + ResultCallback callback = mock (ResultCallback.class); + CameraRequestPermissionsListener permissionsListener = + new CameraRequestPermissionsListener(callback); + + permissionsListener.onRequestPermissionsResult( + 9796, null, new int[] {PackageManager.PERMISSION_DENIED}); + + verify(callback).onResult("CameraAccessDenied", "Camera access permission was denied."); + } + + @Test + public void callback_respondsWithAudioAccessDenied() { + ResultCallback callback = mock (ResultCallback.class); + CameraRequestPermissionsListener permissionsListener = + new CameraRequestPermissionsListener(callback); + + permissionsListener.onRequestPermissionsResult( + 9796, null, new int[] {PackageManager.GRANTED, PackageManager.PERMISSION_DENIED}); + + verify(callback).onResult("AudioAccessDenied", "Audio access permission was denied."); + } + + @Test + public void callback_doesNotRespond() { + ResultCallback callback = mock (ResultCallback.class); + CameraRequestPermissionsListener permissionsListener = + new CameraRequestPermissionsListener(callback); + + permissionsListener.onRequestPermissionsResult( + 9796, null, new int[] {PackageManager.GRANTED, PackageManager.GRANTED}); + + verify(callback, never()).onResult("CameraAccessDenied", "Camera access permission was denied."); + verify(callback, never()).onResult("AudioAccessDenied", "Audio access permission was denied."); + } } From 236d86dd6858197a670927e4ebe955407de56638 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Thu, 5 May 2022 10:52:13 -0700 Subject: [PATCH 03/26] Fix tests --- .../plugins/camera/CameraPermissionsTest.java | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/packages/camera/camera/android/src/test/java/io/flutter/plugins/camera/CameraPermissionsTest.java b/packages/camera/camera/android/src/test/java/io/flutter/plugins/camera/CameraPermissionsTest.java index 320c2a2c6bff..e4314c7d7a11 100644 --- a/packages/camera/camera/android/src/test/java/io/flutter/plugins/camera/CameraPermissionsTest.java +++ b/packages/camera/camera/android/src/test/java/io/flutter/plugins/camera/CameraPermissionsTest.java @@ -11,6 +11,7 @@ import android.content.pm.PackageManager; import io.flutter.plugins.camera.CameraPermissions.CameraRequestPermissionsListener; +import io.flutter.plugins.camera.CameraPermissions.ResultCallback; import org.junit.Test; public class CameraPermissionsTest { @@ -30,38 +31,43 @@ public void listener_respondsOnce() { @Test public void callback_respondsWithCameraAccessDenied() { - ResultCallback callback = mock (ResultCallback.class); + ResultCallback callback = mock(ResultCallback.class); CameraRequestPermissionsListener permissionsListener = new CameraRequestPermissionsListener(callback); permissionsListener.onRequestPermissionsResult( - 9796, null, new int[] {PackageManager.PERMISSION_DENIED}); + 9796, null, new int[] {PackageManager.PERMISSION_DENIED}); verify(callback).onResult("CameraAccessDenied", "Camera access permission was denied."); } @Test public void callback_respondsWithAudioAccessDenied() { - ResultCallback callback = mock (ResultCallback.class); + ResultCallback callback = mock(ResultCallback.class); CameraRequestPermissionsListener permissionsListener = new CameraRequestPermissionsListener(callback); permissionsListener.onRequestPermissionsResult( - 9796, null, new int[] {PackageManager.GRANTED, PackageManager.PERMISSION_DENIED}); - + 9796, + null, + new int[] {PackageManager.PERMISSION_GRANTED, PackageManager.PERMISSION_DENIED}); + verify(callback).onResult("AudioAccessDenied", "Audio access permission was denied."); } @Test public void callback_doesNotRespond() { - ResultCallback callback = mock (ResultCallback.class); + ResultCallback callback = mock(ResultCallback.class); CameraRequestPermissionsListener permissionsListener = new CameraRequestPermissionsListener(callback); permissionsListener.onRequestPermissionsResult( - 9796, null, new int[] {PackageManager.GRANTED, PackageManager.GRANTED}); - - verify(callback, never()).onResult("CameraAccessDenied", "Camera access permission was denied."); + 9796, + null, + new int[] {PackageManager.PERMISSION_GRANTED, PackageManager.PERMISSION_GRANTED}); + + verify(callback, never()) + .onResult("CameraAccessDenied", "Camera access permission was denied."); verify(callback, never()).onResult("AudioAccessDenied", "Audio access permission was denied."); } } From 17d37f39a5161b174a79128a06c6403013ef8bcb Mon Sep 17 00:00:00 2001 From: camsim99 Date: Thu, 5 May 2022 11:05:34 -0700 Subject: [PATCH 04/26] Update CHANGELOG --- packages/camera/camera/CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/camera/camera/CHANGELOG.md b/packages/camera/camera/CHANGELOG.md index 4d7e9bbeb218..e026451f5f4e 100644 --- a/packages/camera/camera/CHANGELOG.md +++ b/packages/camera/camera/CHANGELOG.md @@ -1,6 +1,7 @@ -## NEXT +## 0.9.4+22 * Removes unnecessary imports. +* Updates camera access permission error codes to be consistent with other platforms. ## 0.9.4+21 From 300a67442d6967cf9cd4f2cfe1ba00e8422adfa1 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Thu, 5 May 2022 11:13:26 -0700 Subject: [PATCH 05/26] Update pubspec --- packages/camera/camera/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/camera/camera/pubspec.yaml b/packages/camera/camera/pubspec.yaml index f62777044617..fde6663844c2 100644 --- a/packages/camera/camera/pubspec.yaml +++ b/packages/camera/camera/pubspec.yaml @@ -4,7 +4,7 @@ description: A Flutter plugin for controlling the camera. Supports previewing Dart. repository: https://github.com/flutter/plugins/tree/main/packages/camera/camera issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.9.4+21 +version: 0.9.4+22 environment: sdk: ">=2.14.0 <3.0.0" From 0bdb42da2c8b057d7a190400cf6745fff50bc33e Mon Sep 17 00:00:00 2001 From: camsim99 Date: Mon, 9 May 2022 11:40:56 -0700 Subject: [PATCH 06/26] Add back ongoing error --- .../java/io/flutter/plugins/camera/CameraPermissions.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraPermissions.java b/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraPermissions.java index 7ef3f4c10bfb..b9b62a582ae2 100644 --- a/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraPermissions.java +++ b/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraPermissions.java @@ -24,18 +24,25 @@ interface ResultCallback { } private static final int CAMERA_REQUEST_ID = 9796; + private boolean ongoing = false; void requestPermissions( Activity activity, PermissionsRegistry permissionsRegistry, boolean enableAudio, ResultCallback callback) { + if (ongoing) { + callback.onResult("cameraPermissionOngoing", "Camera permission request ongoing."); + return; + } if (!hasCameraPermission(activity) || (enableAudio && !hasAudioPermission(activity))) { permissionsRegistry.addListener( new CameraRequestPermissionsListener( (String errorCode, String errorDescription) -> { + ongoing = false; callback.onResult(errorCode, errorDescription); })); + ongoing = true; ActivityCompat.requestPermissions( activity, enableAudio From 34bb410649af2ee6a4cafe2c0f502ef7d7543bf3 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Mon, 9 May 2022 12:51:19 -0700 Subject: [PATCH 07/26] Add ongoing test --- .../plugins/camera/CameraPermissions.java | 2 +- .../plugins/camera/CameraPermissionsTest.java | 39 ++++++++++++++----- 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraPermissions.java b/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraPermissions.java index b9b62a582ae2..f01414b74246 100644 --- a/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraPermissions.java +++ b/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraPermissions.java @@ -24,7 +24,7 @@ interface ResultCallback { } private static final int CAMERA_REQUEST_ID = 9796; - private boolean ongoing = false; + @VisibleForTesting boolean ongoing = false; void requestPermissions( Activity activity, diff --git a/packages/camera/camera/android/src/test/java/io/flutter/plugins/camera/CameraPermissionsTest.java b/packages/camera/camera/android/src/test/java/io/flutter/plugins/camera/CameraPermissionsTest.java index e4314c7d7a11..8fdc0ff5bb5c 100644 --- a/packages/camera/camera/android/src/test/java/io/flutter/plugins/camera/CameraPermissionsTest.java +++ b/packages/camera/camera/android/src/test/java/io/flutter/plugins/camera/CameraPermissionsTest.java @@ -9,12 +9,29 @@ import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; +import android.app.Activity; import android.content.pm.PackageManager; import io.flutter.plugins.camera.CameraPermissions.CameraRequestPermissionsListener; +import io.flutter.plugins.camera.CameraPermissions.PermissionsRegistry; import io.flutter.plugins.camera.CameraPermissions.ResultCallback; import org.junit.Test; public class CameraPermissionsTest { + @Test + public void requestPermissions_errorsWhenRequestOngoing() { + CameraPermissions cameraPermissions = new CameraPermissions(); + Activity fakeActivity = mock(Activity.class); + PermissionsRegistry fakePermissionsRegistry = mock(PermissionsRegistry.class); + ResultCallback fakeResultCallback = mock(ResultCallback.class); + + cameraPermissions.ongoing = true; + cameraPermissions.requestPermissions( + fakeActivity, fakePermissionsRegistry, true, fakeResultCallback); + + verify(fakeResultCallback) + .onResult("cameraPermissionOngoing", "Camera permission request ongoing."); + } + @Test public void listener_respondsOnce() { final int[] calledCounter = {0}; @@ -31,43 +48,45 @@ public void listener_respondsOnce() { @Test public void callback_respondsWithCameraAccessDenied() { - ResultCallback callback = mock(ResultCallback.class); + ResultCallback fakeResultCallback = mock(ResultCallback.class); CameraRequestPermissionsListener permissionsListener = - new CameraRequestPermissionsListener(callback); + new CameraRequestPermissionsListener(fakeResultCallback); permissionsListener.onRequestPermissionsResult( 9796, null, new int[] {PackageManager.PERMISSION_DENIED}); - verify(callback).onResult("CameraAccessDenied", "Camera access permission was denied."); + verify(fakeResultCallback) + .onResult("CameraAccessDenied", "Camera access permission was denied."); } @Test public void callback_respondsWithAudioAccessDenied() { - ResultCallback callback = mock(ResultCallback.class); + ResultCallback fakeResultCallback = mock(ResultCallback.class); CameraRequestPermissionsListener permissionsListener = - new CameraRequestPermissionsListener(callback); + new CameraRequestPermissionsListener(fakeResultCallback); permissionsListener.onRequestPermissionsResult( 9796, null, new int[] {PackageManager.PERMISSION_GRANTED, PackageManager.PERMISSION_DENIED}); - verify(callback).onResult("AudioAccessDenied", "Audio access permission was denied."); + verify(fakeResultCallback).onResult("AudioAccessDenied", "Audio access permission was denied."); } @Test public void callback_doesNotRespond() { - ResultCallback callback = mock(ResultCallback.class); + ResultCallback fakeResultCallback = mock(ResultCallback.class); CameraRequestPermissionsListener permissionsListener = - new CameraRequestPermissionsListener(callback); + new CameraRequestPermissionsListener(fakeResultCallback); permissionsListener.onRequestPermissionsResult( 9796, null, new int[] {PackageManager.PERMISSION_GRANTED, PackageManager.PERMISSION_GRANTED}); - verify(callback, never()) + verify(fakeResultCallback, never()) .onResult("CameraAccessDenied", "Camera access permission was denied."); - verify(callback, never()).onResult("AudioAccessDenied", "Audio access permission was denied."); + verify(fakeResultCallback, never()) + .onResult("AudioAccessDenied", "Audio access permission was denied."); } } From e995edbfb3276f03102fe1ba178db5cdccc79837 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Mon, 9 May 2022 13:37:42 -0700 Subject: [PATCH 08/26] Change error msg --- .../main/java/io/flutter/plugins/camera/CameraPermissions.java | 2 +- .../java/io/flutter/plugins/camera/CameraPermissionsTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraPermissions.java b/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraPermissions.java index f01414b74246..69c5371434a5 100644 --- a/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraPermissions.java +++ b/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraPermissions.java @@ -32,7 +32,7 @@ void requestPermissions( boolean enableAudio, ResultCallback callback) { if (ongoing) { - callback.onResult("cameraPermissionOngoing", "Camera permission request ongoing."); + callback.onResult("cameraPermissionRequest", "Camera permission request ongoing."); return; } if (!hasCameraPermission(activity) || (enableAudio && !hasAudioPermission(activity))) { diff --git a/packages/camera/camera/android/src/test/java/io/flutter/plugins/camera/CameraPermissionsTest.java b/packages/camera/camera/android/src/test/java/io/flutter/plugins/camera/CameraPermissionsTest.java index 8fdc0ff5bb5c..f9f087cfbce1 100644 --- a/packages/camera/camera/android/src/test/java/io/flutter/plugins/camera/CameraPermissionsTest.java +++ b/packages/camera/camera/android/src/test/java/io/flutter/plugins/camera/CameraPermissionsTest.java @@ -29,7 +29,7 @@ public void requestPermissions_errorsWhenRequestOngoing() { fakeActivity, fakePermissionsRegistry, true, fakeResultCallback); verify(fakeResultCallback) - .onResult("cameraPermissionOngoing", "Camera permission request ongoing."); + .onResult("cameraPermissionRequest", "Camera permission request ongoing."); } @Test From 901d1150c248b65f65813522f39fdff3bc6d9032 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 10 May 2022 11:15:59 -0700 Subject: [PATCH 09/26] Remove error and related test --- packages/camera/camera/CHANGELOG.md | 5 ++++- .../plugins/camera/CameraPermissions.java | 3 ++- .../plugins/camera/CameraPermissionsTest.java | 17 ----------------- packages/camera/camera/pubspec.yaml | 2 +- 4 files changed, 7 insertions(+), 20 deletions(-) diff --git a/packages/camera/camera/CHANGELOG.md b/packages/camera/camera/CHANGELOG.md index b43026c7b716..3f0159cab1ab 100644 --- a/packages/camera/camera/CHANGELOG.md +++ b/packages/camera/camera/CHANGELOG.md @@ -1,9 +1,12 @@ +## 0.9.4+23 + +* Updates camera access permission error codes to be consistent with other platforms. + ## 0.9.4+22 * Removes unnecessary imports. * Fixes library_private_types_in_public_api, sort_child_properties_last and use_key_in_widget_constructors lint warnings. -* Updates camera access permission error codes to be consistent with other platforms. ## 0.9.4+21 diff --git a/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraPermissions.java b/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraPermissions.java index 69c5371434a5..e2b3a800a297 100644 --- a/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraPermissions.java +++ b/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraPermissions.java @@ -23,6 +23,7 @@ interface ResultCallback { void onResult(String errorCode, String errorDescription); } + private static final String TAG = "CameraPermissions"; private static final int CAMERA_REQUEST_ID = 9796; @VisibleForTesting boolean ongoing = false; @@ -32,7 +33,7 @@ void requestPermissions( boolean enableAudio, ResultCallback callback) { if (ongoing) { - callback.onResult("cameraPermissionRequest", "Camera permission request ongoing."); + Log.e(TAG, "Another request is ongoing and multiple requests cannot be handled at once."); return; } if (!hasCameraPermission(activity) || (enableAudio && !hasAudioPermission(activity))) { diff --git a/packages/camera/camera/android/src/test/java/io/flutter/plugins/camera/CameraPermissionsTest.java b/packages/camera/camera/android/src/test/java/io/flutter/plugins/camera/CameraPermissionsTest.java index f9f087cfbce1..d734a63b15ca 100644 --- a/packages/camera/camera/android/src/test/java/io/flutter/plugins/camera/CameraPermissionsTest.java +++ b/packages/camera/camera/android/src/test/java/io/flutter/plugins/camera/CameraPermissionsTest.java @@ -9,29 +9,12 @@ import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; -import android.app.Activity; import android.content.pm.PackageManager; import io.flutter.plugins.camera.CameraPermissions.CameraRequestPermissionsListener; -import io.flutter.plugins.camera.CameraPermissions.PermissionsRegistry; import io.flutter.plugins.camera.CameraPermissions.ResultCallback; import org.junit.Test; public class CameraPermissionsTest { - @Test - public void requestPermissions_errorsWhenRequestOngoing() { - CameraPermissions cameraPermissions = new CameraPermissions(); - Activity fakeActivity = mock(Activity.class); - PermissionsRegistry fakePermissionsRegistry = mock(PermissionsRegistry.class); - ResultCallback fakeResultCallback = mock(ResultCallback.class); - - cameraPermissions.ongoing = true; - cameraPermissions.requestPermissions( - fakeActivity, fakePermissionsRegistry, true, fakeResultCallback); - - verify(fakeResultCallback) - .onResult("cameraPermissionRequest", "Camera permission request ongoing."); - } - @Test public void listener_respondsOnce() { final int[] calledCounter = {0}; diff --git a/packages/camera/camera/pubspec.yaml b/packages/camera/camera/pubspec.yaml index fde6663844c2..9d56f1b6e4da 100644 --- a/packages/camera/camera/pubspec.yaml +++ b/packages/camera/camera/pubspec.yaml @@ -4,7 +4,7 @@ description: A Flutter plugin for controlling the camera. Supports previewing Dart. repository: https://github.com/flutter/plugins/tree/main/packages/camera/camera issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.9.4+22 +version: 0.9.4+23 environment: sdk: ">=2.14.0 <3.0.0" From a04b0505c1c28e7766697886986743d27e9134b5 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 10 May 2022 11:55:14 -0700 Subject: [PATCH 10/26] Add missing import --- .../main/java/io/flutter/plugins/camera/CameraPermissions.java | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraPermissions.java b/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraPermissions.java index e2b3a800a297..0473668f838c 100644 --- a/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraPermissions.java +++ b/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraPermissions.java @@ -8,6 +8,7 @@ import android.Manifest.permission; import android.app.Activity; import android.content.pm.PackageManager; +import android.util.Log; import androidx.annotation.VisibleForTesting; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; From 985e65314979c30390f7d7897ad1019bee3d1bf9 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 10 May 2022 13:39:01 -0700 Subject: [PATCH 11/26] Bump version --- packages/camera/camera/CHANGELOG.md | 4 ++-- packages/camera/camera/pubspec.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/camera/camera/CHANGELOG.md b/packages/camera/camera/CHANGELOG.md index 3f0159cab1ab..4f62f5113cf5 100644 --- a/packages/camera/camera/CHANGELOG.md +++ b/packages/camera/camera/CHANGELOG.md @@ -1,6 +1,6 @@ -## 0.9.4+23 +## 0.10.0 -* Updates camera access permission error codes to be consistent with other platforms. +* Updates Android camera access permission error codes to be consistent with other platforms. ## 0.9.4+22 diff --git a/packages/camera/camera/pubspec.yaml b/packages/camera/camera/pubspec.yaml index 9d56f1b6e4da..a1c4765f0822 100644 --- a/packages/camera/camera/pubspec.yaml +++ b/packages/camera/camera/pubspec.yaml @@ -4,7 +4,7 @@ description: A Flutter plugin for controlling the camera. Supports previewing Dart. repository: https://github.com/flutter/plugins/tree/main/packages/camera/camera issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.9.4+23 +version: 0.10.0 environment: sdk: ">=2.14.0 <3.0.0" From 2d74e0757c8006c4bfac92195889e047e6742000 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 17 May 2022 14:14:23 -0700 Subject: [PATCH 12/26] Make fixes --- .../plugins/camera/CameraPermissions.java | 23 +++++++++++++++---- .../method_channel/method_channel_camera.dart | 9 ++++++++ 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraPermissions.java b/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraPermissions.java index 0473668f838c..4441751e19cf 100644 --- a/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraPermissions.java +++ b/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraPermissions.java @@ -8,7 +8,6 @@ import android.Manifest.permission; import android.app.Activity; import android.content.pm.PackageManager; -import android.util.Log; import androidx.annotation.VisibleForTesting; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; @@ -24,7 +23,20 @@ interface ResultCallback { void onResult(String errorCode, String errorDescription); } - private static final String TAG = "CameraPermissions"; + /** + * Camera access permission errors handled when camera is created. See {@code MethodChannelCamera} + * in {@code camera/camera_platform_interface} for details. + */ + private static final String CAMERA_PERMISSIONS_REQUEST_ONGOING = + "CameraPermissionsRequestOngoing"; + + private static final String CAMERA_PERMISSIONS_REQUEST_ONGOING_MESSAGE = + "Another request is ongoing and multiple requests cannot be handled at once."; + private static final String CAMERA_ACCESS_DENIED = "CameraAccessDenied"; + private static final String CAMERA_ACCESS_DENIED_MESSAGE = "Camera access permission was denied."; + private static final String AUDIO_ACCESS_DENIED = "AudioAccessDenied"; + private static final String AUDIO_ACCESS_DENIED_MESSAGE = "Audio access permission was denied."; + private static final int CAMERA_REQUEST_ID = 9796; @VisibleForTesting boolean ongoing = false; @@ -34,7 +46,8 @@ void requestPermissions( boolean enableAudio, ResultCallback callback) { if (ongoing) { - Log.e(TAG, "Another request is ongoing and multiple requests cannot be handled at once."); + callback.onResult( + CAMERA_PERMISSIONS_REQUEST_ONGOING, CAMERA_PERMISSIONS_REQUEST_ONGOING_MESSAGE); return; } if (!hasCameraPermission(activity) || (enableAudio && !hasAudioPermission(activity))) { @@ -93,9 +106,9 @@ public boolean onRequestPermissionsResult(int id, String[] permissions, int[] gr alreadyCalled = true; if (grantResults[0] != PackageManager.PERMISSION_GRANTED) { - callback.onResult("CameraAccessDenied", "Camera access permission was denied."); + callback.onResult(CAMERA_ACCESS_DENIED, CAMERA_ACCESS_DENIED_MESSAGE); } else if (grantResults.length > 1 && grantResults[1] != PackageManager.PERMISSION_GRANTED) { - callback.onResult("AudioAccessDenied", "Audio access permission was denied."); + callback.onResult(AUDIO_ACCESS_DENIED, AUDIO_ACCESS_DENIED_MESSAGE); } else { callback.onResult(null, null); } diff --git a/packages/camera/camera_platform_interface/lib/src/method_channel/method_channel_camera.dart b/packages/camera/camera_platform_interface/lib/src/method_channel/method_channel_camera.dart index c856f3467821..53076c2abdd8 100644 --- a/packages/camera/camera_platform_interface/lib/src/method_channel/method_channel_camera.dart +++ b/packages/camera/camera_platform_interface/lib/src/method_channel/method_channel_camera.dart @@ -26,6 +26,12 @@ class MethodChannelCamera extends CameraPlatform { final Map _channels = {}; + /// Error code used to detect multiple requests for camera permissions on Android. + /// + /// See [CameraPermissions] in [camera/camera] for details. + static final String cameraPermissionsRequestOngoingErrorCode = + "CameraPermissionsRequestOngoing"; + /// The controller we need to broadcast the different events coming /// from handleMethodCall, specific to camera events. /// @@ -93,6 +99,9 @@ class MethodChannelCamera extends CameraPlatform { return reply!['cameraId']! as int; } on PlatformException catch (e) { + if (e.code == cameraPermissionsRequestOngoingErrorCode) { + throw StateError(e.message!); + } throw CameraException(e.code, e.message); } } From 7b40254d3b27f966c98d0c9b32cb9a215757b620 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 31 May 2022 15:00:53 -0700 Subject: [PATCH 13/26] Make breaking changes --- packages/camera/camera/CHANGELOG.md | 3 ++- packages/camera/camera/README.md | 2 +- packages/camera/camera/example/lib/main.dart | 7 ++++--- packages/camera/camera/pubspec.yaml | 2 +- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/camera/camera/CHANGELOG.md b/packages/camera/camera/CHANGELOG.md index 3efbe3f43f11..0453f705b874 100644 --- a/packages/camera/camera/CHANGELOG.md +++ b/packages/camera/camera/CHANGELOG.md @@ -1,6 +1,7 @@ ## 0.10.0 -* Updates Android camera access permission error codes to be consistent with other platforms. +* **Breaking Change** Bumps default camera_web package version to 0.3.0. +* **Breaking Change** Updates Android camera access permission error codes to be consistent with other platforms. ## 0.9.7+1 diff --git a/packages/camera/camera/README.md b/packages/camera/camera/README.md index ec9d7379c60b..b6f496e42b45 100644 --- a/packages/camera/camera/README.md +++ b/packages/camera/camera/README.md @@ -98,7 +98,7 @@ Here is a list of all permission error codes that can be thrown: - `AudioAccessRestricted`: iOS only for now. Thrown when audio access is restricted and users cannot grant permission (parental control). -- `cameraPermission`: Android and Web only. A legacy error code for all kinds of camera permission errors. +- `CameraPermissionsRequestOngoing`: Android only. Thrown when user requests camera permissions while another request is still being processed. ### Example diff --git a/packages/camera/camera/example/lib/main.dart b/packages/camera/camera/example/lib/main.dart index c0181a5d36a1..0bcfe8fde3ec 100644 --- a/packages/camera/camera/example/lib/main.dart +++ b/packages/camera/camera/example/lib/main.dart @@ -708,9 +708,10 @@ class _CameraExampleHomeState extends State // iOS only showInSnackBar('Audio access is restricted.'); break; - case 'cameraPermission': - // Android & web only - showInSnackBar('Unknown permission error.'); + case 'CameraPermissionsRequestOngoing': + // Android only + showInSnackBar( + 'Another request is ongoing and multiple requests cannot be handled at once.'); break; default: _showCameraException(e); diff --git a/packages/camera/camera/pubspec.yaml b/packages/camera/camera/pubspec.yaml index f183425e1a28..2803c9999d84 100644 --- a/packages/camera/camera/pubspec.yaml +++ b/packages/camera/camera/pubspec.yaml @@ -23,7 +23,7 @@ flutter: dependencies: camera_platform_interface: ^2.2.0 - camera_web: ^0.2.1 + camera_web: ^0.3.0 flutter: sdk: flutter flutter_plugin_android_lifecycle: ^2.0.2 From 33561f2806f98a691f5a0637a31d5ac2312abf71 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 31 May 2022 15:17:54 -0700 Subject: [PATCH 14/26] Make analyzer fixes --- .../lib/src/method_channel/method_channel_camera.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/camera/camera_platform_interface/lib/src/method_channel/method_channel_camera.dart b/packages/camera/camera_platform_interface/lib/src/method_channel/method_channel_camera.dart index 0c0e022ef67a..443b61200fc4 100644 --- a/packages/camera/camera_platform_interface/lib/src/method_channel/method_channel_camera.dart +++ b/packages/camera/camera_platform_interface/lib/src/method_channel/method_channel_camera.dart @@ -31,8 +31,8 @@ class MethodChannelCamera extends CameraPlatform { /// Error code used to detect multiple requests for camera permissions on Android. /// /// See [CameraPermissions] in [camera/camera] for details. - static final String cameraPermissionsRequestOngoingErrorCode = - "CameraPermissionsRequestOngoing"; + static const String cameraPermissionsRequestOngoingErrorCode = + 'CameraPermissionsRequestOngoing'; /// The controller we need to broadcast the different events coming /// from handleMethodCall, specific to camera events. From a154e1af05e30ef0f73a6b14b85d79bad2e530cd Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 31 May 2022 15:56:15 -0700 Subject: [PATCH 15/26] Remove error --- packages/camera/camera/README.md | 2 -- packages/camera/camera/example/lib/main.dart | 5 ----- 2 files changed, 7 deletions(-) diff --git a/packages/camera/camera/README.md b/packages/camera/camera/README.md index b6f496e42b45..3389bc5a5139 100644 --- a/packages/camera/camera/README.md +++ b/packages/camera/camera/README.md @@ -98,8 +98,6 @@ Here is a list of all permission error codes that can be thrown: - `AudioAccessRestricted`: iOS only for now. Thrown when audio access is restricted and users cannot grant permission (parental control). -- `CameraPermissionsRequestOngoing`: Android only. Thrown when user requests camera permissions while another request is still being processed. - ### Example Here is a small example flutter app displaying a full screen camera preview. diff --git a/packages/camera/camera/example/lib/main.dart b/packages/camera/camera/example/lib/main.dart index 0bcfe8fde3ec..12bfc58b1c4c 100644 --- a/packages/camera/camera/example/lib/main.dart +++ b/packages/camera/camera/example/lib/main.dart @@ -708,11 +708,6 @@ class _CameraExampleHomeState extends State // iOS only showInSnackBar('Audio access is restricted.'); break; - case 'CameraPermissionsRequestOngoing': - // Android only - showInSnackBar( - 'Another request is ongoing and multiple requests cannot be handled at once.'); - break; default: _showCameraException(e); break; From bfb8737a22a52f1b57697b87ca0b1609e1f37283 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 31 May 2022 15:59:33 -0700 Subject: [PATCH 16/26] Bump platform interface version --- packages/camera/camera_platform_interface/CHANGELOG.md | 4 ++++ packages/camera/camera_platform_interface/pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/camera/camera_platform_interface/CHANGELOG.md b/packages/camera/camera_platform_interface/CHANGELOG.md index 5ecd8891fe20..87dcc7f20eb5 100644 --- a/packages/camera/camera_platform_interface/CHANGELOG.md +++ b/packages/camera/camera_platform_interface/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.2.1 + +* Adds handling for Android only `CameraPermissionsRequestOngoing` error. + ## 2.2.0 * Adds image streaming to the platform interface. diff --git a/packages/camera/camera_platform_interface/pubspec.yaml b/packages/camera/camera_platform_interface/pubspec.yaml index 473dcb552c82..fb33b088e40f 100644 --- a/packages/camera/camera_platform_interface/pubspec.yaml +++ b/packages/camera/camera_platform_interface/pubspec.yaml @@ -4,7 +4,7 @@ repository: https://github.com/flutter/plugins/tree/main/packages/camera/camera_ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 2.2.0 +version: 2.2.1 environment: sdk: '>=2.12.0 <3.0.0' From 7bf7a14ab553d620c2ffc51d02cbe4ae0fb63c99 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 31 May 2022 16:02:47 -0700 Subject: [PATCH 17/26] Bump platform interface version in other pubspec --- packages/camera/camera/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/camera/camera/pubspec.yaml b/packages/camera/camera/pubspec.yaml index 2803c9999d84..81a5640291df 100644 --- a/packages/camera/camera/pubspec.yaml +++ b/packages/camera/camera/pubspec.yaml @@ -22,7 +22,7 @@ flutter: default_package: camera_web dependencies: - camera_platform_interface: ^2.2.0 + camera_platform_interface: ^2.2.1 camera_web: ^0.3.0 flutter: sdk: flutter From 22ad172391d750fff0515a2215b12d9e5a1a6290 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 31 May 2022 16:08:11 -0700 Subject: [PATCH 18/26] Revert "Bump platform interface version in other pubspec" This reverts commit 7bf7a14ab553d620c2ffc51d02cbe4ae0fb63c99. --- packages/camera/camera/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/camera/camera/pubspec.yaml b/packages/camera/camera/pubspec.yaml index 81a5640291df..2803c9999d84 100644 --- a/packages/camera/camera/pubspec.yaml +++ b/packages/camera/camera/pubspec.yaml @@ -22,7 +22,7 @@ flutter: default_package: camera_web dependencies: - camera_platform_interface: ^2.2.1 + camera_platform_interface: ^2.2.0 camera_web: ^0.3.0 flutter: sdk: flutter From 11c69bbd3224b2b993b71120efeca695a897f4bd Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 31 May 2022 16:08:27 -0700 Subject: [PATCH 19/26] Revert "Bump platform interface version" This reverts commit bfb8737a22a52f1b57697b87ca0b1609e1f37283. --- packages/camera/camera_platform_interface/CHANGELOG.md | 4 ---- packages/camera/camera_platform_interface/pubspec.yaml | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/camera/camera_platform_interface/CHANGELOG.md b/packages/camera/camera_platform_interface/CHANGELOG.md index 87dcc7f20eb5..5ecd8891fe20 100644 --- a/packages/camera/camera_platform_interface/CHANGELOG.md +++ b/packages/camera/camera_platform_interface/CHANGELOG.md @@ -1,7 +1,3 @@ -## 2.2.1 - -* Adds handling for Android only `CameraPermissionsRequestOngoing` error. - ## 2.2.0 * Adds image streaming to the platform interface. diff --git a/packages/camera/camera_platform_interface/pubspec.yaml b/packages/camera/camera_platform_interface/pubspec.yaml index fb33b088e40f..473dcb552c82 100644 --- a/packages/camera/camera_platform_interface/pubspec.yaml +++ b/packages/camera/camera_platform_interface/pubspec.yaml @@ -4,7 +4,7 @@ repository: https://github.com/flutter/plugins/tree/main/packages/camera/camera_ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 2.2.1 +version: 2.2.0 environment: sdk: '>=2.12.0 <3.0.0' From f06cae405cfdc80d5d6bf3b8a4bfa40b74a4f354 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 31 May 2022 16:09:51 -0700 Subject: [PATCH 20/26] Revert changes to platform interface --- .../method_channel/method_channel_camera.dart | 63 ------------------- 1 file changed, 63 deletions(-) diff --git a/packages/camera/camera_platform_interface/lib/src/method_channel/method_channel_camera.dart b/packages/camera/camera_platform_interface/lib/src/method_channel/method_channel_camera.dart index 443b61200fc4..c856f3467821 100644 --- a/packages/camera/camera_platform_interface/lib/src/method_channel/method_channel_camera.dart +++ b/packages/camera/camera_platform_interface/lib/src/method_channel/method_channel_camera.dart @@ -12,8 +12,6 @@ import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart'; import 'package:stream_transform/stream_transform.dart'; -import 'type_conversion.dart'; - const MethodChannel _channel = MethodChannel('plugins.flutter.io/camera'); /// An implementation of [CameraPlatform] that uses method channels. @@ -28,12 +26,6 @@ class MethodChannelCamera extends CameraPlatform { final Map _channels = {}; - /// Error code used to detect multiple requests for camera permissions on Android. - /// - /// See [CameraPermissions] in [camera/camera] for details. - static const String cameraPermissionsRequestOngoingErrorCode = - 'CameraPermissionsRequestOngoing'; - /// The controller we need to broadcast the different events coming /// from handleMethodCall, specific to camera events. /// @@ -56,12 +48,6 @@ class MethodChannelCamera extends CameraPlatform { final StreamController deviceEventStreamController = StreamController.broadcast(); - // The stream to receive frames from the native code. - StreamSubscription? _platformImageStreamSubscription; - - // The stream for vending frames to platform interface clients. - StreamController? _frameStreamController; - Stream _cameraEvents(int cameraId) => cameraEventStreamController.stream .where((CameraEvent event) => event.cameraId == cameraId); @@ -107,9 +93,6 @@ class MethodChannelCamera extends CameraPlatform { return reply!['cameraId']! as int; } on PlatformException catch (e) { - if (e.code == cameraPermissionsRequestOngoingErrorCode) { - throw StateError(e.message!); - } throw CameraException(e.code, e.message); } } @@ -284,52 +267,6 @@ class MethodChannelCamera extends CameraPlatform { {'cameraId': cameraId}, ); - @override - Stream onStreamedFrameAvailable(int cameraId, - {CameraImageStreamOptions? options}) { - _frameStreamController = StreamController( - onListen: _onFrameStreamListen, - onPause: _onFrameStreamPauseResume, - onResume: _onFrameStreamPauseResume, - onCancel: _onFrameStreamCancel, - ); - return _frameStreamController!.stream; - } - - void _onFrameStreamListen() { - _startPlatformStream(); - } - - Future _startPlatformStream() async { - await _channel.invokeMethod('startImageStream'); - const EventChannel cameraEventChannel = - EventChannel('plugins.flutter.io/camera/imageStream'); - _platformImageStreamSubscription = - cameraEventChannel.receiveBroadcastStream().listen((dynamic imageData) { - if (defaultTargetPlatform == TargetPlatform.iOS) { - try { - _channel.invokeMethod('receivedImageStreamData'); - } on PlatformException catch (e) { - throw CameraException(e.code, e.message); - } - } - _frameStreamController! - .add(cameraImageFromPlatformData(imageData as Map)); - }); - } - - FutureOr _onFrameStreamCancel() async { - await _channel.invokeMethod('stopImageStream'); - await _platformImageStreamSubscription?.cancel(); - _platformImageStreamSubscription = null; - _frameStreamController = null; - } - - void _onFrameStreamPauseResume() { - throw CameraException('InvalidCall', - 'Pause and resume are not supported for onStreamedFrameAvailable'); - } - @override Future setFlashMode(int cameraId, FlashMode mode) => _channel.invokeMethod( From 5578901d4208118257ea98fe0e221698e561fd4a Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 31 May 2022 16:13:28 -0700 Subject: [PATCH 21/26] Undo git error --- .../method_channel/method_channel_camera.dart | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/packages/camera/camera_platform_interface/lib/src/method_channel/method_channel_camera.dart b/packages/camera/camera_platform_interface/lib/src/method_channel/method_channel_camera.dart index c856f3467821..babef144b086 100644 --- a/packages/camera/camera_platform_interface/lib/src/method_channel/method_channel_camera.dart +++ b/packages/camera/camera_platform_interface/lib/src/method_channel/method_channel_camera.dart @@ -12,6 +12,8 @@ import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart'; import 'package:stream_transform/stream_transform.dart'; +import 'type_conversion.dart'; + const MethodChannel _channel = MethodChannel('plugins.flutter.io/camera'); /// An implementation of [CameraPlatform] that uses method channels. @@ -48,6 +50,12 @@ class MethodChannelCamera extends CameraPlatform { final StreamController deviceEventStreamController = StreamController.broadcast(); + // The stream to receive frames from the native code. + StreamSubscription? _platformImageStreamSubscription; + + // The stream for vending frames to platform interface clients. + StreamController? _frameStreamController; + Stream _cameraEvents(int cameraId) => cameraEventStreamController.stream .where((CameraEvent event) => event.cameraId == cameraId); @@ -267,6 +275,52 @@ class MethodChannelCamera extends CameraPlatform { {'cameraId': cameraId}, ); + @override + Stream onStreamedFrameAvailable(int cameraId, + {CameraImageStreamOptions? options}) { + _frameStreamController = StreamController( + onListen: _onFrameStreamListen, + onPause: _onFrameStreamPauseResume, + onResume: _onFrameStreamPauseResume, + onCancel: _onFrameStreamCancel, + ); + return _frameStreamController!.stream; + } + + void _onFrameStreamListen() { + _startPlatformStream(); + } + + Future _startPlatformStream() async { + await _channel.invokeMethod('startImageStream'); + const EventChannel cameraEventChannel = + EventChannel('plugins.flutter.io/camera/imageStream'); + _platformImageStreamSubscription = + cameraEventChannel.receiveBroadcastStream().listen((dynamic imageData) { + if (defaultTargetPlatform == TargetPlatform.iOS) { + try { + _channel.invokeMethod('receivedImageStreamData'); + } on PlatformException catch (e) { + throw CameraException(e.code, e.message); + } + } + _frameStreamController! + .add(cameraImageFromPlatformData(imageData as Map)); + }); + } + + FutureOr _onFrameStreamCancel() async { + await _channel.invokeMethod('stopImageStream'); + await _platformImageStreamSubscription?.cancel(); + _platformImageStreamSubscription = null; + _frameStreamController = null; + } + + void _onFrameStreamPauseResume() { + throw CameraException('InvalidCall', + 'Pause and resume are not supported for onStreamedFrameAvailable'); + } + @override Future setFlashMode(int cameraId, FlashMode mode) => _channel.invokeMethod( From 63a4e65a92ba01493dfba18a70f0bbf94384fc6b Mon Sep 17 00:00:00 2001 From: camsim99 Date: Fri, 3 Jun 2022 13:29:14 -0700 Subject: [PATCH 22/26] Update breaking change method in CHANGELOG --- packages/camera/camera/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/camera/camera/CHANGELOG.md b/packages/camera/camera/CHANGELOG.md index 0453f705b874..211b2f494228 100644 --- a/packages/camera/camera/CHANGELOG.md +++ b/packages/camera/camera/CHANGELOG.md @@ -1,6 +1,6 @@ ## 0.10.0 -* **Breaking Change** Bumps default camera_web package version to 0.3.0. +* **Breaking Change** Bumps default camera_web package version to 0.3.0 which renames permission exception code from `cameraPermission` to `CameraAccessDenied`. * **Breaking Change** Updates Android camera access permission error codes to be consistent with other platforms. ## 0.9.7+1 From f0782606bd328c464a13051e419aa723ce7fc978 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 8 Jun 2022 15:50:21 -0700 Subject: [PATCH 23/26] Update README --- packages/camera/camera/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/camera/camera/CHANGELOG.md b/packages/camera/camera/CHANGELOG.md index 211b2f494228..e48ceee4a9be 100644 --- a/packages/camera/camera/CHANGELOG.md +++ b/packages/camera/camera/CHANGELOG.md @@ -1,7 +1,7 @@ ## 0.10.0 * **Breaking Change** Bumps default camera_web package version to 0.3.0 which renames permission exception code from `cameraPermission` to `CameraAccessDenied`. -* **Breaking Change** Updates Android camera access permission error codes to be consistent with other platforms. +* **Breaking Change** Updates Android camera access permission error codes to be consistent with other platforms. If your app still handles the legacy `cameraPermission` exception, please update it to handle the new permission exception codes that are noted in the README. ## 0.9.7+1 From b432ee42bc9eaf34c0b7c8b638ddf9d2fc561cf9 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 22 Jun 2022 11:42:32 -0700 Subject: [PATCH 24/26] Bump versions --- packages/camera/camera/pubspec.yaml | 2 +- packages/camera/camera_android/pubspec.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/camera/camera/pubspec.yaml b/packages/camera/camera/pubspec.yaml index d2dd9eb1445a..c90ee40e71be 100644 --- a/packages/camera/camera/pubspec.yaml +++ b/packages/camera/camera/pubspec.yaml @@ -4,7 +4,7 @@ description: A Flutter plugin for controlling the camera. Supports previewing Dart. repository: https://github.com/flutter/plugins/tree/main/packages/camera/camera issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.10.0 +version: 0.11.0 environment: sdk: ">=2.14.0 <3.0.0" diff --git a/packages/camera/camera_android/pubspec.yaml b/packages/camera/camera_android/pubspec.yaml index 7d93ecb22e47..581780f0d87b 100644 --- a/packages/camera/camera_android/pubspec.yaml +++ b/packages/camera/camera_android/pubspec.yaml @@ -2,7 +2,7 @@ name: camera_android description: Android implementation of the camera plugin. repository: https://github.com/flutter/plugins/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.9.8+2 +version: 0.10.0 environment: sdk: ">=2.14.0 <3.0.0" From 5be9f8170573f982db66dbeb4c56733898930ec8 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 22 Jun 2022 12:51:47 -0700 Subject: [PATCH 25/26] Fix versioning --- packages/camera/camera/CHANGELOG.md | 5 +---- packages/camera/camera/pubspec.yaml | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/camera/camera/CHANGELOG.md b/packages/camera/camera/CHANGELOG.md index 971208dba0ea..3829ec5e3a66 100644 --- a/packages/camera/camera/CHANGELOG.md +++ b/packages/camera/camera/CHANGELOG.md @@ -1,9 +1,6 @@ -## 0.11.0 - -* **Breaking Change** Bumps default camera_web package version to 0.3.0 which renames permission exception code from `cameraPermission` to `CameraAccessDenied`. - ## 0.10.0 +* **Breaking Change** Bumps default camera_web package version to 0.3.0 which renames permission exception code from `cameraPermission` to `CameraAccessDenied`. * Ignores unnecessary import warnings in preparation for [upcoming Flutter changes](https://github.com/flutter/flutter/pull/106316). ## 0.9.8+1 diff --git a/packages/camera/camera/pubspec.yaml b/packages/camera/camera/pubspec.yaml index c90ee40e71be..d2dd9eb1445a 100644 --- a/packages/camera/camera/pubspec.yaml +++ b/packages/camera/camera/pubspec.yaml @@ -4,7 +4,7 @@ description: A Flutter plugin for controlling the camera. Supports previewing Dart. repository: https://github.com/flutter/plugins/tree/main/packages/camera/camera issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.11.0 +version: 0.10.0 environment: sdk: ">=2.14.0 <3.0.0" From 1e34820beda4c5f6efb8cb1c5de02ae4b4fe7f4a Mon Sep 17 00:00:00 2001 From: camsim99 Date: Thu, 7 Jul 2022 15:34:41 -0700 Subject: [PATCH 26/26] Undo changes to camera --- packages/camera/camera/CHANGELOG.md | 3 +-- packages/camera/camera/README.md | 2 ++ packages/camera/camera/example/lib/main.dart | 4 ++++ packages/camera/camera/pubspec.yaml | 4 ++-- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/camera/camera/CHANGELOG.md b/packages/camera/camera/CHANGELOG.md index 3829ec5e3a66..b9af4eb81e17 100644 --- a/packages/camera/camera/CHANGELOG.md +++ b/packages/camera/camera/CHANGELOG.md @@ -1,6 +1,5 @@ -## 0.10.0 +## NEXT -* **Breaking Change** Bumps default camera_web package version to 0.3.0 which renames permission exception code from `cameraPermission` to `CameraAccessDenied`. * Ignores unnecessary import warnings in preparation for [upcoming Flutter changes](https://github.com/flutter/flutter/pull/106316). ## 0.9.8+1 diff --git a/packages/camera/camera/README.md b/packages/camera/camera/README.md index 4d7c3d90791a..610b7175b533 100644 --- a/packages/camera/camera/README.md +++ b/packages/camera/camera/README.md @@ -98,6 +98,8 @@ Here is a list of all permission error codes that can be thrown: - `AudioAccessRestricted`: iOS only for now. Thrown when audio access is restricted and users cannot grant permission (parental control). +- `cameraPermission`: Android and Web only. A legacy error code for all kinds of camera permission errors. + ### Example Here is a small example flutter app displaying a full screen camera preview. diff --git a/packages/camera/camera/example/lib/main.dart b/packages/camera/camera/example/lib/main.dart index b90b0033563a..f8f28dd5d23f 100644 --- a/packages/camera/camera/example/lib/main.dart +++ b/packages/camera/camera/example/lib/main.dart @@ -716,6 +716,10 @@ class _CameraExampleHomeState extends State // iOS only showInSnackBar('Audio access is restricted.'); break; + case 'cameraPermission': + // Android & web only + showInSnackBar('Unknown permission error.'); + break; default: _showCameraException(e); break; diff --git a/packages/camera/camera/pubspec.yaml b/packages/camera/camera/pubspec.yaml index d2dd9eb1445a..a23405d083e3 100644 --- a/packages/camera/camera/pubspec.yaml +++ b/packages/camera/camera/pubspec.yaml @@ -4,7 +4,7 @@ description: A Flutter plugin for controlling the camera. Supports previewing Dart. repository: https://github.com/flutter/plugins/tree/main/packages/camera/camera issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.10.0 +version: 0.9.8+1 environment: sdk: ">=2.14.0 <3.0.0" @@ -24,7 +24,7 @@ dependencies: camera_android: ^0.9.7+1 camera_avfoundation: ^0.9.7+1 camera_platform_interface: ^2.2.0 - camera_web: ^0.3.0 + camera_web: ^0.2.1 flutter: sdk: flutter flutter_plugin_android_lifecycle: ^2.0.2