From 7df1ec6c5a789e8113efaa4c047ee4304f900a3a Mon Sep 17 00:00:00 2001 From: Gray Mackall Date: Thu, 29 Feb 2024 12:42:02 -0800 Subject: [PATCH 1/4] fix deprecations properly --- .../plugins/imagepicker/ImagePickerDelegate.java | 15 +++++++++++---- .../plugins/imagepicker/ImagePickerUtils.java | 15 +++++++++++---- 2 files changed, 22 insertions(+), 8 deletions(-) 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..592f47d7949 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,12 @@ 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 +565,11 @@ 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..a41b7bdbe38 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,12 @@ 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 +31,11 @@ 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. From 0f6631d16f80cdbebab5e2ca454b040785c93988 Mon Sep 17 00:00:00 2001 From: Gray Mackall Date: Thu, 29 Feb 2024 13:03:37 -0800 Subject: [PATCH 2/4] changelog+pubspec --- packages/image_picker/image_picker_android/CHANGELOG.md | 3 ++- packages/image_picker/image_picker_android/pubspec.yaml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/image_picker/image_picker_android/CHANGELOG.md b/packages/image_picker/image_picker_android/CHANGELOG.md index b06dcfa43c8..ffd81e7ac9b 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+3 +* 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/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 From ec1949eb6fde1ffc4867f3a0f957d9de71d7cb78 Mon Sep 17 00:00:00 2001 From: Gray Mackall Date: Thu, 29 Feb 2024 13:04:27 -0800 Subject: [PATCH 3/4] changelog, but for real this time --- packages/image_picker/image_picker_android/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/image_picker/image_picker_android/CHANGELOG.md b/packages/image_picker/image_picker_android/CHANGELOG.md index ffd81e7ac9b..08b563a9885 100644 --- a/packages/image_picker/image_picker_android/CHANGELOG.md +++ b/packages/image_picker/image_picker_android/CHANGELOG.md @@ -1,4 +1,4 @@ -## 0.8.9+3 +## 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. From ecf4c9ec55f5ccbda33bd302bd569a50506d139b Mon Sep 17 00:00:00 2001 From: Gray Mackall Date: Thu, 29 Feb 2024 13:14:24 -0800 Subject: [PATCH 4/4] format --- .../flutter/plugins/imagepicker/ImagePickerDelegate.java | 7 +++++-- .../io/flutter/plugins/imagepicker/ImagePickerUtils.java | 9 +++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) 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 592f47d7949..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 @@ -552,7 +552,9 @@ private void grantUriPermissions(Intent intent, Uri imageUri) { PackageManager packageManager = activity.getPackageManager(); List compatibleActivities; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - compatibleActivities = packageManager.queryIntentActivities(intent, PackageManager.ResolveInfoFlags.of(PackageManager.MATCH_DEFAULT_ONLY)); + compatibleActivities = + packageManager.queryIntentActivities( + intent, PackageManager.ResolveInfoFlags.of(PackageManager.MATCH_DEFAULT_ONLY)); } else { compatibleActivities = queryIntentActivitiesPreApi33(packageManager, intent); } @@ -566,7 +568,8 @@ private void grantUriPermissions(Intent intent, Uri imageUri) { } @SuppressWarnings("deprecation") - private static List queryIntentActivitiesPreApi33(PackageManager packageManager, Intent intent) { + private static List queryIntentActivitiesPreApi33( + PackageManager packageManager, Intent intent) { return packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); } 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 a41b7bdbe38..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 @@ -18,7 +18,10 @@ private static boolean isPermissionPresentInManifest(Context context, String per PackageManager packageManager = context.getPackageManager(); PackageInfo packageInfo; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - packageInfo = packageManager.getPackageInfo(context.getPackageName(), PackageManager.PackageInfoFlags.of(PackageManager.GET_PERMISSIONS)); + packageInfo = + packageManager.getPackageInfo( + context.getPackageName(), + PackageManager.PackageInfoFlags.of(PackageManager.GET_PERMISSIONS)); } else { packageInfo = getPermissionsPackageInfoPreApi33(packageManager, context.getPackageName()); } @@ -32,7 +35,9 @@ private static boolean isPermissionPresentInManifest(Context context, String per } @SuppressWarnings("deprecation") - private static PackageInfo getPermissionsPackageInfoPreApi33(PackageManager packageManager, String packageName) throws PackageManager.NameNotFoundException { + private static PackageInfo getPermissionsPackageInfoPreApi33( + PackageManager packageManager, String packageName) + throws PackageManager.NameNotFoundException { return packageManager.getPackageInfo(packageName, PackageManager.GET_PERMISSIONS); }