Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
a0f3b70
...
ashutosh2014 Mar 21, 2026
362cf17
Update ImagePickerUtils.java
ashutosh2014 Mar 21, 2026
afecdf1
........
ashutosh2014 Mar 22, 2026
f70492c
Merge remote-tracking branch 'upstream/main' into image-picker-Fix-an…
ashutosh2014 Mar 26, 2026
385d2e3
Update pubspec.yaml
ashutosh2014 Mar 26, 2026
da290e7
Merge branch 'main' into image-picker-Fix-android-16-not-picking-up-file
ashutosh2014 Mar 26, 2026
b1a240d
Merge branch 'main' into image-picker-Fix-android-16-not-picking-up-file
ashutosh2014 Mar 27, 2026
ce77b61
Merge branch 'main' into image-picker-Fix-android-16-not-picking-up-file
ashutosh2014 Mar 29, 2026
748ba3b
Merge branch 'main' into image-picker-Fix-android-16-not-picking-up-file
ashutosh2014 Mar 30, 2026
681bd67
Merge branch 'main' into image-picker-Fix-android-16-not-picking-up-file
ashutosh2014 Apr 1, 2026
7194411
Merge branch 'main' into image-picker-Fix-android-16-not-picking-up-file
ashutosh2014 Apr 1, 2026
76ed499
Merge remote-tracking branch 'upstream/main' into image-picker-Fix-an…
ashutosh2014 Apr 3, 2026
256b9f8
Merge branch 'image-picker-Fix-android-16-not-picking-up-file' of htt…
ashutosh2014 Apr 3, 2026
ab51db2
Merge remote-tracking branch 'upstream/main' into image-picker-Fix-an…
ashutosh2014 Apr 3, 2026
8eceb37
...
ashutosh2014 Apr 3, 2026
0d2e2bf
Merge branch 'main' into image-picker-Fix-android-16-not-picking-up-file
ashutosh2014 Apr 3, 2026
791842d
documents updated ....
ashutosh2014 Apr 8, 2026
e9c4b78
Merge remote-tracking branch 'upstream/main' into image-picker-Fix-an…
ashutosh2014 May 22, 2026
d758853
..
ashutosh2014 May 22, 2026
56d32af
..
ashutosh2014 May 22, 2026
190e593
Update README.md
ashutosh2014 May 22, 2026
0216750
Update README.md
ashutosh2014 May 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions packages/image_picker/image_picker_android/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
## 0.8.13+15

* Fixes gallery image/video selection on Android API 36+ returning no paths when
`useAndroidPhotoPicker` was false. The plugin now uses the Android Photo Picker on API 36 and
above regardless of that flag, avoiding a broken `ACTION_GET_CONTENT` result from the system UI.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This can be simplified to "Updates plugin to use Android Photo Picker on API 36 and above."

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tx! Updated the changelog to keep it concise 👍

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@stuartmorgan-g can we merge this?


## 0.8.13+14

