fix(dialog): remove use of ACTION_PICK (#2871)

This commit is contained in:
Fabian-Lars
2025-07-28 16:43:35 +02:00
committed by GitHub
parent 7974acae22
commit af08c66faa
2 changed files with 24 additions and 44 deletions
+6
View File
@@ -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.
@@ -57,15 +57,13 @@ class DialogPlugin(private val activity: Activity): Plugin(activity) {
val args = invoke.parseArgs(FilePickerOptions::class.java) val args = invoke.parseArgs(FilePickerOptions::class.java)
val parsedTypes = parseFiltersOption(args.filters) val parsedTypes = parseFiltersOption(args.filters)
val intent = if (parsedTypes.isNotEmpty()) { // TODO: ACTION_OPEN_DOCUMENT ??
val intent = Intent(Intent.ACTION_PICK) val intent = Intent(Intent.ACTION_GET_CONTENT)
setIntentMimeTypes(intent, parsedTypes) intent.addCategory(Intent.CATEGORY_OPENABLE)
intent intent.type = "*/*"
} else {
val intent = Intent(Intent.ACTION_GET_CONTENT) if (parsedTypes.isNotEmpty()) {
intent.addCategory(Intent.CATEGORY_OPENABLE) intent.putExtra(Intent.EXTRA_MIME_TYPES, parsedTypes)
intent.type = "*/*"
intent
} }
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, args.multiple ?: false) intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, args.multiple ?: false)
@@ -132,34 +130,6 @@ class DialogPlugin(private val activity: Activity): Plugin(activity) {
return mimeTypes.toTypedArray() return mimeTypes.toTypedArray()
} }
private fun setIntentMimeTypes(intent: Intent, mimeTypes: Array<String>) {
if (mimeTypes.isNotEmpty()) {
var uniqueMimeKind = true
var mimeKind: String? = null
for (mime in mimeTypes) {
val kind = mime.split("/")[0]
if (mimeKind == null) {
mimeKind = kind
} else if (mimeKind != kind) {
uniqueMimeKind = false
}
}
if (uniqueMimeKind) {
if (mimeTypes.size > 1) {
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes)
intent.type = Intent.normalizeMimeType("$mimeKind/*")
} else {
intent.type = mimeTypes[0]
}
} else {
intent.type = "*/*"
}
} else {
intent.type = "*/*"
}
}
@Command @Command
fun showMessageDialog(invoke: Invoke) { fun showMessageDialog(invoke: Invoke) {
val args = invoke.parseArgs(MessageOptions::class.java) val args = invoke.parseArgs(MessageOptions::class.java)
@@ -213,10 +183,14 @@ class DialogPlugin(private val activity: Activity): Plugin(activity) {
val parsedTypes = parseFiltersOption(args.filters) val parsedTypes = parseFiltersOption(args.filters)
val intent = Intent(Intent.ACTION_CREATE_DOCUMENT) val intent = Intent(Intent.ACTION_CREATE_DOCUMENT)
setIntentMimeTypes(intent, parsedTypes)
intent.addCategory(Intent.CATEGORY_OPENABLE) intent.addCategory(Intent.CATEGORY_OPENABLE)
intent.putExtra(Intent.EXTRA_TITLE, args.fileName ?: "") intent.putExtra(Intent.EXTRA_TITLE, args.fileName ?: "")
intent.type = "*/*"
if (parsedTypes.isNotEmpty()) {
intent.putExtra(Intent.EXTRA_MIME_TYPES, parsedTypes)
}
startActivityForResult(invoke, intent, "saveFileDialogResult") startActivityForResult(invoke, intent, "saveFileDialogResult")
} catch (ex: Exception) { } catch (ex: Exception) {
val message = ex.message ?: "Failed to pick save file" val message = ex.message ?: "Failed to pick save file"