From 56aaffe287155b4fbc0ceecd2af2cfe55e4ae952 Mon Sep 17 00:00:00 2001 From: mtz Date: Fri, 22 Nov 2024 12:50:53 -0300 Subject: [PATCH 1/3] fix allow compression --- CHANGELOG.md | 4 ++++ .../mr/flutter/plugin/filepicker/FilePickerDelegate.java | 8 +++++--- .../mr/flutter/plugin/filepicker/FilePickerPlugin.java | 4 +++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1999f9a9..12c36991 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 8.1.5 +### Android +- Fixes allowCompression not working on Android. [1633](https://github.com/miguelpruivo/flutter_file_picker/issues/1633) + ## 8.1.4 ### iOS - Fixes a crash when sometimes user swipe the modal down and call it again. [1357](https://github.com/miguelpruivo/flutter_file_picker/issues/1357) diff --git a/android/src/main/java/com/mr/flutter/plugin/filepicker/FilePickerDelegate.java b/android/src/main/java/com/mr/flutter/plugin/filepicker/FilePickerDelegate.java index f5554680..b435dbdf 100644 --- a/android/src/main/java/com/mr/flutter/plugin/filepicker/FilePickerDelegate.java +++ b/android/src/main/java/com/mr/flutter/plugin/filepicker/FilePickerDelegate.java @@ -42,6 +42,7 @@ public class FilePickerDelegate implements PluginRegistry.ActivityResultListener private boolean isMultipleSelection = false; private boolean loadDataToMemory = false; private String type; + private boolean allowCompression=true; private int compressionQuality=20; private String[] allowedExtensions; private EventChannel.EventSink eventSink; @@ -136,7 +137,7 @@ public void run() { while (currentItem < count) { Uri currentUri = data.getClipData().getItemAt(currentItem).getUri(); - if (Objects.equals(type, "image/*") && compressionQuality > 0) { + if (Objects.equals(type, "image/*") && allowCompression && compressionQuality > 0) { currentUri = FileUtils.compressImage(currentUri, compressionQuality, activity.getApplicationContext()); } final FileInfo file = FileUtils.openFileStream(FilePickerDelegate.this.activity, currentUri, loadDataToMemory); @@ -151,7 +152,7 @@ public void run() { } else if (data.getData() != null) { Uri uri = data.getData(); - if (Objects.equals(type, "image/*") && compressionQuality > 0) { + if (Objects.equals(type, "image/*") && allowCompression && compressionQuality > 0) { uri = FileUtils.compressImage(uri, compressionQuality, activity.getApplicationContext()); } @@ -308,7 +309,7 @@ private void startFileExplorer() { } @SuppressWarnings("deprecation") - public void startFileExplorer(final String type, final boolean isMultipleSelection, final boolean withData, final String[] allowedExtensions, final int compressionQuality, final MethodChannel.Result result) { + public void startFileExplorer(final String type, final boolean isMultipleSelection, final boolean withData, final String[] allowedExtensions, final boolean allowCompression, final int compressionQuality, final MethodChannel.Result result) { if (!this.setPendingMethodCallAndResult(result)) { finishWithAlreadyActiveError(result); @@ -319,6 +320,7 @@ public void startFileExplorer(final String type, final boolean isMultipleSelecti this.loadDataToMemory = withData; this.allowedExtensions = allowedExtensions; this.compressionQuality=compressionQuality; + this.allowCompression = allowCompression; // `READ_EXTERNAL_STORAGE` permission is not needed since SDK 33 (Android 13 or higher). // `READ_EXTERNAL_STORAGE` & `WRITE_EXTERNAL_STORAGE` are no longer meant to be used, but classified into granular types. // Reference: https://developer.android.com/about/versions/13/behavior-changes-13 diff --git a/android/src/main/java/com/mr/flutter/plugin/filepicker/FilePickerPlugin.java b/android/src/main/java/com/mr/flutter/plugin/filepicker/FilePickerPlugin.java index 614901fc..2f94230e 100644 --- a/android/src/main/java/com/mr/flutter/plugin/filepicker/FilePickerPlugin.java +++ b/android/src/main/java/com/mr/flutter/plugin/filepicker/FilePickerPlugin.java @@ -114,6 +114,7 @@ public void onActivityStopped(final Activity activity) { private static boolean isMultipleSelection = false; private static boolean withData = false; private static int compressionQuality; + private static boolean allowCompression; @SuppressWarnings("unchecked") @Override @@ -150,6 +151,7 @@ public void onMethodCall(final MethodCall call, final MethodChannel.Result rawRe } else if (fileType != "dir") { isMultipleSelection = (boolean) arguments.get("allowMultipleSelection"); withData = (boolean) arguments.get("withData"); + allowCompression = (boolean) arguments.get("allowCompression"); compressionQuality=(int) arguments.get("compressionQuality"); allowedExtensions = FileUtils.getMimeTypes((ArrayList) arguments.get("allowedExtensions")); } @@ -157,7 +159,7 @@ public void onMethodCall(final MethodCall call, final MethodChannel.Result rawRe if (call.method != null && call.method.equals("custom") && (allowedExtensions == null || allowedExtensions.length == 0)) { result.error(TAG, "Unsupported filter. Make sure that you are only using the extension without the dot, (ie., jpg instead of .jpg). This could also have happened because you are using an unsupported file extension. If the problem persists, you may want to consider using FileType.any instead.", null); } else { - this.delegate.startFileExplorer(fileType, isMultipleSelection, withData, allowedExtensions, compressionQuality,result); + this.delegate.startFileExplorer(fileType, isMultipleSelection, withData, allowedExtensions, allowCompression, compressionQuality,result); } } From afab058bb77c89173b39c9914c9dd56342996052 Mon Sep 17 00:00:00 2001 From: Navaron Bracke Date: Tue, 11 Feb 2025 13:46:24 +0100 Subject: [PATCH 2/3] Update android/src/main/java/com/mr/flutter/plugin/filepicker/FilePickerPlugin.java --- .../java/com/mr/flutter/plugin/filepicker/FilePickerPlugin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/src/main/java/com/mr/flutter/plugin/filepicker/FilePickerPlugin.java b/android/src/main/java/com/mr/flutter/plugin/filepicker/FilePickerPlugin.java index 1f7d50a0..adb8bf1e 100644 --- a/android/src/main/java/com/mr/flutter/plugin/filepicker/FilePickerPlugin.java +++ b/android/src/main/java/com/mr/flutter/plugin/filepicker/FilePickerPlugin.java @@ -159,7 +159,7 @@ public void onMethodCall(final MethodCall call, final MethodChannel.Result rawRe if (call.method != null && call.method.equals("custom") && (allowedExtensions == null || allowedExtensions.length == 0)) { result.error(TAG, "Unsupported filter. Make sure that you are only using the extension without the dot, (ie., jpg instead of .jpg). This could also have happened because you are using an unsupported file extension. If the problem persists, you may want to consider using FileType.any instead.", null); } else { - this.delegate.startFileExplorer(fileType, isMultipleSelection, withData, allowedExtensions, allowCompression, compressionQuality,result); + this.delegate.startFileExplorer(fileType, isMultipleSelection, withData, allowedExtensions, allowCompression, compressionQuality, result); } } From db5a738566aa7d18d6c1ad1676588cef9666215d Mon Sep 17 00:00:00 2001 From: Navaron Bracke Date: Tue, 11 Feb 2025 13:46:41 +0100 Subject: [PATCH 3/3] Update android/src/main/java/com/mr/flutter/plugin/filepicker/FilePickerDelegate.java --- .../com/mr/flutter/plugin/filepicker/FilePickerDelegate.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/src/main/java/com/mr/flutter/plugin/filepicker/FilePickerDelegate.java b/android/src/main/java/com/mr/flutter/plugin/filepicker/FilePickerDelegate.java index af807e8e..9212d8e1 100644 --- a/android/src/main/java/com/mr/flutter/plugin/filepicker/FilePickerDelegate.java +++ b/android/src/main/java/com/mr/flutter/plugin/filepicker/FilePickerDelegate.java @@ -41,7 +41,7 @@ public class FilePickerDelegate implements PluginRegistry.ActivityResultListener private boolean isMultipleSelection = false; private boolean loadDataToMemory = false; private String type; - private boolean allowCompression=true; + private boolean allowCompression = true; private int compressionQuality=20; private String[] allowedExtensions; private EventChannel.EventSink eventSink;