Skip to content

Conversation

@gmackall
Copy link
Member

@gmackall gmackall commented Oct 28, 2025

Inlines the check, copying the logic and then applying quick fixes that AS suggested to simplify.

Fixes flutter/flutter#177673

Pre-Review Checklist

If you need help, consider asking for advice on the #hackers-new channel on Discord.

Note: The Flutter team is currently trialing the use of Gemini Code Assist for GitHub. Comments from the gemini-code-assist bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed.

Footnotes

  1. Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. 2 3

@flutter-dashboard
Copy link

It looks like this pull request may not have tests. Please make sure to add tests or get an explicit test exemption before merging.

If you are not sure if you need tests, consider this rule of thumb: the purpose of a test is to make sure someone doesn't accidentally revert the fix. Ask yourself, is there anything in your PR that you feel it is important we not accidentally revert back to how it was before your fix?

Reviewers: Read the Tree Hygiene page and make sure this patch meets those guidelines before LGTMing. If you believe this PR qualifies for a test exemption, contact "@test-exemption-reviewer" in the #hackers channel in Discord (don't just cc them here, they won't see it!). The test exemption team is a small volunteer group, so all reviewers should feel empowered to ask for tests, without delegating that responsibility entirely to the test exemption group.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request inlines the internal isSystemPickerAvailable$activity_release() check. While the inlining is correct, it carries over a bug from the original implementation that would cause a crash on Android versions 11 and 12. The call to MediaStore.getPickImagesMaxLimit() is not guarded correctly, as it's only available on Android 13 (API 33) and above. I've provided a suggestion to fix this critical issue by simplifying the condition to check only for API level 33, which also has the side benefit of removing the need for the newly added SdkExtensions import.

Comment on lines 71 to 74
if (Build.VERSION.SDK_INT >= 33 || (Build.VERSION.SDK_INT >= 30 && SdkExtensions.getExtensionVersion(Build.VERSION_CODES.R) >= 2)) {
return MediaStore.getPickImagesMaxLimit();
} else {
return Integer.MAX_VALUE;

Choose a reason for hiding this comment

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

critical

This logic, while correctly inlining the check for the system photo picker, perpetuates a bug from the original code that will cause a crash on devices running Android 11 (API 30) to Android 12L (API 32).

The method MediaStore.getPickImagesMaxLimit() is only available on API 33+ (Android 13). The current condition allows this method to be called on API 30-32 if the photo picker is available via a system extension, which will result in a NoSuchMethodError at runtime.

I suggest simplifying the logic to only check for API 33+, as that's the only level where getPickImagesMaxLimit() is guaranteed to exist. For lower API levels, ACTION_PICK_IMAGES only supports single-item selection, and any fallback mechanism (like ACTION_GET_CONTENT) doesn't have a standard limit, so returning Integer.MAX_VALUE is appropriate.

This change will fix the crash and simplify the code. As a result, the android.os.ext.SdkExtensions import will no longer be needed and can be removed. The @SuppressLint("ClassVerificationFailure") may also no longer be necessary.

Suggested change
if (Build.VERSION.SDK_INT >= 33 || (Build.VERSION.SDK_INT >= 30 && SdkExtensions.getExtensionVersion(Build.VERSION_CODES.R) >= 2)) {
return MediaStore.getPickImagesMaxLimit();
} else {
return Integer.MAX_VALUE;
if (Build.VERSION.SDK_INT >= 33) {
return MediaStore.getPickImagesMaxLimit();
} else {
return Integer.MAX_VALUE;
}

Copy link
Member Author

Choose a reason for hiding this comment

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

Copy link
Collaborator

@stuartmorgan-g stuartmorgan-g left a comment

Choose a reason for hiding this comment

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

LGTM, thanks for jumping on this!

@stuartmorgan-g
Copy link
Collaborator

test-exempt: code refactor with no semantic change

@gmackall gmackall added the autosubmit Merge PR when tree becomes green via auto submit App label Oct 28, 2025
@auto-submit auto-submit bot merged commit 41c6b3d into flutter:main Oct 28, 2025
80 checks passed
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Oct 29, 2025
github-merge-queue bot pushed a commit to flutter/flutter that referenced this pull request Oct 29, 2025
flutter/packages@c8ba0cc...41c6b3d

2025-10-28 [email protected]
[image_picker_android] Inline sdk guard logic from internal
`isSystemPickerAvailable$activity_release()` (flutter/packages#10314)
2025-10-28 [email protected] Roll Flutter from
4c91098 to 7cf0dc1 (31 revisions) (flutter/packages#10311)
2025-10-28 [email protected] [camera] Implement setDescription
with android camerax (flutter/packages#10117)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages-flutter-autoroll
Please CC [email protected] on the revert to ensure that a
human
is aware of the problem.

To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
walley892 pushed a commit to walley892/flutter that referenced this pull request Oct 30, 2025
…r#177725)

flutter/packages@c8ba0cc...41c6b3d

2025-10-28 [email protected]
[image_picker_android] Inline sdk guard logic from internal
`isSystemPickerAvailable$activity_release()` (flutter/packages#10314)
2025-10-28 [email protected] Roll Flutter from
4c91098 to 7cf0dc1 (31 revisions) (flutter/packages#10311)
2025-10-28 [email protected] [camera] Implement setDescription
with android camerax (flutter/packages#10117)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages-flutter-autoroll
Please CC [email protected] on the revert to ensure that a
human
is aware of the problem.

To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

autosubmit Merge PR when tree becomes green via auto submit App p: image_picker platform-android

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[image_picker] Android uses non-public function

2 participants