From 5b77e4f0037f3e3d79c2fa98877b2553e0c396d9 Mon Sep 17 00:00:00 2001 From: John Date: Thu, 13 Jun 2019 16:23:00 -0400 Subject: [PATCH 1/6] return error in the event that permissions are not granted --- .../flutter/plugins/imagepicker/ImagePickerDelegate.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerDelegate.java b/packages/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerDelegate.java index 35c303fd5b99..2ffece1d5090 100644 --- a/packages/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerDelegate.java +++ b/packages/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerDelegate.java @@ -386,21 +386,29 @@ public boolean onRequestPermissionsResult( case REQUEST_EXTERNAL_IMAGE_STORAGE_PERMISSION: if (permissionGranted) { launchPickImageFromGalleryIntent(); + } else { + finishWithError("photo_access_denied", "The user did not allow photo access."); } break; case REQUEST_EXTERNAL_VIDEO_STORAGE_PERMISSION: if (permissionGranted) { launchPickVideoFromGalleryIntent(); + } else { + finishWithError("photo_access_denied", "The user did not allow photo access."); } break; case REQUEST_CAMERA_IMAGE_PERMISSION: if (permissionGranted) { launchTakeImageWithCameraIntent(); + } else { + finishWithError("camera_access_denied", "The user did not allow camera access."); } break; case REQUEST_CAMERA_VIDEO_PERMISSION: if (permissionGranted) { launchTakeVideoWithCameraIntent(); + } else { + finishWithError("camera_access_denied", "The user did not allow camera access."); } break; default: From ad98c9d4dca3d35c62211bed5f3c62a4804dcb00 Mon Sep 17 00:00:00 2001 From: John Date: Thu, 13 Jun 2019 16:46:27 -0400 Subject: [PATCH 2/6] increment version --- packages/image_picker/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/image_picker/pubspec.yaml b/packages/image_picker/pubspec.yaml index 9b75a8f3323f..6cddfa179afc 100755 --- a/packages/image_picker/pubspec.yaml +++ b/packages/image_picker/pubspec.yaml @@ -5,7 +5,7 @@ authors: - Flutter Team - Rhodes Davis Jr. homepage: https://github.com/flutter/plugins/tree/master/packages/image_picker -version: 0.6.0+9 +version: 0.6.0+10 flutter: plugin: From 9e0f7becd3018ff02dcca29f72fff27d383b07ea Mon Sep 17 00:00:00 2001 From: John Date: Thu, 13 Jun 2019 16:48:27 -0400 Subject: [PATCH 3/6] update CHANGELOG.md with description of changes --- packages/image_picker/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/image_picker/CHANGELOG.md b/packages/image_picker/CHANGELOG.md index 455ef52cdc2b..ddd24f81c0de 100644 --- a/packages/image_picker/CHANGELOG.md +++ b/packages/image_picker/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.6.0+10 + +* Android: Finish with error when user denies permissions + ## 0.6.0+9 * Add missing template type parameter to `invokeMethod` calls. From 4ba17e69a03deefcbfdc00149f18a9826b23fa7e Mon Sep 17 00:00:00 2001 From: John Date: Thu, 13 Jun 2019 18:25:59 -0400 Subject: [PATCH 4/6] update tests to reflect new expectations when permissions are denied --- .../plugins/imagepicker/ImagePickerDelegateTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/image_picker/example/android/app/src/test/java/io/flutter/plugins/imagepicker/ImagePickerDelegateTest.java b/packages/image_picker/example/android/app/src/test/java/io/flutter/plugins/imagepicker/ImagePickerDelegateTest.java index 3ca2a3765ece..02bb91b7914f 100644 --- a/packages/image_picker/example/android/app/src/test/java/io/flutter/plugins/imagepicker/ImagePickerDelegateTest.java +++ b/packages/image_picker/example/android/app/src/test/java/io/flutter/plugins/imagepicker/ImagePickerDelegateTest.java @@ -184,7 +184,7 @@ public void takeImageWithCamera_WhenCameraPermissionNotPresent_RequestsForPermis @Test public void - onRequestPermissionsResult_WhenReadExternalStoragePermissionDenied_FinishesWithNull() { + onRequestPermissionsResult_WhenReadExternalStoragePermissionDenied_FinishesWithError() { ImagePickerDelegate delegate = createDelegateWithPendingResultAndMethodCall(); delegate.onRequestPermissionsResult( @@ -192,7 +192,7 @@ public void takeImageWithCamera_WhenCameraPermissionNotPresent_RequestsForPermis new String[] {Manifest.permission.READ_EXTERNAL_STORAGE}, new int[] {PackageManager.PERMISSION_DENIED}); - verify(mockResult).success(null); + verify(mockResult).error("photo_access_denied", "The user did not allow photo access.", null); verifyNoMoreInteractions(mockResult); } @@ -227,7 +227,7 @@ public void takeImageWithCamera_WhenCameraPermissionNotPresent_RequestsForPermis } @Test - public void onRequestPermissionsResult_WhenCameraPermissionDenied_FinishesWithNull() { + public void onRequestPermissionsResult_WhenCameraPermissionDenied_FinishesWithError() { ImagePickerDelegate delegate = createDelegateWithPendingResultAndMethodCall(); delegate.onRequestPermissionsResult( @@ -235,7 +235,7 @@ public void onRequestPermissionsResult_WhenCameraPermissionDenied_FinishesWithNu new String[] {Manifest.permission.CAMERA}, new int[] {PackageManager.PERMISSION_DENIED}); - verify(mockResult).success(null); + verify(mockResult).error("camera_access_denied", "The user did not allow camera access.", null); verifyNoMoreInteractions(mockResult); } From a5211332c61bfda85bb664a548aa8795776fd12c Mon Sep 17 00:00:00 2001 From: John Date: Wed, 26 Jun 2019 11:07:58 -0400 Subject: [PATCH 5/6] Update version and changelog --- packages/image_picker/CHANGELOG.md | 4 ++++ packages/image_picker/pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/image_picker/CHANGELOG.md b/packages/image_picker/CHANGELOG.md index ae6739887809..8b692e46d64f 100644 --- a/packages/image_picker/CHANGELOG.md +++ b/packages/image_picker/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.6.0+11 + +* Android: throw exception when permissions denied + ## 0.6.0+10 * iOS: support picking GIF from gallery. diff --git a/packages/image_picker/pubspec.yaml b/packages/image_picker/pubspec.yaml index 6cddfa179afc..f97340972639 100755 --- a/packages/image_picker/pubspec.yaml +++ b/packages/image_picker/pubspec.yaml @@ -5,7 +5,7 @@ authors: - Flutter Team - Rhodes Davis Jr. homepage: https://github.com/flutter/plugins/tree/master/packages/image_picker -version: 0.6.0+10 +version: 0.6.0+11 flutter: plugin: From d622d7c14ab9d612e8ec07ae2bae1d84c0aa1c71 Mon Sep 17 00:00:00 2001 From: John Date: Mon, 8 Jul 2019 14:21:21 -0400 Subject: [PATCH 6/6] refactor based on PR comments --- .../imagepicker/ImagePickerDelegate.java | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/packages/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerDelegate.java b/packages/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerDelegate.java index 2ffece1d5090..2f2522f53c5c 100644 --- a/packages/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerDelegate.java +++ b/packages/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerDelegate.java @@ -386,29 +386,21 @@ public boolean onRequestPermissionsResult( case REQUEST_EXTERNAL_IMAGE_STORAGE_PERMISSION: if (permissionGranted) { launchPickImageFromGalleryIntent(); - } else { - finishWithError("photo_access_denied", "The user did not allow photo access."); } break; case REQUEST_EXTERNAL_VIDEO_STORAGE_PERMISSION: if (permissionGranted) { launchPickVideoFromGalleryIntent(); - } else { - finishWithError("photo_access_denied", "The user did not allow photo access."); } break; case REQUEST_CAMERA_IMAGE_PERMISSION: if (permissionGranted) { launchTakeImageWithCameraIntent(); - } else { - finishWithError("camera_access_denied", "The user did not allow camera access."); } break; case REQUEST_CAMERA_VIDEO_PERMISSION: if (permissionGranted) { launchTakeVideoWithCameraIntent(); - } else { - finishWithError("camera_access_denied", "The user did not allow camera access."); } break; default: @@ -416,7 +408,16 @@ public boolean onRequestPermissionsResult( } if (!permissionGranted) { - finishWithSuccess(null); + switch (requestCode) { + case REQUEST_EXTERNAL_IMAGE_STORAGE_PERMISSION: + case REQUEST_EXTERNAL_VIDEO_STORAGE_PERMISSION: + finishWithError("photo_access_denied", "The user did not allow photo access."); + break; + case REQUEST_CAMERA_IMAGE_PERMISSION: + case REQUEST_CAMERA_VIDEO_PERMISSION: + finishWithError("camera_access_denied", "The user did not allow camera access."); + break; + } } return true;