From ef9d945e16058ff6ed8d20fea2dfe0d4ee66a17b Mon Sep 17 00:00:00 2001 From: Fredia Huya-Kouadio Date: Thu, 18 Feb 2021 01:54:35 -0800 Subject: [PATCH] Disable engine splash logic on Android; this is now handled by the Android theme api. In addition, add support for scaling and applying filter to the splash screen on Android. One limitation of the api being used is that the splash screen aspect ratio is not maintained when it's scaled up. --- main/main.cpp | 2 +- platform/android/export/export.cpp | 33 ++++++++++++++++--- .../java/app/res/drawable/splash_drawable.xml | 2 +- 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/main/main.cpp b/main/main.cpp index f9c50617ea..985ebdbb26 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -1307,7 +1307,7 @@ Error Main::setup2(Thread::ID p_main_tid_override) { MAIN_PRINT("Main: Setup Logo"); -#ifdef JAVASCRIPT_ENABLED +#if defined(JAVASCRIPT_ENABLED) || defined(ANDROID_ENABLED) bool show_logo = false; #else bool show_logo = true; diff --git a/platform/android/export/export.cpp b/platform/android/export/export.cpp index 8a9210e627..a8408b0985 100644 --- a/platform/android/export/export.cpp +++ b/platform/android/export/export.cpp @@ -202,6 +202,19 @@ static const char *android_perms[] = { static const char *SPLASH_IMAGE_EXPORT_PATH = "res/drawable/splash.png"; static const char *SPLASH_BG_COLOR_PATH = "res/drawable/splash_bg_color.png"; +static const char *SPLASH_CONFIG_PATH = "res://android/build/res/drawable/splash_drawable.xml"; + +const String SPLASH_CONFIG_XML_CONTENT = R"SPLASH( + + + + + + +)SPLASH"; struct LauncherIcon { const char *export_path; @@ -1508,8 +1521,9 @@ class EditorExportPlatformAndroid : public EditorExportPlatform { } } - void load_splash_refs(Ref &splash_image, Ref &splash_bg_color_image) { - // TODO: Figure out how to handle remaining boot splash parameters (e.g: fullsize, filter) + String load_splash_refs(Ref &splash_image, Ref &splash_bg_color_image) { + bool scale_splash = ProjectSettings::get_singleton()->get("application/boot_splash/fullsize"); + bool apply_filter = ProjectSettings::get_singleton()->get("application/boot_splash/use_filter"); String project_splash_path = ProjectSettings::get_singleton()->get("application/boot_splash/image"); if (!project_splash_path.empty()) { @@ -1541,6 +1555,10 @@ class EditorExportPlatformAndroid : public EditorExportPlatform { splash_bg_color_image.instance(); splash_bg_color_image->create(splash_image->get_width(), splash_image->get_height(), false, splash_image->get_format()); splash_bg_color_image->fill(bg_color); + + String gravity = scale_splash ? "fill" : "center"; + String processed_splash_config_xml = vformat(SPLASH_CONFIG_XML_CONTENT, gravity, bool_to_string(apply_filter)); + return processed_splash_config_xml; } void load_icon_refs(const Ref &p_preset, Ref &icon, Ref &foreground, Ref &background) { @@ -1584,11 +1602,18 @@ class EditorExportPlatformAndroid : public EditorExportPlatform { } void _copy_icons_to_gradle_project(const Ref &p_preset, + const String &processed_splash_config_xml, const Ref &splash_image, const Ref &splash_bg_color_image, const Ref &main_image, const Ref &foreground, const Ref &background) { + // Store the splash configuration + if (!processed_splash_config_xml.empty()) { + print_verbose("Storing processed splash configuration: " + String("\n") + processed_splash_config_xml); + store_string_at_path(SPLASH_CONFIG_PATH, processed_splash_config_xml); + } + // Store the splash image if (splash_image.is_valid() && !splash_image->empty()) { print_verbose("Storing splash image in " + String(SPLASH_IMAGE_EXPORT_PATH)); @@ -2751,7 +2776,7 @@ public: Ref splash_image; Ref splash_bg_color_image; - load_splash_refs(splash_image, splash_bg_color_image); + String processed_splash_config_xml = load_splash_refs(splash_image, splash_bg_color_image); Ref main_image; Ref foreground; @@ -2812,7 +2837,7 @@ public: EditorNode::add_io_error("Unable to overwrite res://android/build/res/*.xml files with project name"); } // Copies the project icon files into the appropriate Gradle project directory. - _copy_icons_to_gradle_project(p_preset, splash_image, splash_bg_color_image, main_image, foreground, background); + _copy_icons_to_gradle_project(p_preset, processed_splash_config_xml, splash_image, splash_bg_color_image, main_image, foreground, background); // Write an AndroidManifest.xml file into the Gradle project directory. _write_tmp_manifest(p_preset, p_give_internet, p_debug); _update_custom_build_project(); diff --git a/platform/android/java/app/res/drawable/splash_drawable.xml b/platform/android/java/app/res/drawable/splash_drawable.xml index 2794a40817..30627b998c 100644 --- a/platform/android/java/app/res/drawable/splash_drawable.xml +++ b/platform/android/java/app/res/drawable/splash_drawable.xml @@ -6,7 +6,7 @@ -