From c82f7feb53582bd885c42cd9f80a349c902f358a Mon Sep 17 00:00:00 2001 From: Anish Mishra Date: Fri, 27 Jun 2025 17:07:50 +0530 Subject: [PATCH] Document that `native file dialog` is only available on Android 10+ devices. --- doc/classes/DisplayServer.xml | 2 +- doc/classes/FileDialog.xml | 2 +- platform/android/display_server_android.cpp | 6 +++++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/doc/classes/DisplayServer.xml b/doc/classes/DisplayServer.xml index d5e1d980580..e6c3911d8af 100644 --- a/doc/classes/DisplayServer.xml +++ b/doc/classes/DisplayServer.xml @@ -782,7 +782,7 @@ Displays OS native dialog for selecting files or directories in the file system. Each filter string in the [param filters] array should be formatted like this: [code]*.png,*.jpg,*.jpeg;Image Files;image/png,image/jpeg[/code]. The description text of the filter is optional and can be omitted. It is recommended to set both file extension and MIME type. See also [member FileDialog.filters]. Callbacks have the following arguments: [code]status: bool, selected_paths: PackedStringArray, selected_filter_index: int[/code]. [b]On Android,[/b] the third callback argument ([code]selected_filter_index[/code]) is always [code]0[/code]. - [b]Note:[/b] This method is implemented if the display server has the [constant FEATURE_NATIVE_DIALOG_FILE] feature. Supported platforms include Linux (X11/Wayland), Windows, macOS, and Android. + [b]Note:[/b] This method is implemented if the display server has the [constant FEATURE_NATIVE_DIALOG_FILE] feature. Supported platforms include Linux (X11/Wayland), Windows, macOS, and Android (API level 29+). [b]Note:[/b] [param current_directory] might be ignored. [b]Note:[/b] Embedded file dialog and Windows file dialog support only file extensions, while Android, Linux, and macOS file dialogs also support MIME types. [b]Note:[/b] On Android and Linux, [param show_hidden] is ignored. diff --git a/doc/classes/FileDialog.xml b/doc/classes/FileDialog.xml index cbb328a55f4..8a1b38c5f19 100644 --- a/doc/classes/FileDialog.xml +++ b/doc/classes/FileDialog.xml @@ -205,7 +205,7 @@ If [code]true[/code], and if supported by the current [DisplayServer], OS native dialog will be used instead of custom one. - [b]Note:[/b] On Android, it is only supported when using [constant ACCESS_FILESYSTEM]. For access mode [constant ACCESS_RESOURCES] and [constant ACCESS_USERDATA], the system will fall back to custom FileDialog. + [b]Note:[/b] On Android, it is only supported for Android 10+ devices and when using [constant ACCESS_FILESYSTEM]. For access mode [constant ACCESS_RESOURCES] and [constant ACCESS_USERDATA], the system will fall back to custom FileDialog. [b]Note:[/b] On Linux and macOS, sandboxed apps always use native dialogs to access the host file system. [b]Note:[/b] On macOS, sandboxed apps will save security-scoped bookmarks to retain access to the opened folders across multiple sessions. Use [method OS.get_granted_permissions] to get a list of saved bookmarks. [b]Note:[/b] Native dialogs are isolated from the base process, file dialog properties can't be modified once the dialog is shown. diff --git a/platform/android/display_server_android.cpp b/platform/android/display_server_android.cpp index 64e1fea119d..99ca44503fc 100644 --- a/platform/android/display_server_android.cpp +++ b/platform/android/display_server_android.cpp @@ -63,6 +63,11 @@ bool DisplayServerAndroid::has_feature(Feature p_feature) const { return (native_menu && native_menu->has_feature(NativeMenu::FEATURE_GLOBAL_MENU)); } break; #endif + case FEATURE_NATIVE_DIALOG_FILE: { + String sdk_version = OS::get_singleton()->get_version().get_slicec('.', 0); + return sdk_version.to_int() >= 29; + } break; + case FEATURE_CURSOR_SHAPE: //case FEATURE_CUSTOM_CURSOR_SHAPE: //case FEATURE_HIDPI: @@ -72,7 +77,6 @@ bool DisplayServerAndroid::has_feature(Feature p_feature) const { //case FEATURE_MOUSE_WARP: case FEATURE_NATIVE_DIALOG: case FEATURE_NATIVE_DIALOG_INPUT: - case FEATURE_NATIVE_DIALOG_FILE: //case FEATURE_NATIVE_DIALOG_FILE_EXTRA: case FEATURE_NATIVE_DIALOG_FILE_MIME: //case FEATURE_NATIVE_ICON: