From c09faa780085b66fe9b883b6e76dc330f3838d47 Mon Sep 17 00:00:00 2001 From: FabianLars Date: Thu, 24 Jul 2025 17:00:44 +0200 Subject: [PATCH] fix(dialog): fix file picker not opening on android when filters are set --- .changes/fix-dialog-android-filters.md | 6 ++++ .../android/src/main/java/DialogPlugin.kt | 28 +++++++++---------- 2 files changed, 19 insertions(+), 15 deletions(-) create mode 100644 .changes/fix-dialog-android-filters.md diff --git a/.changes/fix-dialog-android-filters.md b/.changes/fix-dialog-android-filters.md new file mode 100644 index 00000000..9647d4e5 --- /dev/null +++ b/.changes/fix-dialog-android-filters.md @@ -0,0 +1,6 @@ +--- +dialog: patch +dialog-js: patch +--- + +Fixed an issue that caused the file picker not to open on Android when extension filters were set. diff --git a/plugins/dialog/android/src/main/java/DialogPlugin.kt b/plugins/dialog/android/src/main/java/DialogPlugin.kt index af0467d8..98346c07 100644 --- a/plugins/dialog/android/src/main/java/DialogPlugin.kt +++ b/plugins/dialog/android/src/main/java/DialogPlugin.kt @@ -56,20 +56,18 @@ class DialogPlugin(private val activity: Activity): Plugin(activity) { try { val args = invoke.parseArgs(FilePickerOptions::class.java) val parsedTypes = parseFiltersOption(args.filters) - - val intent = if (parsedTypes.isNotEmpty()) { - val intent = Intent(Intent.ACTION_PICK) - setIntentMimeTypes(intent, parsedTypes) - intent - } else { - val intent = Intent(Intent.ACTION_GET_CONTENT) - intent.addCategory(Intent.CATEGORY_OPENABLE) - intent.type = "*/*" - intent + + // TODO: ACTION_OPEN_DOCUMENT ?? + val intent = Intent(Intent.ACTION_GET_CONTENT) + intent.addCategory(Intent.CATEGORY_OPENABLE) + intent.type = "*/*" + + if (parsedTypes.isNotEmpty()) { + intent.putExtra(Intent.EXTRA_MIME_TYPES, parsedTypes) } intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, args.multiple ?: false) - + startActivityForResult(invoke, intent, "filePickerResult") } catch (ex: Exception) { val message = ex.message ?: "Failed to pick file" @@ -115,7 +113,7 @@ class DialogPlugin(private val activity: Activity): Plugin(activity) { callResult.put("files", JSArray.from(uris.toTypedArray())) return callResult } - + private fun parseFiltersOption(filters: Array): Array { val mimeTypes = mutableListOf() for (filter in filters) { @@ -159,11 +157,11 @@ class DialogPlugin(private val activity: Activity): Plugin(activity) { intent.type = "*/*" } } - + @Command fun showMessageDialog(invoke: Invoke) { val args = invoke.parseArgs(MessageOptions::class.java) - + if (activity.isFinishing) { invoke.reject("App is finishing") return @@ -179,7 +177,7 @@ class DialogPlugin(private val activity: Activity): Plugin(activity) { Handler(Looper.getMainLooper()) .post { val builder = AlertDialog.Builder(activity) - + if (args.title != null) { builder.setTitle(args.title) }