Skip to content

Commit e8ab632

Browse files
authored
[image_picker_android] Fix deprecation warnings by branching based on build version, and suppressing only when needed (#6233)
Fixes flutter/flutter#121816.
1 parent 2218300 commit e8ab632

File tree

4 files changed

+33
-10
lines changed

4 files changed

+33
-10
lines changed

packages/image_picker/image_picker_android/CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
## NEXT
1+
## 0.8.9+4
22

3+
* Minimizes scope of deprecation warning suppression to only the versions where it is required.
34
* Updates minimum supported SDK version to Flutter 3.13/Dart 3.1.
45
* Updates compileSdk version to 34.
56

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

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -550,10 +550,14 @@ private File createTemporaryWritableFile(String suffix) {
550550

551551
private void grantUriPermissions(Intent intent, Uri imageUri) {
552552
PackageManager packageManager = activity.getPackageManager();
553-
// TODO(stuartmorgan): Add new codepath: https://github.com/flutter/flutter/issues/121816
554-
@SuppressWarnings("deprecation")
555-
List<ResolveInfo> compatibleActivities =
556-
packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
553+
List<ResolveInfo> compatibleActivities;
554+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
555+
compatibleActivities =
556+
packageManager.queryIntentActivities(
557+
intent, PackageManager.ResolveInfoFlags.of(PackageManager.MATCH_DEFAULT_ONLY));
558+
} else {
559+
compatibleActivities = queryIntentActivitiesPreApi33(packageManager, intent);
560+
}
557561

558562
for (ResolveInfo info : compatibleActivities) {
559563
activity.grantUriPermission(
@@ -563,6 +567,12 @@ private void grantUriPermissions(Intent intent, Uri imageUri) {
563567
}
564568
}
565569

570+
@SuppressWarnings("deprecation")
571+
private static List<ResolveInfo> queryIntentActivitiesPreApi33(
572+
PackageManager packageManager, Intent intent) {
573+
return packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
574+
}
575+
566576
@Override
567577
public boolean onRequestPermissionsResult(
568578
int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

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

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,15 @@ final class ImagePickerUtils {
1616
private static boolean isPermissionPresentInManifest(Context context, String permissionName) {
1717
try {
1818
PackageManager packageManager = context.getPackageManager();
19-
// TODO(stuartmorgan): Add new codepath: https://github.com/flutter/flutter/issues/121816
20-
@SuppressWarnings("deprecation")
21-
PackageInfo packageInfo =
22-
packageManager.getPackageInfo(context.getPackageName(), PackageManager.GET_PERMISSIONS);
19+
PackageInfo packageInfo;
20+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
21+
packageInfo =
22+
packageManager.getPackageInfo(
23+
context.getPackageName(),
24+
PackageManager.PackageInfoFlags.of(PackageManager.GET_PERMISSIONS));
25+
} else {
26+
packageInfo = getPermissionsPackageInfoPreApi33(packageManager, context.getPackageName());
27+
}
2328

2429
String[] requestedPermissions = packageInfo.requestedPermissions;
2530
return Arrays.asList(requestedPermissions).contains(permissionName);
@@ -29,6 +34,13 @@ private static boolean isPermissionPresentInManifest(Context context, String per
2934
}
3035
}
3136

37+
@SuppressWarnings("deprecation")
38+
private static PackageInfo getPermissionsPackageInfoPreApi33(
39+
PackageManager packageManager, String packageName)
40+
throws PackageManager.NameNotFoundException {
41+
return packageManager.getPackageInfo(packageName, PackageManager.GET_PERMISSIONS);
42+
}
43+
3244
/**
3345
* Camera permission need request if it present in manifest, because for M or great for take Photo
3446
* ar Video by intent need it permission, even if the camera permission is not used.

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.9+3
5+
version: 0.8.9+4
66

77
environment:
88
sdk: ^3.1.0

0 commit comments

Comments
 (0)