diff --git a/doc/classes/EditorSettings.xml b/doc/classes/EditorSettings.xml index 9d2a6e194..c4fa1e9e3 100644 --- a/doc/classes/EditorSettings.xml +++ b/doc/classes/EditorSettings.xml @@ -539,6 +539,10 @@ The size of the font in the [b]Output[/b] panel at the bottom of the editor. This setting does not impact the font size of the script editor (see [member interface/editor/code_font_size]). + + The Android window to display the project on when starting the project from the editor. + [b]Note:[/b] Only available in the Android editor. + The window mode to use to display the project when starting the project from the editor. diff --git a/editor/editor_run.cpp b/editor/editor_run.cpp index e09dffb01..35251688b 100644 --- a/editor/editor_run.cpp +++ b/editor/editor_run.cpp @@ -79,14 +79,6 @@ Error EditorRun::run(const String &p_scene, const String &p_custom_args, const L } #endif -#ifdef ANDROID_ENABLED - const bool android_force_side_by_side_window = EditorSettings::get_singleton()->get("run/window_placement/android_force_launch_adjacent"); - - if (android_force_side_by_side_window) { - args.push_back("--android-force-launch-adjacent"); - } -#endif - args.push_back("--allow_focus_steal_pid"); args.push_back(itos(OS::get_singleton()->get_process_id())); diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp index cbcf7c025..9b2c2cfb5 100644 --- a/editor/editor_settings.cpp +++ b/editor/editor_settings.cpp @@ -629,9 +629,10 @@ void EditorSettings::_load_defaults(Ref p_extra_config) { _initial_set("editors/visual_editors/minimap_opacity", 0.85); hints["editors/visual_editors/minimap_opacity"] = PropertyInfo(Variant::REAL, "editors/visual_editors/minimap_opacity", PROPERTY_HINT_RANGE, "0.0,1.0,0.01", PROPERTY_USAGE_DEFAULT); - /* Run */ +/* Run */ - // Window placement +// Window placement +#ifndef ANDROID_ENABLED _initial_set("run/window_placement/rect", 1); hints["run/window_placement/rect"] = PropertyInfo(Variant::INT, "run/window_placement/rect", PROPERTY_HINT_ENUM, "Top Left,Centered,Custom Position,Force Maximized,Force Fullscreen"); String screen_hints = "Same as Editor,Previous Monitor,Next Monitor"; @@ -641,8 +642,13 @@ void EditorSettings::_load_defaults(Ref p_extra_config) { _initial_set("run/window_placement/rect_custom_position", Vector2()); _initial_set("run/window_placement/screen", 0); hints["run/window_placement/screen"] = PropertyInfo(Variant::INT, "run/window_placement/screen", PROPERTY_HINT_ENUM, screen_hints); +#endif + #ifdef ANDROID_ENABLED - _initial_set("run/window_placement/android_force_launch_adjacent", false); + // Should match the ANDROID_WINDOW_* constants in 'platform/android/java/editor/src/main/java/org/godotengine/editor/GodotEditor.kt' + String android_window_hints = "Auto (based on screen size),Same as Editor,Side-by-side with Editor"; + _initial_set("run/window_placement/android_window", 0); + hints["run/window_placement/android_window"] = PropertyInfo(Variant::INT, "run/window_placement/android_window", PROPERTY_HINT_ENUM, android_window_hints); #endif // Auto save diff --git a/platform/android/java/editor/src/main/java/net/relintai/pandemonium/editor/PandemoniumEditor.kt b/platform/android/java/editor/src/main/java/net/relintai/pandemonium/editor/PandemoniumEditor.kt index e47000dd1..79f96d83c 100644 --- a/platform/android/java/editor/src/main/java/net/relintai/pandemonium/editor/PandemoniumEditor.kt +++ b/platform/android/java/editor/src/main/java/net/relintai/pandemonium/editor/PandemoniumEditor.kt @@ -77,7 +77,15 @@ open class PandemoniumEditor : FullScreenPandemoniumApp() { private const val PROJECT_MANAGER_ARG_SHORT = "-p" private const val PROJECT_MANAGER_PROCESS_NAME_SUFFIX = ":PandemoniumProjectManager" - private const val FORCE_LAUNCH_ADJACENT_ARG = "--android-force-launch-adjacent" + /** + * Sets of constants to specify the window to use to run the project. + * + * Should match the values in 'editor/editor_settings.cpp' for the + * 'run/window_placement/android_window' setting. + */ + private const val ANDROID_WINDOW_AUTO = 0 + private const val ANDROID_WINDOW_SAME_AS_EDITOR = 1 + private const val ANDROID_WINDOW_SIDE_BY_SIDE_WITH_EDITOR = 2 } private val commandLineParams = ArrayList() @@ -122,7 +130,7 @@ open class PandemoniumEditor : FullScreenPandemoniumApp() { // Whether we should launch the new pandemonium instance in an adjacent window // https://developer.android.com/reference/android/content/Intent#FLAG_ACTIVITY_LAUNCH_ADJACENT - var launchAdjacent = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && (isInMultiWindowMode || isLargeScreen) + var launchAdjacent = shouldGameLaunchAdjacent() for (arg in args) { if (EDITOR_ARG == arg || EDITOR_ARG_SHORT == arg) { @@ -140,13 +148,6 @@ open class PandemoniumEditor : FullScreenPandemoniumApp() { } } - for (arg in args) { - if (FORCE_LAUNCH_ADJACENT_ARG == arg) { - launchAdjacent = true - break - } - } - // Launch a new activity val newInstance = Intent(this, targetClass).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK).putExtra(COMMAND_LINE_PARAMS, args) @@ -232,6 +233,26 @@ open class PandemoniumEditor : FullScreenPandemoniumApp() { */ protected open fun enablePanAndScaleGestures() = true + private fun shouldGameLaunchAdjacent(): Boolean { + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + try { + when (Integer.parseInt(GodotLib.getEditorSetting("run/window_placement/android_window"))) { + ANDROID_WINDOW_SAME_AS_EDITOR -> false + ANDROID_WINDOW_SIDE_BY_SIDE_WITH_EDITOR -> true + else -> { + // ANDROID_WINDOW_AUTO + isInMultiWindowMode || isLargeScreen + } + } + } catch (e: NumberFormatException) { + // Fall-back to the 'Auto' behavior + isInMultiWindowMode || isLargeScreen + } + } else { + false + } + } + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) // Check if we got the MANAGE_EXTERNAL_STORAGE permission