From 815a29628e3567bbac44f691991ec3faf7a42cce Mon Sep 17 00:00:00 2001 From: BrutalBunny <83494219+BrutalBunny@users.noreply.github.com> Date: Sat, 23 Sep 2023 14:05:07 +0200 Subject: [PATCH 1/3] Update plugin.xml Change permissions for Android 13 --- plugin.xml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/plugin.xml b/plugin.xml index fabb16d..dbda8cc 100644 --- a/plugin.xml +++ b/plugin.xml @@ -30,10 +30,15 @@ - - - + + + + + + + + From 8fcbe6e59fd4147cc8deb6331a94bb3e13f5ca46 Mon Sep 17 00:00:00 2001 From: BrutalBunny <83494219+BrutalBunny@users.noreply.github.com> Date: Sat, 23 Sep 2023 14:09:06 +0200 Subject: [PATCH 2/3] Update FilePickerPlugin.java Support for Android 13 --- src/android/FilePickerPlugin.java | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/src/android/FilePickerPlugin.java b/src/android/FilePickerPlugin.java index 9807841..b5ceace 100644 --- a/src/android/FilePickerPlugin.java +++ b/src/android/FilePickerPlugin.java @@ -29,6 +29,7 @@ import android.content.ClipData; import android.content.Intent; import android.content.pm.PackageManager; +import android.os.Build; import android.os.Bundle; import android.util.Log; @@ -36,7 +37,8 @@ public class FilePickerPlugin extends CordovaPlugin { private static final String TAG = "FILE"; //PERMISSION REQUEST CODE - private static final int WRITE_PERMISSION_REQUEST_CODE = 1000; + private static final int REQUEST_CODE_READ_MEDIA = 1001; + private static final int REQUEST_CODE_READ_EXTERNAL_STORAGE = 1002; //ACTIVITY REQUEST CODE private static final int FILE_REQUEST_CODE = 1000; @@ -88,6 +90,7 @@ public boolean execute(String action, JSONArray args, CallbackContext callbackCo if ("selectFiles".equals(action)) { JSONObject options = args.getJSONObject(0); String type = options.getString("type"); + if ("IMAGE".equals(type)) { this.mimeType = "image/*"; } else if ("VIDEO".equals(type)) { @@ -97,12 +100,26 @@ public boolean execute(String action, JSONArray args, CallbackContext callbackCo } else { this.mimeType = "*/*"; } + this.multiple = options.getBoolean("multiple"); this.mCallbackContext = callbackContext; - if (!this.cordova.hasPermission(Manifest.permission.READ_EXTERNAL_STORAGE)) { - this.cordova.requestPermission(this, 0, Manifest.permission.WRITE_EXTERNAL_STORAGE); - } else { - this.selectFiles(); + + if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + // Android API 33 and higher + if (!this.cordova.hasPermission(Manifest.permission.READ_MEDIA_IMAGES) && !this.cordova.hasPermission(Manifest.permission.READ_MEDIA_VIDEO)) { + String[] permissions = {Manifest.permission.READ_MEDIA_IMAGES, Manifest.permission.READ_MEDIA_VIDEO}; + this.cordova.requestPermissions(this, REQUEST_CODE_READ_MEDIA, permissions); + } else { + this.selectFiles(); + } + } + else { + // Android API 32 or lower + if (!this.cordova.hasPermission(Manifest.permission.READ_EXTERNAL_STORAGE)) { + this.cordova.requestPermission(this, REQUEST_CODE_READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE); + } else { + this.selectFiles(); + } } } else { return false; @@ -140,7 +157,8 @@ public void onRequestPermissionResult(int requestCode, String[] permissions, int return; } } - if (requestCode == WRITE_PERMISSION_REQUEST_CODE) { + + if (requestCode == REQUEST_CODE_READ_MEDIA || requestCode == REQUEST_CODE_READ_EXTERNAL_STORAGE) { selectFiles(); } } From 324762d19eb5ef9f3328705b86454485f6b6be6b Mon Sep 17 00:00:00 2001 From: BrutalBunny <83494219+BrutalBunny@users.noreply.github.com> Date: Sun, 10 Mar 2024 13:36:41 +0100 Subject: [PATCH 3/3] Update FileUtils.java Set original modified date --- src/android/FileUtils.java | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/android/FileUtils.java b/src/android/FileUtils.java index 22eddca..ba63a36 100644 --- a/src/android/FileUtils.java +++ b/src/android/FileUtils.java @@ -22,6 +22,8 @@ import android.content.Context; import android.database.Cursor; import android.net.Uri; +import android.provider.DocumentsContract; +import android.provider.MediaStore; import android.provider.OpenableColumns; import android.util.Log; @@ -129,10 +131,32 @@ private static File createFile(Context context, Uri uri) { } outputStream.flush(); } + + long originalDate = getFileModifiedDate(context, uri); + file.setLastModified(originalDate); + return file; } catch (Exception e) { Log.e(TAG, "Exception occured", e); } return null; } + + private static Long getFileModifiedDate(Context context, Uri uri) { + Cursor cursor = context.getContentResolver().query(uri, null, null, null, null, null); + if (cursor != null && cursor.moveToFirst()) { + int columnIndex = cursor.getColumnIndex(MediaStore.MediaColumns.DATE_MODIFIED); + if (columnIndex == -1) { + columnIndex = cursor.getColumnIndex(DocumentsContract.Document.COLUMN_LAST_MODIFIED); + } + if (columnIndex != -1) { + String dateStr = cursor.getString(columnIndex); + if (dateStr != null) { + return Long.parseLong(dateStr); + } + } + } + + return null; + } }