From 0d8c62b4f70b585ecf621a49a40790df22400b27 Mon Sep 17 00:00:00 2001 From: Miguel Ruivo Date: Wed, 5 Aug 2020 10:16:12 +0100 Subject: [PATCH] Fixes picking paths from Downloads directory on versions below SDK 29 --- file_picker/CHANGELOG.md | 3 +++ .../plugin/filepicker/FilePickerDelegate.java | 6 ++++++ file_picker/pubspec.yaml | 2 +- file_picker_web/lib/file_picker_web.dart | 19 +++++++++++++------ 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/file_picker/CHANGELOG.md b/file_picker/CHANGELOG.md index 9db2228..91a59a5 100644 --- a/file_picker/CHANGELOG.md +++ b/file_picker/CHANGELOG.md @@ -1,3 +1,6 @@ +## 1.13.2 +Android: fixes picking paths from Downloads directory on versions below Android Q. + ## 1.13.1 Android: adds support to non-legacy picking on Android Q or above (thank you @lakshyab1995). diff --git a/file_picker/android/src/main/java/com/mr/flutter/plugin/filepicker/FilePickerDelegate.java b/file_picker/android/src/main/java/com/mr/flutter/plugin/filepicker/FilePickerDelegate.java index e783e17..b89cdb8 100644 --- a/file_picker/android/src/main/java/com/mr/flutter/plugin/filepicker/FilePickerDelegate.java +++ b/file_picker/android/src/main/java/com/mr/flutter/plugin/filepicker/FilePickerDelegate.java @@ -92,6 +92,9 @@ public class FilePickerDelegate implements PluginRegistry.ActivityResultListener path = FileUtils.getUriFromRemote(FilePickerDelegate.this.activity, currentUri); } else { path = FileUtils.getPath(currentUri, FilePickerDelegate.this.activity); + if (path == null) { + path = FileUtils.getUriFromRemote(FilePickerDelegate.this.activity, currentUri); + } } paths.add(path); Log.i(FilePickerDelegate.TAG, "[MultiFilePick] File #" + currentItem + " - URI: " + currentUri.getPath()); @@ -115,6 +118,9 @@ public class FilePickerDelegate implements PluginRegistry.ActivityResultListener fullPath = type.equals("dir") ? FileUtils.getFullPathFromTreeUri(uri, activity) : FileUtils.getUriFromRemote(FilePickerDelegate.this.activity, uri); } else { fullPath = FileUtils.getPath(uri, FilePickerDelegate.this.activity); + if (fullPath == null) { + fullPath = type.equals("dir") ? FileUtils.getFullPathFromTreeUri(uri, activity) : FileUtils.getUriFromRemote(FilePickerDelegate.this.activity, uri); + } } if (fullPath != null) { diff --git a/file_picker/pubspec.yaml b/file_picker/pubspec.yaml index 3912adb..e004d40 100644 --- a/file_picker/pubspec.yaml +++ b/file_picker/pubspec.yaml @@ -1,7 +1,7 @@ name: file_picker description: A package that allows you to use a native file explorer to pick single or multiple absolute file paths, with extension filtering support. homepage: https://github.com/miguelpruivo/plugins_flutter_file_picker -version: 1.13.1 +version: 1.13.2 dependencies: flutter: diff --git a/file_picker_web/lib/file_picker_web.dart b/file_picker_web/lib/file_picker_web.dart index 6e6f72b..30bebe3 100644 --- a/file_picker_web/lib/file_picker_web.dart +++ b/file_picker_web/lib/file_picker_web.dart @@ -17,8 +17,10 @@ class FilePicker extends FilePickerPlatform { /// [allowedExtensions] can be used (eg. `[.jpg, .pdf]`) to restrict picking types /// /// Returns a `List` - static Future> getMultiFile({FileType type = FileType.any, List allowedExtensions}) async { - return await _instance.getFiles(type: type, allowMultiple: true, allowedExtensions: allowedExtensions); + static Future> getMultiFile( + {FileType type = FileType.any, List allowedExtensions}) async { + return await _instance.getFiles( + type: type, allowMultiple: true, allowedExtensions: allowedExtensions); } /// Opens browser file picker window to select a single file. @@ -26,8 +28,11 @@ class FilePicker extends FilePickerPlatform { /// [allowedExtensions] can be used (eg. `[.jpg, .pdf]`) to restrict picking types /// /// Returns a `html.File` - static Future getFile({FileType type = FileType.any, List allowedExtensions}) async { - return (await _instance.getFiles(type: type, allowedExtensions: allowedExtensions)).first; + static Future getFile( + {FileType type = FileType.any, List allowedExtensions}) async { + return (await _instance.getFiles( + type: type, allowedExtensions: allowedExtensions)) + .first; } @override @@ -41,7 +46,8 @@ class FilePicker extends FilePickerPlatform { html.InputElement uploadInput = html.FileUploadInputElement(); uploadInput.multiple = allowMultiple; uploadInput.accept = _fileType(type, allowedExtensions); - uploadInput.onChange.listen((event) => pickedFiles.complete(uploadInput.files)); + uploadInput.onChange + .listen((event) => pickedFiles.complete(uploadInput.files)); uploadInput.click(); return await pickedFiles.future; } @@ -64,7 +70,8 @@ class FilePicker extends FilePickerPlatform { return 'video/*|image/*'; case FileType.custom: - return allowedExtensions.fold('', (prev, next) => '${prev.isEmpty ? '' : '$prev,'} .$next'); + return allowedExtensions.fold( + '', (prev, next) => '${prev.isEmpty ? '' : '$prev,'} .$next'); break; } return '';