* Bumps androidx.activity:activity from 1.12.2 to 1.12.4.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -296,7 +296,7 @@ public void chooseMediaFromGallery(

private void launchPickMediaFromGalleryIntent(Messages.GeneralOptions generalOptions) {
Intent pickMediaIntent;
if (generalOptions.getUsePhotoPicker()) {
if (ImagePickerUtils.effectiveUsePhotoPicker(generalOptions.getUsePhotoPicker())) {
if (generalOptions.getAllowMultiple()) {
int limit = ImagePickerUtils.getLimitFromOption(generalOptions);

Expand Down Expand Up @@ -342,7 +342,7 @@ public void chooseVideoFromGallery(

private void launchPickVideoFromGalleryIntent(Boolean usePhotoPicker) {
Intent pickVideoIntent;
if (usePhotoPicker) {
if (ImagePickerUtils.effectiveUsePhotoPicker(usePhotoPicker)) {
pickVideoIntent =
new ActivityResultContracts.PickVisualMedia()
.createIntent(
Expand Down Expand Up @@ -441,7 +441,7 @@ public void chooseMultiImageFromGallery(

private void launchPickImageFromGalleryIntent(Boolean usePhotoPicker) {
Intent pickImageIntent;
if (usePhotoPicker) {
if (ImagePickerUtils.effectiveUsePhotoPicker(usePhotoPicker)) {
pickImageIntent =
new ActivityResultContracts.PickVisualMedia()
.createIntent(
Expand All @@ -458,7 +458,7 @@ private void launchPickImageFromGalleryIntent(Boolean usePhotoPicker) {

private void launchMultiPickImageFromGalleryIntent(Boolean usePhotoPicker, int limit) {
Intent pickMultiImageIntent;
if (usePhotoPicker) {
if (ImagePickerUtils.effectiveUsePhotoPicker(usePhotoPicker)) {
pickMultiImageIntent =
new ActivityResultContracts.PickMultipleVisualMedia(limit)
.createIntent(
Expand Down Expand Up @@ -490,7 +490,7 @@ public void chooseMultiVideoFromGallery(

private void launchMultiPickVideoFromGalleryIntent(Boolean usePhotoPicker, int limit) {
Intent pickMultiVideoIntent;
if (usePhotoPicker) {
if (ImagePickerUtils.effectiveUsePhotoPicker(usePhotoPicker)) {
pickMultiVideoIntent =
new ActivityResultContracts.PickMultipleVisualMedia(limit)
.createIntent(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
import java.util.Arrays;

final class ImagePickerUtils {
private static final int API_LEVEL_36 = 36;
Comment thread
ashutosh2014 marked this conversation as resolved.

/** returns true, if permission present in manifest, otherwise false */
private static boolean isPermissionPresentInManifest(Context context, String permissionName) {
try {
Expand Down Expand Up @@ -86,4 +88,22 @@ static int getLimitFromOption(Messages.GeneralOptions generalOptions) {

return effectiveLimit;
}

/**
* Returns whether gallery/media selection should use {@link
* androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia} (Android Photo
* Picker) instead of {@link android.content.Intent#ACTION_GET_CONTENT}.
*
* <p>On Android API 36+, {@code ACTION_GET_CONTENT} for images may be handled by the system
* photo picker's {@code PhotopickerGetContentActivity}. That path combined with {@code
* startActivityForResult} can return {@link android.app.Activity#RESULT_OK} without {@link
* android.content.Intent#getData()} or usable {@link android.content.ClipData}, so the plugin
* would complete with no paths. The {@code PickVisualMedia} contract uses the Activity Result API
* and receives URIs reliably.
*
* <p>See <a href="https://github.com/flutter/flutter/issues/182071">flutter/flutter#182071</a>.
*/
static boolean effectiveUsePhotoPicker(boolean usePhotoPickerFromDart) {
return Build.VERSION.SDK_INT >= API_LEVEL_36 || usePhotoPickerFromDart;
}
Comment thread
ashutosh2014 marked this conversation as resolved.
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// Copyright 2013 The Flutter Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package io.flutter.plugins.imagepicker;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;

@RunWith(RobolectricTestRunner.class)
public class ImagePickerUtilsTest {

@Test
@Config(sdk = 35)
public void effectiveUsePhotoPicker_belowApi36_usesDartPreference() {
assertFalse(ImagePickerUtils.effectiveUsePhotoPicker(false));
assertTrue(ImagePickerUtils.effectiveUsePhotoPicker(true));
}

@Test
@Config(sdk = 36)
public void effectiveUsePhotoPicker_onApi36_alwaysUsesPhotoPicker() {
assertTrue(ImagePickerUtils.effectiveUsePhotoPicker(false));
assertTrue(ImagePickerUtils.effectiveUsePhotoPicker(true));
}
}
2 changes: 1 addition & 1 deletion packages/image_picker/image_picker_android/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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.13+14
version: 0.8.13+15

environment:
sdk: ^3.9.0
Expand Down