From 120f0058ee0157bfb990e8437a3c6cb78eeee31b Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Mon, 6 Mar 2023 17:04:34 -0800 Subject: [PATCH 01/20] adds android image picker options --- .../image_picker/image_picker/CHANGELOG.md | 3 ++- .../image_picker/lib/image_picker.dart | 25 +++++++++++++++++++ .../image_picker/image_picker/pubspec.yaml | 2 +- .../image_picker_android/CHANGELOG.md | 3 ++- .../imagepicker/ImagePickerDelegate.java | 20 +++++++-------- .../lib/image_picker_android.dart | 10 +++++++- .../image_picker_android/pubspec.yaml | 2 +- 7 files changed, 50 insertions(+), 15 deletions(-) diff --git a/packages/image_picker/image_picker/CHANGELOG.md b/packages/image_picker/image_picker/CHANGELOG.md index 7969e21c856..3ea39a065e2 100644 --- a/packages/image_picker/image_picker/CHANGELOG.md +++ b/packages/image_picker/image_picker/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 0.8.6+5 +* Adds `usePhotoPickerAndroid` options. * Aligns Dart and Flutter SDK constraints. ## 0.8.6+4 diff --git a/packages/image_picker/image_picker/lib/image_picker.dart b/packages/image_picker/image_picker/lib/image_picker.dart index 2e266ccd5a5..53fe86f539c 100755 --- a/packages/image_picker/image_picker/lib/image_picker.dart +++ b/packages/image_picker/image_picker/lib/image_picker.dart @@ -4,6 +4,7 @@ import 'dart:async'; import 'package:flutter/foundation.dart'; +import 'package:image_picker_android/image_picker_android.dart'; import 'package:image_picker_platform_interface/image_picker_platform_interface.dart'; export 'package:image_picker_platform_interface/image_picker_platform_interface.dart' @@ -352,3 +353,27 @@ class ImagePicker { return platform.getLostData(); } } + +/// Android specific settings for [ImagePicker]. +class AndroidImagePicker { + AndroidImagePicker._(); + + /// Whether to select images with the Android 13 Photo Picker. + /// + /// The Android 13 Photo Picker does not support cloud file selection. + static bool get useAndroidPhotoPicker { + final ImagePickerPlatform platform = ImagePickerPlatform.instance; + if (platform is ImagePickerAndroid) { + return platform.useAndroidPhotoPicker; + } + return false; + } + + /// Set whether to select images with the Android 13 Photo Picker. + static set useAndroidPhotoPicker(bool useAndroidPhotoPicker) { + final ImagePickerPlatform platform = ImagePickerPlatform.instance; + if (platform is ImagePickerAndroid) { + platform.useAndroidPhotoPicker = useAndroidPhotoPicker; + } + } +} diff --git a/packages/image_picker/image_picker/pubspec.yaml b/packages/image_picker/image_picker/pubspec.yaml index 86a8280e06b..924d5742e4f 100755 --- a/packages/image_picker/image_picker/pubspec.yaml +++ b/packages/image_picker/image_picker/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for selecting images from the Android and iOS image library, and taking new pictures with the camera. repository: https://github.com/flutter/packages/tree/main/packages/image_picker/image_picker issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+image_picker%22 -version: 0.8.6+4 +version: 0.8.6+5 environment: sdk: ">=2.17.0 <3.0.0" diff --git a/packages/image_picker/image_picker_android/CHANGELOG.md b/packages/image_picker/image_picker_android/CHANGELOG.md index 6c3b22c7702..643d2f661a6 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.6+10 +* Adds `usePhotoPickerAndroid` options. * Aligns Dart and Flutter SDK constraints. ## 0.8.5+9 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 006eb3dad47..5f5bdf52db0 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 @@ -252,12 +252,12 @@ public void chooseVideoFromGallery(MethodCall methodCall, MethodChannel.Result r return; } - launchPickVideoFromGalleryIntent(); + launchPickVideoFromGalleryIntent(methodCall.useAndroidPhotoPicker); } - private void launchPickVideoFromGalleryIntent() { + private void launchPickVideoFromGalleryIntent(Boolean useAndroidPhotoPicker) { Intent pickVideoIntent; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + if (useAndroidPhotoPicker && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { pickVideoIntent = new ActivityResultContracts.PickVisualMedia() .createIntent( @@ -326,7 +326,7 @@ public void chooseImageFromGallery(MethodCall methodCall, MethodChannel.Result r return; } - launchPickImageFromGalleryIntent(); + launchPickImageFromGalleryIntent(methodCall.useAndroidPhotoPicker); } public void chooseMultiImageFromGallery(MethodCall methodCall, MethodChannel.Result result) { @@ -335,12 +335,12 @@ public void chooseMultiImageFromGallery(MethodCall methodCall, MethodChannel.Res return; } - launchMultiPickImageFromGalleryIntent(); + launchMultiPickImageFromGalleryIntent(methodCall.useAndroidPhotoPicker); } - private void launchPickImageFromGalleryIntent() { + private void launchPickImageFromGalleryIntent(Boolean useAndroidPhotoPicker) { Intent pickImageIntent; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + if (useAndroidPhotoPicker && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { pickImageIntent = new ActivityResultContracts.PickVisualMedia() .createIntent( @@ -356,9 +356,9 @@ private void launchPickImageFromGalleryIntent() { activity.startActivityForResult(pickImageIntent, REQUEST_CODE_CHOOSE_IMAGE_FROM_GALLERY); } - private void launchMultiPickImageFromGalleryIntent() { + private void launchMultiPickImageFromGalleryIntent(Boolean useAndroidPhotoPicker) { Intent pickMultiImageIntent; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + if (useAndroidPhotoPicker && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { pickMultiImageIntent = new ActivityResultContracts.PickMultipleVisualMedia() .createIntent( @@ -716,4 +716,4 @@ private void useFrontCamera(Intent intent) { intent.putExtra("android.intent.extras.CAMERA_FACING", 1); } } -} +} \ No newline at end of file diff --git a/packages/image_picker/image_picker_android/lib/image_picker_android.dart b/packages/image_picker/image_picker_android/lib/image_picker_android.dart index b6073c7a436..eca19ced6eb 100644 --- a/packages/image_picker/image_picker_android/lib/image_picker_android.dart +++ b/packages/image_picker/image_picker_android/lib/image_picker_android.dart @@ -83,6 +83,7 @@ class ImagePickerAndroid extends ImagePickerPlatform { 'maxWidth': maxWidth, 'maxHeight': maxHeight, 'imageQuality': imageQuality, + 'useAndroidPhotoPicker': useAndroidPhotoPicker, }, ); } @@ -117,6 +118,7 @@ class ImagePickerAndroid extends ImagePickerPlatform { 'imageQuality': imageQuality, 'cameraDevice': preferredCameraDevice.index, 'requestFullMetadata': requestFullMetadata, + 'useAndroidPhotoPicker': useAndroidPhotoPicker, }, ); } @@ -145,7 +147,8 @@ class ImagePickerAndroid extends ImagePickerPlatform { { 'source': source.index, 'maxDuration': maxDuration?.inSeconds, - 'cameraDevice': preferredCameraDevice.index + 'cameraDevice': preferredCameraDevice.index, + 'useAndroidPhotoPicker': useAndroidPhotoPicker, }, ); } @@ -279,4 +282,9 @@ class ImagePickerAndroid extends ImagePickerPlatform { files: pickedFileList, ); } + + /// Set [ImagePickerPlatform] to use [AndroidPhotoPicker] + /// + /// Currently defaults to false, but the default is subject to change. + bool useAndroidPhotoPicker = false; } diff --git a/packages/image_picker/image_picker_android/pubspec.yaml b/packages/image_picker/image_picker_android/pubspec.yaml index 55bf2296a29..30b95c3ff17 100755 --- a/packages/image_picker/image_picker_android/pubspec.yaml +++ b/packages/image_picker/image_picker_android/pubspec.yaml @@ -3,7 +3,7 @@ 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.5+9 +version: 0.8.5+10 environment: sdk: ">=2.17.0 <3.0.0" From 251534983da29da7274360f25dca837ac3c92c23 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Mon, 6 Mar 2023 17:25:56 -0800 Subject: [PATCH 02/20] /n --- .../io/flutter/plugins/imagepicker/ImagePickerDelegate.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 5f5bdf52db0..787ad86ab31 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 @@ -716,4 +716,4 @@ private void useFrontCamera(Intent intent) { intent.putExtra("android.intent.extras.CAMERA_FACING", 1); } } -} \ No newline at end of file +} From 7b8e649ab8ea910f31c6a7cdacbce991156faa24 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Mon, 6 Mar 2023 17:38:44 -0800 Subject: [PATCH 03/20] correct use of methodCall --- .../io/flutter/plugins/imagepicker/ImagePickerDelegate.java | 6 +++--- 1 file changed, 3 insertions(+), 3 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 787ad86ab31..6ae454b2bb3 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 @@ -252,7 +252,7 @@ public void chooseVideoFromGallery(MethodCall methodCall, MethodChannel.Result r return; } - launchPickVideoFromGalleryIntent(methodCall.useAndroidPhotoPicker); + launchPickVideoFromGalleryIntent(methodCall.argument("useAndroidPhotoPicker")); } private void launchPickVideoFromGalleryIntent(Boolean useAndroidPhotoPicker) { @@ -326,7 +326,7 @@ public void chooseImageFromGallery(MethodCall methodCall, MethodChannel.Result r return; } - launchPickImageFromGalleryIntent(methodCall.useAndroidPhotoPicker); + launchPickImageFromGalleryIntent(methodCall.argument("useAndroidPhotoPicker")); } public void chooseMultiImageFromGallery(MethodCall methodCall, MethodChannel.Result result) { @@ -335,7 +335,7 @@ public void chooseMultiImageFromGallery(MethodCall methodCall, MethodChannel.Res return; } - launchMultiPickImageFromGalleryIntent(methodCall.useAndroidPhotoPicker); + launchMultiPickImageFromGalleryIntent(methodCall.argument("useAndroidPhotoPicker")); } private void launchPickImageFromGalleryIntent(Boolean useAndroidPhotoPicker) { From c428542b2eebc7c965aae3137c72d6d6a8f9cf19 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Mon, 6 Mar 2023 17:48:29 -0800 Subject: [PATCH 04/20] temp dep change --- packages/image_picker/image_picker/pubspec.yaml | 8 ++++++++ .../image_picker_android/example/pubspec.yaml | 8 ++++++++ packages/image_picker/image_picker_android/pubspec.yaml | 6 ++++++ 3 files changed, 22 insertions(+) diff --git a/packages/image_picker/image_picker/pubspec.yaml b/packages/image_picker/image_picker/pubspec.yaml index 924d5742e4f..4eb7483a71b 100755 --- a/packages/image_picker/image_picker/pubspec.yaml +++ b/packages/image_picker/image_picker/pubspec.yaml @@ -34,3 +34,11 @@ dev_dependencies: sdk: flutter mockito: ^5.0.0 plugin_platform_interface: ^2.0.0 + + +# FOR TESTING ONLY. DO NOT MERGE. +dependency_overrides: + image_picker_android: + path: ../../image_picker/image_picker_android + image_picker_platform_interface: + path: ../../image_picker/image_picker_platform_interface diff --git a/packages/image_picker/image_picker_android/example/pubspec.yaml b/packages/image_picker/image_picker_android/example/pubspec.yaml index 5b0f3e09774..113c7e9fadb 100755 --- a/packages/image_picker/image_picker_android/example/pubspec.yaml +++ b/packages/image_picker/image_picker_android/example/pubspec.yaml @@ -31,3 +31,11 @@ dev_dependencies: flutter: uses-material-design: true + + +# FOR TESTING ONLY. DO NOT MERGE. +dependency_overrides: + image_picker_android: + path: ../../../image_picker/image_picker_android + image_picker_platform_interface: + path: ../../../image_picker/image_picker_platform_interface diff --git a/packages/image_picker/image_picker_android/pubspec.yaml b/packages/image_picker/image_picker_android/pubspec.yaml index 30b95c3ff17..18b6878b77c 100755 --- a/packages/image_picker/image_picker_android/pubspec.yaml +++ b/packages/image_picker/image_picker_android/pubspec.yaml @@ -28,3 +28,9 @@ dev_dependencies: flutter_test: sdk: flutter mockito: ^5.0.0 + + +# FOR TESTING ONLY. DO NOT MERGE. +dependency_overrides: + image_picker_platform_interface: + path: ../../image_picker/image_picker_platform_interface From 139026397589778a7d8078aac4a032cdabc233b0 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Mon, 6 Mar 2023 17:52:13 -0800 Subject: [PATCH 05/20] the rest of the dep changes --- .../image_picker/image_picker_for_web/example/pubspec.yaml | 6 ++++++ packages/image_picker/image_picker_for_web/pubspec.yaml | 6 ++++++ packages/image_picker/image_picker_ios/example/pubspec.yaml | 6 ++++++ packages/image_picker/image_picker_ios/pubspec.yaml | 6 ++++++ .../image_picker/image_picker_windows/example/pubspec.yaml | 6 ++++++ packages/image_picker/image_picker_windows/pubspec.yaml | 6 ++++++ 6 files changed, 36 insertions(+) diff --git a/packages/image_picker/image_picker_for_web/example/pubspec.yaml b/packages/image_picker/image_picker_for_web/example/pubspec.yaml index a3de0f55dcf..b5386cf3517 100644 --- a/packages/image_picker/image_picker_for_web/example/pubspec.yaml +++ b/packages/image_picker/image_picker_for_web/example/pubspec.yaml @@ -20,3 +20,9 @@ dev_dependencies: integration_test: sdk: flutter js: ^0.6.3 + + +# FOR TESTING ONLY. DO NOT MERGE. +dependency_overrides: + image_picker_platform_interface: + path: ../../../image_picker/image_picker_platform_interface diff --git a/packages/image_picker/image_picker_for_web/pubspec.yaml b/packages/image_picker/image_picker_for_web/pubspec.yaml index 7e49f53253d..11c7c1777ac 100644 --- a/packages/image_picker/image_picker_for_web/pubspec.yaml +++ b/packages/image_picker/image_picker_for_web/pubspec.yaml @@ -26,3 +26,9 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter + + +# FOR TESTING ONLY. DO NOT MERGE. +dependency_overrides: + image_picker_platform_interface: + path: ../../image_picker/image_picker_platform_interface diff --git a/packages/image_picker/image_picker_ios/example/pubspec.yaml b/packages/image_picker/image_picker_ios/example/pubspec.yaml index 11353d8bb48..0c2715257cc 100755 --- a/packages/image_picker/image_picker_ios/example/pubspec.yaml +++ b/packages/image_picker/image_picker_ios/example/pubspec.yaml @@ -29,3 +29,9 @@ dev_dependencies: flutter: uses-material-design: true + + +# FOR TESTING ONLY. DO NOT MERGE. +dependency_overrides: + image_picker_platform_interface: + path: ../../../image_picker/image_picker_platform_interface diff --git a/packages/image_picker/image_picker_ios/pubspec.yaml b/packages/image_picker/image_picker_ios/pubspec.yaml index e0a0bbd9879..6a631984b8c 100755 --- a/packages/image_picker/image_picker_ios/pubspec.yaml +++ b/packages/image_picker/image_picker_ios/pubspec.yaml @@ -26,3 +26,9 @@ dev_dependencies: sdk: flutter mockito: ^5.0.0 pigeon: ^3.0.2 + + +# FOR TESTING ONLY. DO NOT MERGE. +dependency_overrides: + image_picker_platform_interface: + path: ../../image_picker/image_picker_platform_interface diff --git a/packages/image_picker/image_picker_windows/example/pubspec.yaml b/packages/image_picker/image_picker_windows/example/pubspec.yaml index 4130ec84ff0..6a5263b9a8f 100644 --- a/packages/image_picker/image_picker_windows/example/pubspec.yaml +++ b/packages/image_picker/image_picker_windows/example/pubspec.yaml @@ -26,3 +26,9 @@ dev_dependencies: flutter: uses-material-design: true + + +# FOR TESTING ONLY. DO NOT MERGE. +dependency_overrides: + image_picker_platform_interface: + path: ../../../image_picker/image_picker_platform_interface diff --git a/packages/image_picker/image_picker_windows/pubspec.yaml b/packages/image_picker/image_picker_windows/pubspec.yaml index bd776bfb1ea..e0035f713e4 100644 --- a/packages/image_picker/image_picker_windows/pubspec.yaml +++ b/packages/image_picker/image_picker_windows/pubspec.yaml @@ -27,3 +27,9 @@ dev_dependencies: flutter_test: sdk: flutter mockito: ^5.0.16 + + +# FOR TESTING ONLY. DO NOT MERGE. +dependency_overrides: + image_picker_platform_interface: + path: ../../image_picker/image_picker_platform_interface From c542ccd6c897eef8c389390bde1917be6a301ea8 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Mon, 6 Mar 2023 18:04:34 -0800 Subject: [PATCH 06/20] doc coment --- .../image_picker_android/lib/image_picker_android.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/image_picker/image_picker_android/lib/image_picker_android.dart b/packages/image_picker/image_picker_android/lib/image_picker_android.dart index eca19ced6eb..97c981eb317 100644 --- a/packages/image_picker/image_picker_android/lib/image_picker_android.dart +++ b/packages/image_picker/image_picker_android/lib/image_picker_android.dart @@ -283,7 +283,7 @@ class ImagePickerAndroid extends ImagePickerPlatform { ); } - /// Set [ImagePickerPlatform] to use [AndroidPhotoPicker] + /// Set [ImagePickerAndroid] to use Android 13 Photo Picker. /// /// Currently defaults to false, but the default is subject to change. bool useAndroidPhotoPicker = false; From b79cbd05a639807842ae82f50c11bc955b53a1f0 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Mon, 6 Mar 2023 18:26:37 -0800 Subject: [PATCH 07/20] update android tests --- .../image_picker/lib/image_picker.dart | 4 +-- .../test/image_picker_android_test.dart | 33 +++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/packages/image_picker/image_picker/lib/image_picker.dart b/packages/image_picker/image_picker/lib/image_picker.dart index 53fe86f539c..9509c76a558 100755 --- a/packages/image_picker/image_picker/lib/image_picker.dart +++ b/packages/image_picker/image_picker/lib/image_picker.dart @@ -358,7 +358,7 @@ class ImagePicker { class AndroidImagePicker { AndroidImagePicker._(); - /// Whether to select images with the Android 13 Photo Picker. + /// Whether to select media with the Android 13 Photo Picker. /// /// The Android 13 Photo Picker does not support cloud file selection. static bool get useAndroidPhotoPicker { @@ -369,7 +369,7 @@ class AndroidImagePicker { return false; } - /// Set whether to select images with the Android 13 Photo Picker. + /// Set whether to select media with the Android 13 Photo Picker. static set useAndroidPhotoPicker(bool useAndroidPhotoPicker) { final ImagePickerPlatform platform = ImagePickerPlatform.instance; if (platform is ImagePickerAndroid) { diff --git a/packages/image_picker/image_picker_android/test/image_picker_android_test.dart b/packages/image_picker/image_picker_android/test/image_picker_android_test.dart index d6680ce44dd..b68b7fe35e8 100644 --- a/packages/image_picker/image_picker_android/test/image_picker_android_test.dart +++ b/packages/image_picker/image_picker_android/test/image_picker_android_test.dart @@ -49,6 +49,7 @@ void main() { 'imageQuality': null, 'cameraDevice': 0, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickImage', arguments: { 'source': 1, @@ -57,6 +58,7 @@ void main() { 'imageQuality': null, 'cameraDevice': 0, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), ], ); @@ -104,6 +106,7 @@ void main() { 'imageQuality': null, 'cameraDevice': 0, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickImage', arguments: { 'source': 0, @@ -112,6 +115,7 @@ void main() { 'imageQuality': null, 'cameraDevice': 0, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickImage', arguments: { 'source': 0, @@ -120,6 +124,7 @@ void main() { 'imageQuality': null, 'cameraDevice': 0, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickImage', arguments: { 'source': 0, @@ -128,6 +133,7 @@ void main() { 'imageQuality': null, 'cameraDevice': 0, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickImage', arguments: { 'source': 0, @@ -136,6 +142,7 @@ void main() { 'imageQuality': 70, 'cameraDevice': 0, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickImage', arguments: { 'source': 0, @@ -144,6 +151,7 @@ void main() { 'imageQuality': 70, 'cameraDevice': 0, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickImage', arguments: { 'source': 0, @@ -152,6 +160,7 @@ void main() { 'imageQuality': 70, 'cameraDevice': 0, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), ], ); @@ -214,6 +223,7 @@ void main() { 'imageQuality': null, 'cameraDevice': 0, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), ], ); @@ -234,6 +244,7 @@ void main() { 'imageQuality': null, 'cameraDevice': 1, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), ], ); @@ -546,6 +557,7 @@ void main() { 'imageQuality': null, 'cameraDevice': 0, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickImage', arguments: { 'source': 1, @@ -554,6 +566,7 @@ void main() { 'imageQuality': null, 'cameraDevice': 0, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), ], ); @@ -601,6 +614,7 @@ void main() { 'imageQuality': null, 'cameraDevice': 0, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickImage', arguments: { 'source': 0, @@ -609,6 +623,7 @@ void main() { 'imageQuality': null, 'cameraDevice': 0, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickImage', arguments: { 'source': 0, @@ -617,6 +632,7 @@ void main() { 'imageQuality': null, 'cameraDevice': 0, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickImage', arguments: { 'source': 0, @@ -625,6 +641,7 @@ void main() { 'imageQuality': null, 'cameraDevice': 0, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickImage', arguments: { 'source': 0, @@ -633,6 +650,7 @@ void main() { 'imageQuality': 70, 'cameraDevice': 0, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickImage', arguments: { 'source': 0, @@ -641,6 +659,7 @@ void main() { 'imageQuality': 70, 'cameraDevice': 0, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickImage', arguments: { 'source': 0, @@ -649,6 +668,7 @@ void main() { 'imageQuality': 70, 'cameraDevice': 0, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), ], ); @@ -711,6 +731,7 @@ void main() { 'imageQuality': null, 'cameraDevice': 0, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), ], ); @@ -731,6 +752,7 @@ void main() { 'imageQuality': null, 'cameraDevice': 1, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), ], ); @@ -1062,6 +1084,7 @@ void main() { 'imageQuality': null, 'cameraDevice': 0, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickImage', arguments: { 'source': 1, @@ -1070,6 +1093,7 @@ void main() { 'imageQuality': null, 'cameraDevice': 0, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), ], ); @@ -1125,6 +1149,7 @@ void main() { 'imageQuality': null, 'cameraDevice': 0, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickImage', arguments: { 'source': 0, @@ -1133,6 +1158,7 @@ void main() { 'imageQuality': null, 'cameraDevice': 0, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickImage', arguments: { 'source': 0, @@ -1141,6 +1167,7 @@ void main() { 'imageQuality': null, 'cameraDevice': 0, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickImage', arguments: { 'source': 0, @@ -1149,6 +1176,7 @@ void main() { 'imageQuality': null, 'cameraDevice': 0, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickImage', arguments: { 'source': 0, @@ -1157,6 +1185,7 @@ void main() { 'imageQuality': 70, 'cameraDevice': 0, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickImage', arguments: { 'source': 0, @@ -1165,6 +1194,7 @@ void main() { 'imageQuality': 70, 'cameraDevice': 0, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickImage', arguments: { 'source': 0, @@ -1173,6 +1203,7 @@ void main() { 'imageQuality': 70, 'cameraDevice': 0, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), ], ); @@ -1278,6 +1309,7 @@ void main() { 'imageQuality': null, 'cameraDevice': 1, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), ], ); @@ -1299,6 +1331,7 @@ void main() { 'imageQuality': null, 'cameraDevice': 0, 'requestFullMetadata': false, + 'useAndroidPhotoPicker': false, }), ], ); From f4c4ba9ee92a34c7683790f6abe4e9e3be41a814 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Mon, 6 Mar 2023 18:32:03 -0800 Subject: [PATCH 08/20] update example to use photo picker --- .../image_picker/image_picker_android/example/lib/main.dart | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/image_picker/image_picker_android/example/lib/main.dart b/packages/image_picker/image_picker_android/example/lib/main.dart index 2e5b2e5cbd8..6d33d4c2da7 100755 --- a/packages/image_picker/image_picker_android/example/lib/main.dart +++ b/packages/image_picker/image_picker_android/example/lib/main.dart @@ -10,6 +10,7 @@ import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_driver/driver_extension.dart'; +import 'package:image_picker_android/image_picker_android.dart'; import 'package:image_picker_platform_interface/image_picker_platform_interface.dart'; import 'package:video_player/video_player.dart'; @@ -19,6 +20,9 @@ void appMain() { } void main() { + final ImagePickerPlatform platform = ImagePickerPlatform.instance; + // Set to use Android Photo Picker. + (platform as ImagePickerAndroid).useAndroidPhotoPicker = true; runApp(const MyApp()); } From 6628da874b91ac178fc18a01d22f2424ebb8eaf4 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Tue, 7 Mar 2023 17:00:26 -0800 Subject: [PATCH 09/20] remove unneeded wrapper and pubspec ignores --- .../image_picker/image_picker/CHANGELOG.md | 3 +-- .../image_picker/lib/image_picker.dart | 25 ------------------- .../image_picker/image_picker/pubspec.yaml | 10 +------- .../image_picker_android/CHANGELOG.md | 2 +- .../image_picker_android/example/pubspec.yaml | 8 ------ .../image_picker_android/pubspec.yaml | 8 +----- .../image_picker_for_web/example/pubspec.yaml | 6 ----- .../image_picker_for_web/pubspec.yaml | 6 ----- .../image_picker_ios/example/pubspec.yaml | 6 ----- .../image_picker_ios/pubspec.yaml | 6 ----- .../image_picker_windows/example/pubspec.yaml | 6 ----- .../image_picker_windows/pubspec.yaml | 6 ----- 12 files changed, 4 insertions(+), 88 deletions(-) diff --git a/packages/image_picker/image_picker/CHANGELOG.md b/packages/image_picker/image_picker/CHANGELOG.md index 3ea39a065e2..7969e21c856 100644 --- a/packages/image_picker/image_picker/CHANGELOG.md +++ b/packages/image_picker/image_picker/CHANGELOG.md @@ -1,6 +1,5 @@ -## 0.8.6+5 +## NEXT -* Adds `usePhotoPickerAndroid` options. * Aligns Dart and Flutter SDK constraints. ## 0.8.6+4 diff --git a/packages/image_picker/image_picker/lib/image_picker.dart b/packages/image_picker/image_picker/lib/image_picker.dart index 9509c76a558..2e266ccd5a5 100755 --- a/packages/image_picker/image_picker/lib/image_picker.dart +++ b/packages/image_picker/image_picker/lib/image_picker.dart @@ -4,7 +4,6 @@ import 'dart:async'; import 'package:flutter/foundation.dart'; -import 'package:image_picker_android/image_picker_android.dart'; import 'package:image_picker_platform_interface/image_picker_platform_interface.dart'; export 'package:image_picker_platform_interface/image_picker_platform_interface.dart' @@ -353,27 +352,3 @@ class ImagePicker { return platform.getLostData(); } } - -/// Android specific settings for [ImagePicker]. -class AndroidImagePicker { - AndroidImagePicker._(); - - /// Whether to select media with the Android 13 Photo Picker. - /// - /// The Android 13 Photo Picker does not support cloud file selection. - static bool get useAndroidPhotoPicker { - final ImagePickerPlatform platform = ImagePickerPlatform.instance; - if (platform is ImagePickerAndroid) { - return platform.useAndroidPhotoPicker; - } - return false; - } - - /// Set whether to select media with the Android 13 Photo Picker. - static set useAndroidPhotoPicker(bool useAndroidPhotoPicker) { - final ImagePickerPlatform platform = ImagePickerPlatform.instance; - if (platform is ImagePickerAndroid) { - platform.useAndroidPhotoPicker = useAndroidPhotoPicker; - } - } -} diff --git a/packages/image_picker/image_picker/pubspec.yaml b/packages/image_picker/image_picker/pubspec.yaml index 4eb7483a71b..86a8280e06b 100755 --- a/packages/image_picker/image_picker/pubspec.yaml +++ b/packages/image_picker/image_picker/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for selecting images from the Android and iOS image library, and taking new pictures with the camera. repository: https://github.com/flutter/packages/tree/main/packages/image_picker/image_picker issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+image_picker%22 -version: 0.8.6+5 +version: 0.8.6+4 environment: sdk: ">=2.17.0 <3.0.0" @@ -34,11 +34,3 @@ dev_dependencies: sdk: flutter mockito: ^5.0.0 plugin_platform_interface: ^2.0.0 - - -# FOR TESTING ONLY. DO NOT MERGE. -dependency_overrides: - image_picker_android: - path: ../../image_picker/image_picker_android - image_picker_platform_interface: - path: ../../image_picker/image_picker_platform_interface diff --git a/packages/image_picker/image_picker_android/CHANGELOG.md b/packages/image_picker/image_picker_android/CHANGELOG.md index 643d2f661a6..db6f3bfa46a 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.6+10 +## 0.8.6 * Adds `usePhotoPickerAndroid` options. * Aligns Dart and Flutter SDK constraints. diff --git a/packages/image_picker/image_picker_android/example/pubspec.yaml b/packages/image_picker/image_picker_android/example/pubspec.yaml index 113c7e9fadb..5b0f3e09774 100755 --- a/packages/image_picker/image_picker_android/example/pubspec.yaml +++ b/packages/image_picker/image_picker_android/example/pubspec.yaml @@ -31,11 +31,3 @@ dev_dependencies: flutter: uses-material-design: true - - -# FOR TESTING ONLY. DO NOT MERGE. -dependency_overrides: - image_picker_android: - path: ../../../image_picker/image_picker_android - image_picker_platform_interface: - path: ../../../image_picker/image_picker_platform_interface diff --git a/packages/image_picker/image_picker_android/pubspec.yaml b/packages/image_picker/image_picker_android/pubspec.yaml index 18b6878b77c..1c22e9c9366 100755 --- a/packages/image_picker/image_picker_android/pubspec.yaml +++ b/packages/image_picker/image_picker_android/pubspec.yaml @@ -3,7 +3,7 @@ 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.5+10 +version: 0.8.6 environment: sdk: ">=2.17.0 <3.0.0" @@ -28,9 +28,3 @@ dev_dependencies: flutter_test: sdk: flutter mockito: ^5.0.0 - - -# FOR TESTING ONLY. DO NOT MERGE. -dependency_overrides: - image_picker_platform_interface: - path: ../../image_picker/image_picker_platform_interface diff --git a/packages/image_picker/image_picker_for_web/example/pubspec.yaml b/packages/image_picker/image_picker_for_web/example/pubspec.yaml index b5386cf3517..a3de0f55dcf 100644 --- a/packages/image_picker/image_picker_for_web/example/pubspec.yaml +++ b/packages/image_picker/image_picker_for_web/example/pubspec.yaml @@ -20,9 +20,3 @@ dev_dependencies: integration_test: sdk: flutter js: ^0.6.3 - - -# FOR TESTING ONLY. DO NOT MERGE. -dependency_overrides: - image_picker_platform_interface: - path: ../../../image_picker/image_picker_platform_interface diff --git a/packages/image_picker/image_picker_for_web/pubspec.yaml b/packages/image_picker/image_picker_for_web/pubspec.yaml index 11c7c1777ac..7e49f53253d 100644 --- a/packages/image_picker/image_picker_for_web/pubspec.yaml +++ b/packages/image_picker/image_picker_for_web/pubspec.yaml @@ -26,9 +26,3 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - - -# FOR TESTING ONLY. DO NOT MERGE. -dependency_overrides: - image_picker_platform_interface: - path: ../../image_picker/image_picker_platform_interface diff --git a/packages/image_picker/image_picker_ios/example/pubspec.yaml b/packages/image_picker/image_picker_ios/example/pubspec.yaml index 0c2715257cc..11353d8bb48 100755 --- a/packages/image_picker/image_picker_ios/example/pubspec.yaml +++ b/packages/image_picker/image_picker_ios/example/pubspec.yaml @@ -29,9 +29,3 @@ dev_dependencies: flutter: uses-material-design: true - - -# FOR TESTING ONLY. DO NOT MERGE. -dependency_overrides: - image_picker_platform_interface: - path: ../../../image_picker/image_picker_platform_interface diff --git a/packages/image_picker/image_picker_ios/pubspec.yaml b/packages/image_picker/image_picker_ios/pubspec.yaml index 6a631984b8c..e0a0bbd9879 100755 --- a/packages/image_picker/image_picker_ios/pubspec.yaml +++ b/packages/image_picker/image_picker_ios/pubspec.yaml @@ -26,9 +26,3 @@ dev_dependencies: sdk: flutter mockito: ^5.0.0 pigeon: ^3.0.2 - - -# FOR TESTING ONLY. DO NOT MERGE. -dependency_overrides: - image_picker_platform_interface: - path: ../../image_picker/image_picker_platform_interface diff --git a/packages/image_picker/image_picker_windows/example/pubspec.yaml b/packages/image_picker/image_picker_windows/example/pubspec.yaml index 6a5263b9a8f..4130ec84ff0 100644 --- a/packages/image_picker/image_picker_windows/example/pubspec.yaml +++ b/packages/image_picker/image_picker_windows/example/pubspec.yaml @@ -26,9 +26,3 @@ dev_dependencies: flutter: uses-material-design: true - - -# FOR TESTING ONLY. DO NOT MERGE. -dependency_overrides: - image_picker_platform_interface: - path: ../../../image_picker/image_picker_platform_interface diff --git a/packages/image_picker/image_picker_windows/pubspec.yaml b/packages/image_picker/image_picker_windows/pubspec.yaml index e0035f713e4..bd776bfb1ea 100644 --- a/packages/image_picker/image_picker_windows/pubspec.yaml +++ b/packages/image_picker/image_picker_windows/pubspec.yaml @@ -27,9 +27,3 @@ dev_dependencies: flutter_test: sdk: flutter mockito: ^5.0.16 - - -# FOR TESTING ONLY. DO NOT MERGE. -dependency_overrides: - image_picker_platform_interface: - path: ../../image_picker/image_picker_platform_interface From 4b923d2f750b8ee623bd03601e54fbdebce0f538 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Tue, 7 Mar 2023 17:14:24 -0800 Subject: [PATCH 10/20] Update README's --- packages/image_picker/image_picker/README.md | 5 +++++ packages/image_picker/image_picker_android/README.md | 11 +++++++++++ 2 files changed, 16 insertions(+) diff --git a/packages/image_picker/image_picker/README.md b/packages/image_picker/image_picker/README.md index 6c886f0c653..bc68d557e10 100755 --- a/packages/image_picker/image_picker/README.md +++ b/packages/image_picker/image_picker/README.md @@ -93,6 +93,11 @@ case. Please refer to the [example app](https://pub.dev/packages/image_picker/example) for a more complete example of handling this flow. +### Android Photo Picker + +This package has optional Android Photo Picker functionality. +[Learn how to use it](https://pub.dev/packages/image_picker_android). + ## Migrating to 0.8.2+ Starting with version **0.8.2** of the image_picker plugin, new methods have been added for picking files that return `XFile` instances (from the [cross_file](https://pub.dev/packages/cross_file) package) rather than the plugin's own `PickedFile` instances. While the previous methods still exist, it is already recommended to start migrating over to their new equivalents. Eventually, `PickedFile` and the methods that return instances of it will be deprecated and removed. diff --git a/packages/image_picker/image_picker_android/README.md b/packages/image_picker/image_picker_android/README.md index 43d08c2a8b3..fb17ac64188 100755 --- a/packages/image_picker/image_picker_android/README.md +++ b/packages/image_picker/image_picker_android/README.md @@ -7,5 +7,16 @@ The Android implementation of [`image_picker`][1]. This package is [endorsed][2], which means you can simply use `image_picker` normally. This package will be automatically included in your app when you do. +## Photo Picker + +This package has optional Android Photo Picker functionality. + +To use this feature, add these lines to your Flutter app: + +``` + final ImagePickerPlatform platform = ImagePickerPlatform.instance; + (platform as ImagePickerAndroid).useAndroidPhotoPicker = true; +``` + [1]: https://pub.dev/packages/image_picker [2]: https://flutter.dev/docs/development/packages-and-plugins/developing-packages#endorsed-federated-plugin From b97de01e37fee833eaa8e31457ec064842e71903 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Tue, 7 Mar 2023 17:23:18 -0800 Subject: [PATCH 11/20] missed test --- .../image_picker_android/test/image_picker_android_test.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/image_picker/image_picker_android/test/image_picker_android_test.dart b/packages/image_picker/image_picker_android/test/image_picker_android_test.dart index b68b7fe35e8..98fa4a8e42e 100644 --- a/packages/image_picker/image_picker_android/test/image_picker_android_test.dart +++ b/packages/image_picker/image_picker_android/test/image_picker_android_test.dart @@ -1286,6 +1286,7 @@ void main() { 'imageQuality': null, 'cameraDevice': 0, 'requestFullMetadata': true, + 'useAndroidPhotoPicker': false, }), ], ); From 67f7bb3f5fe50fd1c6551072b91c12fe114d02ce Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Tue, 7 Mar 2023 17:32:45 -0800 Subject: [PATCH 12/20] more tests --- .../test/image_picker_android_test.dart | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/packages/image_picker/image_picker_android/test/image_picker_android_test.dart b/packages/image_picker/image_picker_android/test/image_picker_android_test.dart index 98fa4a8e42e..d832c4c3d8b 100644 --- a/packages/image_picker/image_picker_android/test/image_picker_android_test.dart +++ b/packages/image_picker/image_picker_android/test/image_picker_android_test.dart @@ -386,11 +386,13 @@ void main() { 'source': 0, 'cameraDevice': 0, 'maxDuration': null, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickVideo', arguments: { 'source': 1, 'cameraDevice': 0, 'maxDuration': null, + 'useAndroidPhotoPicker': false, }), ], ); @@ -417,21 +419,25 @@ void main() { 'source': 0, 'maxDuration': null, 'cameraDevice': 0, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickVideo', arguments: { 'source': 0, 'maxDuration': 10, 'cameraDevice': 0, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickVideo', arguments: { 'source': 0, 'maxDuration': 60, 'cameraDevice': 0, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickVideo', arguments: { 'source': 0, 'maxDuration': 3600, 'cameraDevice': 0, + 'useAndroidPhotoPicker': false, }), ], ); @@ -457,6 +463,7 @@ void main() { 'source': 0, 'cameraDevice': 0, 'maxDuration': null, + 'useAndroidPhotoPicker': false, }), ], ); @@ -475,6 +482,7 @@ void main() { 'source': 0, 'maxDuration': null, 'cameraDevice': 1, + 'useAndroidPhotoPicker': false, }), ], ); @@ -894,11 +902,13 @@ void main() { 'source': 0, 'cameraDevice': 0, 'maxDuration': null, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickVideo', arguments: { 'source': 1, 'cameraDevice': 0, 'maxDuration': null, + 'useAndroidPhotoPicker': false, }), ], ); @@ -925,21 +935,25 @@ void main() { 'source': 0, 'maxDuration': null, 'cameraDevice': 0, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickVideo', arguments: { 'source': 0, 'maxDuration': 10, 'cameraDevice': 0, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickVideo', arguments: { 'source': 0, 'maxDuration': 60, 'cameraDevice': 0, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickVideo', arguments: { 'source': 0, 'maxDuration': 3600, 'cameraDevice': 0, + 'useAndroidPhotoPicker': false, }), ], ); @@ -965,6 +979,7 @@ void main() { 'source': 0, 'cameraDevice': 0, 'maxDuration': null, + 'useAndroidPhotoPicker': false, }), ], ); @@ -983,6 +998,7 @@ void main() { 'source': 0, 'maxDuration': null, 'cameraDevice': 1, + 'useAndroidPhotoPicker': false, }), ], ); From 0e010e259e8ee5d91b9a1276d3d4ab585fc773ba Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Tue, 7 Mar 2023 17:39:45 -0800 Subject: [PATCH 13/20] last? tests --- .../test/image_picker_android_test.dart | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/packages/image_picker/image_picker_android/test/image_picker_android_test.dart b/packages/image_picker/image_picker_android/test/image_picker_android_test.dart index d832c4c3d8b..4c9d31ae2b9 100644 --- a/packages/image_picker/image_picker_android/test/image_picker_android_test.dart +++ b/packages/image_picker/image_picker_android/test/image_picker_android_test.dart @@ -263,6 +263,7 @@ void main() { 'maxWidth': null, 'maxHeight': null, 'imageQuality': null, + 'useAndroidPhotoPicker': false, }), ], ); @@ -302,36 +303,43 @@ void main() { 'maxWidth': null, 'maxHeight': null, 'imageQuality': null, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickMultiImage', arguments: { 'maxWidth': 10.0, 'maxHeight': null, 'imageQuality': null, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickMultiImage', arguments: { 'maxWidth': null, 'maxHeight': 10.0, 'imageQuality': null, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickMultiImage', arguments: { 'maxWidth': 10.0, 'maxHeight': 20.0, 'imageQuality': null, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickMultiImage', arguments: { 'maxWidth': 10.0, 'maxHeight': null, 'imageQuality': 70, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickMultiImage', arguments: { 'maxWidth': null, 'maxHeight': 10.0, 'imageQuality': 70, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickMultiImage', arguments: { 'maxWidth': 10.0, 'maxHeight': 20.0, 'imageQuality': 70, + 'useAndroidPhotoPicker': false, }), ], ); @@ -779,6 +787,7 @@ void main() { 'maxWidth': null, 'maxHeight': null, 'imageQuality': null, + 'useAndroidPhotoPicker': false, }), ], ); @@ -818,36 +827,43 @@ void main() { 'maxWidth': null, 'maxHeight': null, 'imageQuality': null, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickMultiImage', arguments: { 'maxWidth': 10.0, 'maxHeight': null, 'imageQuality': null, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickMultiImage', arguments: { 'maxWidth': null, 'maxHeight': 10.0, 'imageQuality': null, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickMultiImage', arguments: { 'maxWidth': 10.0, 'maxHeight': 20.0, 'imageQuality': null, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickMultiImage', arguments: { 'maxWidth': 10.0, 'maxHeight': null, 'imageQuality': 70, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickMultiImage', arguments: { 'maxWidth': null, 'maxHeight': 10.0, 'imageQuality': 70, + 'useAndroidPhotoPicker': false, }), isMethodCall('pickMultiImage', arguments: { 'maxWidth': 10.0, 'maxHeight': 20.0, 'imageQuality': 70, + 'useAndroidPhotoPicker': false, }), ], ); From de1a492d1e9b02300bf78c4b8a52acb7f0abbde7 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Tue, 7 Mar 2023 17:49:11 -0800 Subject: [PATCH 14/20] missed dart --- packages/image_picker/image_picker_android/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/image_picker/image_picker_android/README.md b/packages/image_picker/image_picker_android/README.md index fb17ac64188..a8ee750511a 100755 --- a/packages/image_picker/image_picker_android/README.md +++ b/packages/image_picker/image_picker_android/README.md @@ -13,7 +13,7 @@ This package has optional Android Photo Picker functionality. To use this feature, add these lines to your Flutter app: -``` +```dart final ImagePickerPlatform platform = ImagePickerPlatform.instance; (platform as ImagePickerAndroid).useAndroidPhotoPicker = true; ``` From b2a2e5c4daac5c8d0b1f526c08556e748538ecee Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Tue, 7 Mar 2023 18:24:24 -0800 Subject: [PATCH 15/20] safer usePhotoPicker --- .../imagepicker/ImagePickerDelegate.java | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 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 6ae454b2bb3..c3f4b0ef3dc 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 @@ -252,7 +252,13 @@ public void chooseVideoFromGallery(MethodCall methodCall, MethodChannel.Result r return; } - launchPickVideoFromGalleryIntent(methodCall.argument("useAndroidPhotoPicker")); + Boolean usePhotoPicker = methodCall.argument("useAndroidPhotoPicker"); + + if (usePhotoPicker == null) { + usePhotoPicker = false; + } + + launchPickVideoFromGalleryIntent(usePhotoPicker); } private void launchPickVideoFromGalleryIntent(Boolean useAndroidPhotoPicker) { @@ -326,7 +332,13 @@ public void chooseImageFromGallery(MethodCall methodCall, MethodChannel.Result r return; } - launchPickImageFromGalleryIntent(methodCall.argument("useAndroidPhotoPicker")); + Boolean usePhotoPicker = methodCall.argument("useAndroidPhotoPicker"); + + if (usePhotoPicker == null) { + usePhotoPicker = false; + } + + launchPickImageFromGalleryIntent(usePhotoPicker); } public void chooseMultiImageFromGallery(MethodCall methodCall, MethodChannel.Result result) { @@ -335,7 +347,13 @@ public void chooseMultiImageFromGallery(MethodCall methodCall, MethodChannel.Res return; } - launchMultiPickImageFromGalleryIntent(methodCall.argument("useAndroidPhotoPicker")); + Boolean usePhotoPicker = methodCall.argument("useAndroidPhotoPicker"); + + if (usePhotoPicker == null) { + usePhotoPicker = false; + } + + launchMultiPickImageFromGalleryIntent(usePhotoPicker); } private void launchPickImageFromGalleryIntent(Boolean useAndroidPhotoPicker) { From a3929292f6264a927c2c15af5b5f81ff265b5edf Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Wed, 8 Mar 2023 01:22:43 -0800 Subject: [PATCH 16/20] format --- .../io/flutter/plugins/imagepicker/ImagePickerDelegate.java | 4 ++-- 1 file changed, 2 insertions(+), 2 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 c3f4b0ef3dc..8f89e05276c 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 @@ -348,11 +348,11 @@ public void chooseMultiImageFromGallery(MethodCall methodCall, MethodChannel.Res } Boolean usePhotoPicker = methodCall.argument("useAndroidPhotoPicker"); - + if (usePhotoPicker == null) { usePhotoPicker = false; } - + launchMultiPickImageFromGalleryIntent(usePhotoPicker); } From 5dfe33f8ad0bd35681da9bd0dff1b99621618b62 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Wed, 8 Mar 2023 04:09:16 -0800 Subject: [PATCH 17/20] code excerpts --- .../image_picker/image_picker_android/README.md | 7 +++++-- .../example/build.excerpt.yaml | 15 +++++++++++++++ .../image_picker_android/example/lib/main.dart | 4 +++- .../image_picker_android/example/pubspec.yaml | 1 + 4 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 packages/image_picker/image_picker_android/example/build.excerpt.yaml mode change 100755 => 100644 packages/image_picker/image_picker_android/example/pubspec.yaml diff --git a/packages/image_picker/image_picker_android/README.md b/packages/image_picker/image_picker_android/README.md index a8ee750511a..a1f2f723c9c 100755 --- a/packages/image_picker/image_picker_android/README.md +++ b/packages/image_picker/image_picker_android/README.md @@ -1,3 +1,5 @@ + + # image\_picker\_android The Android implementation of [`image_picker`][1]. @@ -13,9 +15,10 @@ This package has optional Android Photo Picker functionality. To use this feature, add these lines to your Flutter app: + ```dart - final ImagePickerPlatform platform = ImagePickerPlatform.instance; - (platform as ImagePickerAndroid).useAndroidPhotoPicker = true; +final ImagePickerPlatform platform = ImagePickerPlatform.instance; +(platform as ImagePickerAndroid).useAndroidPhotoPicker = true; ``` [1]: https://pub.dev/packages/image_picker diff --git a/packages/image_picker/image_picker_android/example/build.excerpt.yaml b/packages/image_picker/image_picker_android/example/build.excerpt.yaml new file mode 100644 index 00000000000..e317efa11cb --- /dev/null +++ b/packages/image_picker/image_picker_android/example/build.excerpt.yaml @@ -0,0 +1,15 @@ +targets: + $default: + sources: + include: + - lib/** + # Some default includes that aren't really used here but will prevent + # false-negative warnings: + - $package$ + - lib/$lib$ + exclude: + - '**/.*/**' + - '**/build/**' + builders: + code_excerpter|code_excerpter: + enabled: true diff --git a/packages/image_picker/image_picker_android/example/lib/main.dart b/packages/image_picker/image_picker_android/example/lib/main.dart index 6d33d4c2da7..0a4585dce52 100755 --- a/packages/image_picker/image_picker_android/example/lib/main.dart +++ b/packages/image_picker/image_picker_android/example/lib/main.dart @@ -20,9 +20,11 @@ void appMain() { } void main() { - final ImagePickerPlatform platform = ImagePickerPlatform.instance; // Set to use Android Photo Picker. + // #docregion photo-picker-example + final ImagePickerPlatform platform = ImagePickerPlatform.instance; (platform as ImagePickerAndroid).useAndroidPhotoPicker = true; + // #enddocregion photo-picker-example runApp(const MyApp()); } diff --git a/packages/image_picker/image_picker_android/example/pubspec.yaml b/packages/image_picker/image_picker_android/example/pubspec.yaml old mode 100755 new mode 100644 index 5b0f3e09774..52778a441eb --- a/packages/image_picker/image_picker_android/example/pubspec.yaml +++ b/packages/image_picker/image_picker_android/example/pubspec.yaml @@ -23,6 +23,7 @@ dependencies: video_player: ^2.1.4 dev_dependencies: + build_runner: ^2.1.10 espresso: ^0.2.0 flutter_test: sdk: flutter From d3450a143b0f0fad8dbe224774264cf503881144 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Wed, 8 Mar 2023 04:14:46 -0800 Subject: [PATCH 18/20] changelog --- packages/image_picker/image_picker/CHANGELOG.md | 3 ++- packages/image_picker/image_picker/pubspec.yaml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/image_picker/image_picker/CHANGELOG.md b/packages/image_picker/image_picker/CHANGELOG.md index 7969e21c856..fe845b3ab7a 100644 --- a/packages/image_picker/image_picker/CHANGELOG.md +++ b/packages/image_picker/image_picker/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 0.8.7 +* Adds `usePhotoPickerAndroid` options. * Aligns Dart and Flutter SDK constraints. ## 0.8.6+4 diff --git a/packages/image_picker/image_picker/pubspec.yaml b/packages/image_picker/image_picker/pubspec.yaml index 86a8280e06b..43c7ee3202b 100755 --- a/packages/image_picker/image_picker/pubspec.yaml +++ b/packages/image_picker/image_picker/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for selecting images from the Android and iOS image library, and taking new pictures with the camera. repository: https://github.com/flutter/packages/tree/main/packages/image_picker/image_picker issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+image_picker%22 -version: 0.8.6+4 +version: 0.8.7 environment: sdk: ">=2.17.0 <3.0.0" From 894fe96610636ec610077d151ec0ff2f73cb060f Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Wed, 8 Mar 2023 14:26:39 -0800 Subject: [PATCH 19/20] readme --- packages/image_picker/image_picker/README.md | 2 +- packages/image_picker/image_picker_android/README.md | 12 +++++++++--- .../image_picker_android/example/lib/main.dart | 9 +++++++-- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/packages/image_picker/image_picker/README.md b/packages/image_picker/image_picker/README.md index bc68d557e10..3d5a11a73ae 100755 --- a/packages/image_picker/image_picker/README.md +++ b/packages/image_picker/image_picker/README.md @@ -95,7 +95,7 @@ complete example of handling this flow. ### Android Photo Picker -This package has optional Android Photo Picker functionality. +This package has optional [Android Photo Picker](https://developer.android.com/training/data-storage/shared/photopicker) functionality. [Learn how to use it](https://pub.dev/packages/image_picker_android). ## Migrating to 0.8.2+ diff --git a/packages/image_picker/image_picker_android/README.md b/packages/image_picker/image_picker_android/README.md index a1f2f723c9c..a63f770ba98 100755 --- a/packages/image_picker/image_picker_android/README.md +++ b/packages/image_picker/image_picker_android/README.md @@ -13,12 +13,18 @@ normally. This package will be automatically included in your app when you do. This package has optional Android Photo Picker functionality. -To use this feature, add these lines to your Flutter app: +To use this feature, add the following code to your app before calling any `image_picker` APIs: ```dart -final ImagePickerPlatform platform = ImagePickerPlatform.instance; -(platform as ImagePickerAndroid).useAndroidPhotoPicker = true; +import 'package:image_picker_android/image_picker_android.dart'; +import 'package:image_picker_platform_interface/image_picker_platform_interface.dart'; +// ยทยทยท + final ImagePickerPlatform imagePickerImplementation = + ImagePickerPlatform.instance; + if (imagePickerImplementation is ImagePickerAndroid) { + imagePickerImplementation.useAndroidPhotoPicker = true; + } ``` [1]: https://pub.dev/packages/image_picker diff --git a/packages/image_picker/image_picker_android/example/lib/main.dart b/packages/image_picker/image_picker_android/example/lib/main.dart index 0a4585dce52..c456fb98dc1 100755 --- a/packages/image_picker/image_picker_android/example/lib/main.dart +++ b/packages/image_picker/image_picker_android/example/lib/main.dart @@ -10,8 +10,10 @@ import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_driver/driver_extension.dart'; +// #docregion photo-picker-example import 'package:image_picker_android/image_picker_android.dart'; import 'package:image_picker_platform_interface/image_picker_platform_interface.dart'; +// #enddocregion photo-picker-example import 'package:video_player/video_player.dart'; void appMain() { @@ -22,8 +24,11 @@ void appMain() { void main() { // Set to use Android Photo Picker. // #docregion photo-picker-example - final ImagePickerPlatform platform = ImagePickerPlatform.instance; - (platform as ImagePickerAndroid).useAndroidPhotoPicker = true; + final ImagePickerPlatform imagePickerImplementation = + ImagePickerPlatform.instance; + if (imagePickerImplementation is ImagePickerAndroid) { + imagePickerImplementation.useAndroidPhotoPicker = true; + } // #enddocregion photo-picker-example runApp(const MyApp()); } From 216d8ddb6e534f8935f601049a8116f2115d1464 Mon Sep 17 00:00:00 2001 From: tarrinneal Date: Wed, 8 Mar 2023 14:32:51 -0800 Subject: [PATCH 20/20] update new tests to use photo picker --- .../flutter/plugins/imagepicker/ImagePickerDelegateTest.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/image_picker/image_picker_android/android/src/test/java/io/flutter/plugins/imagepicker/ImagePickerDelegateTest.java b/packages/image_picker/image_picker_android/android/src/test/java/io/flutter/plugins/imagepicker/ImagePickerDelegateTest.java index 29302d90bff..f8fb4dbb241 100644 --- a/packages/image_picker/image_picker_android/android/src/test/java/io/flutter/plugins/imagepicker/ImagePickerDelegateTest.java +++ b/packages/image_picker/image_picker_android/android/src/test/java/io/flutter/plugins/imagepicker/ImagePickerDelegateTest.java @@ -162,6 +162,7 @@ public void chooseMultiImageFromGallery_WhenPendingResultExists_FinishesWithAlre chooseImageFromGallery_WithPhotoPicker_WhenHasExternalStoragePermission_LaunchesChooseFromGalleryIntent() { when(mockPermissionManager.isPermissionGranted(Manifest.permission.READ_EXTERNAL_STORAGE)) .thenReturn(true); + when(mockMethodCall.argument("useAndroidPhotoPicker")).thenReturn(true); ImagePickerDelegate delegate = createDelegate(); delegate.chooseImageFromGallery(mockMethodCall, mockResult); @@ -177,6 +178,7 @@ public void chooseMultiImageFromGallery_WhenPendingResultExists_FinishesWithAlre chooseMultiImageFromGallery_WhenHasExternalStoragePermission_LaunchesChooseFromGalleryIntent() { when(mockPermissionManager.isPermissionGranted(Manifest.permission.READ_EXTERNAL_STORAGE)) .thenReturn(true); + when(mockMethodCall.argument("useAndroidPhotoPicker")).thenReturn(true); ImagePickerDelegate delegate = createDelegate(); delegate.chooseMultiImageFromGallery(mockMethodCall, mockResult); @@ -193,6 +195,7 @@ public void chooseMultiImageFromGallery_WhenPendingResultExists_FinishesWithAlre chooseMultiImageFromGallery_WithPhotoPicker_WhenHasExternalStoragePermission_LaunchesChooseFromGalleryIntent() { when(mockPermissionManager.isPermissionGranted(Manifest.permission.READ_EXTERNAL_STORAGE)) .thenReturn(true); + when(mockMethodCall.argument("useAndroidPhotoPicker")).thenReturn(true); ImagePickerDelegate delegate = createDelegate(); delegate.chooseMultiImageFromGallery(mockMethodCall, mockResult); @@ -209,6 +212,7 @@ public void chooseMultiImageFromGallery_WhenPendingResultExists_FinishesWithAlre chooseVideoFromGallery_WhenHasExternalStoragePermission_LaunchesChooseFromGalleryIntent() { when(mockPermissionManager.isPermissionGranted(Manifest.permission.READ_EXTERNAL_STORAGE)) .thenReturn(true); + when(mockMethodCall.argument("useAndroidPhotoPicker")).thenReturn(true); ImagePickerDelegate delegate = createDelegate(); delegate.chooseVideoFromGallery(mockMethodCall, mockResult); @@ -224,6 +228,7 @@ public void chooseMultiImageFromGallery_WhenPendingResultExists_FinishesWithAlre chooseVideoFromGallery_WithPhotoPicker_WhenHasExternalStoragePermission_LaunchesChooseFromGalleryIntent() { when(mockPermissionManager.isPermissionGranted(Manifest.permission.READ_EXTERNAL_STORAGE)) .thenReturn(true); + when(mockMethodCall.argument("useAndroidPhotoPicker")).thenReturn(true); ImagePickerDelegate delegate = createDelegate(); delegate.chooseVideoFromGallery(mockMethodCall, mockResult);