From 47b01514188904829c4392bcbb89178085a6a306 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 8 Jun 2022 16:00:23 -0700 Subject: [PATCH 1/4] Handle Android camera permissions error code --- .../lib/src/method_channel/method_channel_camera.dart | 8 ++++++++ 1 file changed, 8 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 babef144b086..e264a5df892b 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 @@ -28,6 +28,10 @@ class MethodChannelCamera extends CameraPlatform { final Map _channels = {}; + /// Error code used to detect multiple requests for camera permissions on Android. + static final String cameraPermissionsRequestOngoingErrorCode = + "CameraPermissionsRequestOngoing"; + /// The controller we need to broadcast the different events coming /// from handleMethodCall, specific to camera events. /// @@ -101,6 +105,10 @@ 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 6011cb8910493e3dae0faf6312aa1808e7c8825c Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 8 Jun 2022 16:06:56 -0700 Subject: [PATCH 2/4] Update CHANGELOG and bump 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..e42cb6878081 100644 --- a/packages/camera/camera_platform_interface/CHANGELOG.md +++ b/packages/camera/camera_platform_interface/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.2.1 + +* Handles Android camera permissions error code that indicates a request being made while another was in progress. + ## 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 d2856ba8722aaa934821c5cdf3610b52af24ec2e Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 28 Jun 2022 17:18:21 -0700 Subject: [PATCH 3/4] Fix analyze: --- .../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 e264a5df892b..80f517c94339 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 @@ -29,8 +29,8 @@ class MethodChannelCamera extends CameraPlatform { final Map _channels = {}; /// Error code used to detect multiple requests for camera permissions on Android. - 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 8131797458c9d649d5bcbc47d91d65bec342a25c Mon Sep 17 00:00:00 2001 From: camsim99 Date: Fri, 1 Jul 2022 11:51:38 -0700 Subject: [PATCH 4/4] Add test --- .../method_channel_camera_test.dart | 30 ++++++++----------- 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/packages/camera/camera_platform_interface/test/method_channel/method_channel_camera_test.dart b/packages/camera/camera_platform_interface/test/method_channel/method_channel_camera_test.dart index d096f0012c86..607103b0cdf8 100644 --- a/packages/camera/camera_platform_interface/test/method_channel/method_channel_camera_test.dart +++ b/packages/camera/camera_platform_interface/test/method_channel/method_channel_camera_test.dart @@ -56,14 +56,14 @@ void main() { }); test( - 'Should throw CameraException when create throws a PlatformException', + 'Should throw StateError when create is called while camera permissions request ongoing', () { // Arrange MethodChannelMock( channelName: 'plugins.flutter.io/camera', methods: { 'create': PlatformException( - code: 'TESTING_ERROR_CODE', + code: 'CameraPermissionsRequestOngoing', message: 'Mock error message used during testing.', ) }); @@ -71,22 +71,16 @@ void main() { // Act expect( - () => camera.createCamera( - const CameraDescription( - name: 'Test', - lensDirection: CameraLensDirection.back, - sensorOrientation: 0, - ), - ResolutionPreset.high, - ), - throwsA( - isA() - .having( - (CameraException e) => e.code, 'code', 'TESTING_ERROR_CODE') - .having((CameraException e) => e.description, 'description', - 'Mock error message used during testing.'), - ), - ); + () => camera.createCamera( + const CameraDescription( + name: 'Test', + lensDirection: CameraLensDirection.back, + sensorOrientation: 0, + ), + ResolutionPreset.high, + ), + throwsStateError, + reason: 'Mock error message used during testing.'); }); test(