From 8e5e9150131f7e8c80fdf6189c347a27da758e79 Mon Sep 17 00:00:00 2001 From: Anish Mishra Date: Thu, 3 Apr 2025 18:05:30 +0530 Subject: [PATCH] Android Editor: Auto create `nomedia` file to hide project files in media apps --- editor/editor_file_system.cpp | 13 +++++++++++++ editor/project_manager/project_dialog.cpp | 11 +++++++++++ 2 files changed, 24 insertions(+) diff --git a/editor/editor_file_system.cpp b/editor/editor_file_system.cpp index be5081db402..8dec50d5aa3 100644 --- a/editor/editor_file_system.cpp +++ b/editor/editor_file_system.cpp @@ -1068,6 +1068,19 @@ void EditorFileSystem::scan() { // to be loaded to continue the scan and reimportations. if (first_scan) { _first_scan_filesystem(); +#ifdef ANDROID_ENABLED + const String nomedia_file_path = ProjectSettings::get_singleton()->get_resource_path().path_join(".nomedia"); + if (!FileAccess::exists(nomedia_file_path)) { + // Create a .nomedia file to hide assets from media apps on Android. + Ref f = FileAccess::open(nomedia_file_path, FileAccess::WRITE); + if (f.is_null()) { + // .nomedia isn't so critical. + ERR_PRINT("Couldn't create .nomedia in project path."); + } else { + f->close(); + } + } +#endif } _update_extensions(); diff --git a/editor/project_manager/project_dialog.cpp b/editor/project_manager/project_dialog.cpp index cf0ffcfa71e..a2aca198035 100644 --- a/editor/project_manager/project_dialog.cpp +++ b/editor/project_manager/project_dialog.cpp @@ -725,6 +725,17 @@ void ProjectDialog::ok_pressed() { hide(); if (mode == MODE_NEW || mode == MODE_IMPORT || mode == MODE_INSTALL) { +#ifdef ANDROID_ENABLED + // Create a .nomedia file to hide assets from media apps on Android. + const String nomedia_file_path = path.path_join(".nomedia"); + Ref f2 = FileAccess::open(nomedia_file_path, FileAccess::WRITE); + if (f2.is_null()) { + // .nomedia isn't so critical. + ERR_PRINT("Couldn't create .nomedia in project path."); + } else { + f2->close(); + } +#endif emit_signal(SNAME("project_created"), path, edit_check_box->is_pressed()); } else if (mode == MODE_RENAME) { emit_signal(SNAME("projects_updated"));