Skip to content

Commit f18b895

Browse files
authored
[image_picker_android] - will fix crash on Android 12+ devices (flutter#6691)
This will fix flutter#147280
1 parent 1ab2f5b commit f18b895

File tree

4 files changed

+38
-10
lines changed

4 files changed

+38
-10
lines changed

packages/image_picker/image_picker_android/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.8.12
2+
3+
* Fixes app crashes on Android 12+ caused by selecting images with size 0.
4+
15
## 0.8.11
26

37
* Updates documentation to note that Android Photo Picker use is not optional on Android 13+.

packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerDelegate.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,7 @@ private void launchTakeVideoWithCameraIntent() {
404404
} catch (ActivityNotFoundException e) {
405405
try {
406406
// If we can't delete the file again here, there's not really anything we can do about it.
407-
//noinspection ResultOfMethodCallIgnored
407+
// noinspection ResultOfMethodCallIgnored
408408
videoFile.delete();
409409
} catch (SecurityException exception) {
410410
exception.printStackTrace();
@@ -515,7 +515,7 @@ private void launchTakeImageWithCameraIntent() {
515515
} catch (ActivityNotFoundException e) {
516516
try {
517517
// If we can't delete the file again here, there's not really anything we can do about it.
518-
//noinspection ResultOfMethodCallIgnored
518+
// noinspection ResultOfMethodCallIgnored
519519
imageFile.delete();
520520
} catch (SecurityException exception) {
521521
exception.printStackTrace();
@@ -692,7 +692,10 @@ private void handleChooseMediaResult(int resultCode, Intent intent) {
692692
paths.add(new MediaPath(path, mimeType));
693693
}
694694
} else {
695-
paths.add(new MediaPath(fileUtils.getPathFromUri(activity, intent.getData()), null));
695+
Uri uri = intent.getData();
696+
if (uri != null) {
697+
paths.add(new MediaPath(fileUtils.getPathFromUri(activity, uri), null));
698+
}
696699
}
697700
handleMediaResult(paths);
698701
return;

packages/image_picker/image_picker_android/android/src/test/java/io/flutter/plugins/imagepicker/ImagePickerDelegateTest.java

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,6 @@ public void chooseMediaFromGallery_whenPendingResultExists_finishesWithAlreadyAc
182182
@Test
183183
@Config(sdk = 30)
184184
public void chooseImageFromGallery_launchesChooseFromGalleryIntent() {
185-
186185
ImagePickerDelegate delegate = createDelegate();
187186
delegate.chooseImageFromGallery(DEFAULT_IMAGE_OPTIONS, false, mockResult);
188187

@@ -194,7 +193,6 @@ public void chooseImageFromGallery_launchesChooseFromGalleryIntent() {
194193
@Test
195194
@Config(minSdk = 33)
196195
public void chooseImageFromGallery_withPhotoPicker_launchesChooseFromGalleryIntent() {
197-
198196
ImagePickerDelegate delegate = createDelegate();
199197
delegate.chooseImageFromGallery(DEFAULT_IMAGE_OPTIONS, true, mockResult);
200198

@@ -206,7 +204,6 @@ public void chooseImageFromGallery_withPhotoPicker_launchesChooseFromGalleryInte
206204
@Test
207205
@Config(sdk = 30)
208206
public void chooseMultiImageFromGallery_launchesChooseFromGalleryIntent() {
209-
210207
ImagePickerDelegate delegate = createDelegate();
211208
delegate.chooseMultiImageFromGallery(
212209
DEFAULT_IMAGE_OPTIONS, true, Integer.MAX_VALUE, mockResult);
@@ -220,7 +217,6 @@ public void chooseMultiImageFromGallery_launchesChooseFromGalleryIntent() {
220217
@Test
221218
@Config(minSdk = 33)
222219
public void chooseMultiImageFromGallery_withPhotoPicker_launchesChooseFromGalleryIntent() {
223-
224220
ImagePickerDelegate delegate = createDelegate();
225221
delegate.chooseMultiImageFromGallery(
226222
DEFAULT_IMAGE_OPTIONS, false, Integer.MAX_VALUE, mockResult);
@@ -234,7 +230,6 @@ public void chooseMultiImageFromGallery_withPhotoPicker_launchesChooseFromGaller
234230
@Test
235231
@Config(sdk = 30)
236232
public void chooseVideoFromGallery_launchesChooseFromGalleryIntent() {
237-
238233
ImagePickerDelegate delegate = createDelegate();
239234
delegate.chooseVideoFromGallery(DEFAULT_VIDEO_OPTIONS, true, mockResult);
240235

@@ -246,7 +241,6 @@ public void chooseVideoFromGallery_launchesChooseFromGalleryIntent() {
246241
@Test
247242
@Config(minSdk = 33)
248243
public void chooseVideoFromGallery_withPhotoPicker_launchesChooseFromGalleryIntent() {
249-
250244
ImagePickerDelegate delegate = createDelegate();
251245
delegate.chooseVideoFromGallery(DEFAULT_VIDEO_OPTIONS, true, mockResult);
252246

@@ -820,6 +814,33 @@ public void onActivityResult_withUnknownRequest_returnsFalse() {
820814
assertFalse(isHandled);
821815
}
822816

817+
@Test
818+
public void
819+
onActivityResult_whenImagePickedFromGallery_finishesWithEmptyListIfIntentDataIsNull() {
820+
setupMockClipDataNullUri();
821+
when(mockIntent.getData()).thenReturn(null);
822+
when(mockIntent.getClipData()).thenReturn(null);
823+
824+
Mockito.doAnswer(
825+
invocation -> {
826+
((Runnable) invocation.getArgument(0)).run();
827+
return null;
828+
})
829+
.when(mockExecutor)
830+
.execute(any(Runnable.class));
831+
ImagePickerDelegate delegate =
832+
createDelegateWithPendingResultAndOptions(DEFAULT_IMAGE_OPTIONS, null);
833+
834+
delegate.onActivityResult(
835+
ImagePickerDelegate.REQUEST_CODE_CHOOSE_MEDIA_FROM_GALLERY, Activity.RESULT_OK, mockIntent);
836+
837+
@SuppressWarnings("unchecked")
838+
ArgumentCaptor<List<String>> pathListCapture = ArgumentCaptor.forClass(List.class);
839+
verify(mockResult).success(pathListCapture.capture());
840+
assertEquals(0, pathListCapture.getValue().size());
841+
verifyNoMoreInteractions(mockResult);
842+
}
843+
823844
private ImagePickerDelegate createDelegate() {
824845
return new ImagePickerDelegate(
825846
mockActivity,

packages/image_picker/image_picker_android/pubspec.yaml

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

77
environment:
88
sdk: ^3.3.0

0 commit comments

Comments
 (0)