diff --git a/packages/image_picker/image_picker_android/CHANGELOG.md b/packages/image_picker/image_picker_android/CHANGELOG.md index b06dcfa43c8..08b563a9885 100644 --- a/packages/image_picker/image_picker_android/CHANGELOG.md +++ b/packages/image_picker/image_picker_android/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 0.8.9+4 +* Minimizes scope of deprecation warning suppression to only the versions where it is required. * Updates minimum supported SDK version to Flutter 3.13/Dart 3.1. * Updates compileSdk version to 34. 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 cf45f1ba3f0..b50a1b20cd1 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 @@ -550,10 +550,14 @@ private File createTemporaryWritableFile(String suffix) { private void grantUriPermissions(Intent intent, Uri imageUri) { PackageManager packageManager = activity.getPackageManager(); - // TODO(stuartmorgan): Add new codepath: https://github.com/flutter/flutter/issues/121816 - @SuppressWarnings("deprecation") - List compatibleActivities = - packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); + List compatibleActivities; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + compatibleActivities = + packageManager.queryIntentActivities( + intent, PackageManager.ResolveInfoFlags.of(PackageManager.MATCH_DEFAULT_ONLY)); + } else { + compatibleActivities = queryIntentActivitiesPreApi33(packageManager, intent); + } for (ResolveInfo info : compatibleActivities) { activity.grantUriPermission( @@ -563,6 +567,12 @@ private void grantUriPermissions(Intent intent, Uri imageUri) { } } + @SuppressWarnings("deprecation") + private static List queryIntentActivitiesPreApi33( + PackageManager packageManager, Intent intent) { + return packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); + } + @Override public boolean onRequestPermissionsResult( int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { diff --git a/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerUtils.java b/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerUtils.java index 5e80258a00d..6a93c69feb4 100644 --- a/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerUtils.java +++ b/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerUtils.java @@ -16,10 +16,15 @@ final class ImagePickerUtils { private static boolean isPermissionPresentInManifest(Context context, String permissionName) { try { PackageManager packageManager = context.getPackageManager(); - // TODO(stuartmorgan): Add new codepath: https://github.com/flutter/flutter/issues/121816 - @SuppressWarnings("deprecation") - PackageInfo packageInfo = - packageManager.getPackageInfo(context.getPackageName(), PackageManager.GET_PERMISSIONS); + PackageInfo packageInfo; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + packageInfo = + packageManager.getPackageInfo( + context.getPackageName(), + PackageManager.PackageInfoFlags.of(PackageManager.GET_PERMISSIONS)); + } else { + packageInfo = getPermissionsPackageInfoPreApi33(packageManager, context.getPackageName()); + } String[] requestedPermissions = packageInfo.requestedPermissions; return Arrays.asList(requestedPermissions).contains(permissionName); @@ -29,6 +34,13 @@ private static boolean isPermissionPresentInManifest(Context context, String per } } + @SuppressWarnings("deprecation") + private static PackageInfo getPermissionsPackageInfoPreApi33( + PackageManager packageManager, String packageName) + throws PackageManager.NameNotFoundException { + return packageManager.getPackageInfo(packageName, PackageManager.GET_PERMISSIONS); + } + /** * Camera permission need request if it present in manifest, because for M or great for take Photo * ar Video by intent need it permission, even if the camera permission is not used. diff --git a/packages/image_picker/image_picker_android/pubspec.yaml b/packages/image_picker/image_picker_android/pubspec.yaml index 5e575a36b93..a2e8ac5eaef 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.9+3 +version: 0.8.9+4 environment: sdk: ^3.1.0