From 760455c348340e087d646c2ed97ab886a4c1b4c6 Mon Sep 17 00:00:00 2001 From: Mairramer Date: Wed, 8 May 2024 15:20:24 -0300 Subject: [PATCH 1/5] fix:: will fix crash on Android 12+ devices --- .../flutter/plugins/imagepicker/ImagePickerDelegate.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerDelegate.java b/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerDelegate.java index 96bf727a881..880c51c5cf7 100644 --- a/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerDelegate.java +++ b/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerDelegate.java @@ -404,7 +404,7 @@ private void launchTakeVideoWithCameraIntent() { } catch (ActivityNotFoundException e) { try { // If we can't delete the file again here, there's not really anything we can do about it. - //noinspection ResultOfMethodCallIgnored + // noinspection ResultOfMethodCallIgnored videoFile.delete(); } catch (SecurityException exception) { exception.printStackTrace(); @@ -515,7 +515,7 @@ private void launchTakeImageWithCameraIntent() { } catch (ActivityNotFoundException e) { try { // If we can't delete the file again here, there's not really anything we can do about it. - //noinspection ResultOfMethodCallIgnored + // noinspection ResultOfMethodCallIgnored imageFile.delete(); } catch (SecurityException exception) { exception.printStackTrace(); @@ -692,7 +692,10 @@ private void handleChooseMediaResult(int resultCode, Intent intent) { paths.add(new MediaPath(path, mimeType)); } } else { - paths.add(new MediaPath(fileUtils.getPathFromUri(activity, intent.getData()), null)); + Uri uri = intent.getData(); + if (uri != null) { + paths.add(new MediaPath(fileUtils.getPathFromUri(activity, uri), null)); + } } handleMediaResult(paths); return; From 8d59828f488833a23c6664f210f34f0f7fdb0dc7 Mon Sep 17 00:00:00 2001 From: Mairramer Date: Wed, 8 May 2024 15:24:54 -0300 Subject: [PATCH 2/5] added changelog --- packages/image_picker/image_picker_android/CHANGELOG.md | 4 ++++ packages/image_picker/image_picker_android/pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/image_picker/image_picker_android/CHANGELOG.md b/packages/image_picker/image_picker_android/CHANGELOG.md index b05105f89da..769ee2c6e25 100644 --- a/packages/image_picker/image_picker_android/CHANGELOG.md +++ b/packages/image_picker/image_picker_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.12 + +* Fixes app crashes on Android 12+ caused by selected images with size 0. + ## 0.8.11 * Updates documentation to note that Android Photo Picker use is not optional on Android 13+. diff --git a/packages/image_picker/image_picker_android/pubspec.yaml b/packages/image_picker/image_picker_android/pubspec.yaml index 41f5c04bde9..ec276759069 100755 --- a/packages/image_picker/image_picker_android/pubspec.yaml +++ b/packages/image_picker/image_picker_android/pubspec.yaml @@ -2,7 +2,7 @@ name: image_picker_android description: Android implementation of the image_picker plugin. repository: https://github.com/flutter/packages/tree/main/packages/image_picker/image_picker_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+image_picker%22 -version: 0.8.11 +version: 0.8.12 environment: sdk: ^3.3.0 From 995f0a7b6362e263ce18619823153c7bb34c0b9c Mon Sep 17 00:00:00 2001 From: Mairramer Date: Wed, 8 May 2024 15:43:59 -0300 Subject: [PATCH 3/5] fix --- packages/image_picker/image_picker_android/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/image_picker/image_picker_android/CHANGELOG.md b/packages/image_picker/image_picker_android/CHANGELOG.md index 769ee2c6e25..6a75d640524 100644 --- a/packages/image_picker/image_picker_android/CHANGELOG.md +++ b/packages/image_picker/image_picker_android/CHANGELOG.md @@ -1,6 +1,6 @@ ## 0.8.12 -* Fixes app crashes on Android 12+ caused by selected images with size 0. +* Fixes app crashes on Android 12+ caused by selecting images with size 0. ## 0.8.11 From a2f4000e132954595a36f563e3b5d481d70308ac Mon Sep 17 00:00:00 2001 From: Mairramer Date: Wed, 8 May 2024 16:42:47 -0300 Subject: [PATCH 4/5] added test --- .../imagepicker/ImagePickerDelegateTest.java | 32 +++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/packages/image_picker/image_picker_android/android/src/test/java/io/flutter/plugins/imagepicker/ImagePickerDelegateTest.java b/packages/image_picker/image_picker_android/android/src/test/java/io/flutter/plugins/imagepicker/ImagePickerDelegateTest.java index 81546da52ec..08a775c4c0c 100644 --- a/packages/image_picker/image_picker_android/android/src/test/java/io/flutter/plugins/imagepicker/ImagePickerDelegateTest.java +++ b/packages/image_picker/image_picker_android/android/src/test/java/io/flutter/plugins/imagepicker/ImagePickerDelegateTest.java @@ -182,7 +182,6 @@ public void chooseMediaFromGallery_whenPendingResultExists_finishesWithAlreadyAc @Test @Config(sdk = 30) public void chooseImageFromGallery_launchesChooseFromGalleryIntent() { - ImagePickerDelegate delegate = createDelegate(); delegate.chooseImageFromGallery(DEFAULT_IMAGE_OPTIONS, false, mockResult); @@ -194,7 +193,6 @@ public void chooseImageFromGallery_launchesChooseFromGalleryIntent() { @Test @Config(minSdk = 33) public void chooseImageFromGallery_withPhotoPicker_launchesChooseFromGalleryIntent() { - ImagePickerDelegate delegate = createDelegate(); delegate.chooseImageFromGallery(DEFAULT_IMAGE_OPTIONS, true, mockResult); @@ -206,7 +204,6 @@ public void chooseImageFromGallery_withPhotoPicker_launchesChooseFromGalleryInte @Test @Config(sdk = 30) public void chooseMultiImageFromGallery_launchesChooseFromGalleryIntent() { - ImagePickerDelegate delegate = createDelegate(); delegate.chooseMultiImageFromGallery( DEFAULT_IMAGE_OPTIONS, true, Integer.MAX_VALUE, mockResult); @@ -220,7 +217,6 @@ public void chooseMultiImageFromGallery_launchesChooseFromGalleryIntent() { @Test @Config(minSdk = 33) public void chooseMultiImageFromGallery_withPhotoPicker_launchesChooseFromGalleryIntent() { - ImagePickerDelegate delegate = createDelegate(); delegate.chooseMultiImageFromGallery( DEFAULT_IMAGE_OPTIONS, false, Integer.MAX_VALUE, mockResult); @@ -234,7 +230,6 @@ public void chooseMultiImageFromGallery_withPhotoPicker_launchesChooseFromGaller @Test @Config(sdk = 30) public void chooseVideoFromGallery_launchesChooseFromGalleryIntent() { - ImagePickerDelegate delegate = createDelegate(); delegate.chooseVideoFromGallery(DEFAULT_VIDEO_OPTIONS, true, mockResult); @@ -246,7 +241,6 @@ public void chooseVideoFromGallery_launchesChooseFromGalleryIntent() { @Test @Config(minSdk = 33) public void chooseVideoFromGallery_withPhotoPicker_launchesChooseFromGalleryIntent() { - ImagePickerDelegate delegate = createDelegate(); delegate.chooseVideoFromGallery(DEFAULT_VIDEO_OPTIONS, true, mockResult); @@ -820,6 +814,32 @@ public void onActivityResult_withUnknownRequest_returnsFalse() { assertFalse(isHandled); } + @Test + public void + onActivityResult_whenImagePickedFromGallery_finishesWithEmptyListIfIntentDataIsNull() { + setupMockClipDataNullUri(); + when(mockIntent.getData()).thenReturn(null); + when(mockIntent.getClipData()).thenReturn(null); + + Mockito.doAnswer( + invocation -> { + ((Runnable) invocation.getArgument(0)).run(); + return null; + }) + .when(mockExecutor) + .execute(any(Runnable.class)); + ImagePickerDelegate delegate = + createDelegateWithPendingResultAndOptions(DEFAULT_IMAGE_OPTIONS, null); + + delegate.onActivityResult( + ImagePickerDelegate.REQUEST_CODE_CHOOSE_MEDIA_FROM_GALLERY, Activity.RESULT_OK, mockIntent); + + @SuppressWarnings("unchecked") + ArgumentCaptor> pathListCapture = ArgumentCaptor.forClass(List.class); + verify(mockResult).success(pathListCapture.capture()); + assertEquals(0, pathListCapture.getValue().size()); + } + private ImagePickerDelegate createDelegate() { return new ImagePickerDelegate( mockActivity, From 7114d5b802513963bd24904351d4926bafe3de23 Mon Sep 17 00:00:00 2001 From: Mairramer Date: Wed, 8 May 2024 16:45:37 -0300 Subject: [PATCH 5/5] improve --- .../io/flutter/plugins/imagepicker/ImagePickerDelegateTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/image_picker/image_picker_android/android/src/test/java/io/flutter/plugins/imagepicker/ImagePickerDelegateTest.java b/packages/image_picker/image_picker_android/android/src/test/java/io/flutter/plugins/imagepicker/ImagePickerDelegateTest.java index 08a775c4c0c..fdee1c9b67e 100644 --- a/packages/image_picker/image_picker_android/android/src/test/java/io/flutter/plugins/imagepicker/ImagePickerDelegateTest.java +++ b/packages/image_picker/image_picker_android/android/src/test/java/io/flutter/plugins/imagepicker/ImagePickerDelegateTest.java @@ -838,6 +838,7 @@ public void onActivityResult_withUnknownRequest_returnsFalse() { ArgumentCaptor> pathListCapture = ArgumentCaptor.forClass(List.class); verify(mockResult).success(pathListCapture.capture()); assertEquals(0, pathListCapture.getValue().size()); + verifyNoMoreInteractions(mockResult); } private ImagePickerDelegate createDelegate() {