From a28697f2fe0983676ce037626a35f4614f7d2830 Mon Sep 17 00:00:00 2001 From: Anish Mishra Date: Fri, 6 Jun 2025 16:05:05 +0530 Subject: [PATCH] Android: Fix save issue when using native file dialog Fixes the issue where saving a file without `MANAGE_EXTERNAL_STORAGE` permission using the `native file dialog` to get the file path causes the `ERR_FILE_NOT_FOUND` error. --- .../lib/src/org/godotengine/godot/io/FilePicker.kt | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/platform/android/java/lib/src/org/godotengine/godot/io/FilePicker.kt b/platform/android/java/lib/src/org/godotengine/godot/io/FilePicker.kt index cb8ef98c252..5112396f349 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/io/FilePicker.kt +++ b/platform/android/java/lib/src/org/godotengine/godot/io/FilePicker.kt @@ -51,6 +51,7 @@ import org.godotengine.godot.io.file.MediaStoreData internal class FilePicker { companion object { private const val FILE_PICKER_REQUEST = 1000 + private const val FILE_SAVE_REQUEST = 1001 private val TAG = FilePicker::class.java.simpleName // Constants for fileMode values @@ -70,7 +71,7 @@ internal class FilePicker { */ @RequiresApi(Build.VERSION_CODES.Q) fun handleActivityResult(context: Context, requestCode: Int, resultCode: Int, data: Intent?) { - if (requestCode == FILE_PICKER_REQUEST) { + if (requestCode == FILE_PICKER_REQUEST || requestCode == FILE_SAVE_REQUEST) { if (resultCode == Activity.RESULT_CANCELED) { Log.d(TAG, "File picker canceled") GodotLib.filePickerCallback(false, emptyArray()) @@ -101,6 +102,10 @@ internal class FilePicker { } else { Log.d(TAG, "null filepath URI: $it") } + + if (requestCode == FILE_SAVE_REQUEST) { + DocumentsContract.deleteDocument(context.contentResolver, it) + } } } @@ -152,7 +157,11 @@ internal class FilePicker { intent.addCategory(Intent.CATEGORY_OPENABLE) } intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true) - activity?.startActivityForResult(intent, FILE_PICKER_REQUEST) + if (fileMode == FILE_MODE_SAVE_FILE) { + activity?.startActivityForResult(intent, FILE_SAVE_REQUEST) + } else { + activity?.startActivityForResult(intent, FILE_PICKER_REQUEST) + } } /**