diff options
| author | Fredia Huya-Kouadio <fhuyakou@gmail.com> | 2024-08-27 13:54:17 -0700 |
|---|---|---|
| committer | Fredia Huya-Kouadio <fhuyakou@gmail.com> | 2024-08-28 09:50:34 -0700 |
| commit | 923b0f2e56bc27abb41dfa5e90c7fbd4eec50b95 (patch) | |
| tree | 3c28a7dbbb93f14282d838b8c9b26807894cfa04 /platform/android/java/editor/src | |
| parent | e439154407721b2e053c38decaa77cb520d22a12 (diff) | |
| download | redot-engine-923b0f2e56bc27abb41dfa5e90c7fbd4eec50b95.tar.gz | |
Restore 'Toggle fullscreen' menu for the Android editor and clean up the immersive mode logic
Diffstat (limited to 'platform/android/java/editor/src')
3 files changed, 28 insertions, 6 deletions
diff --git a/platform/android/java/editor/src/main/java/org/godotengine/editor/EditorMessageDispatcher.kt b/platform/android/java/editor/src/main/java/org/godotengine/editor/EditorMessageDispatcher.kt index ba1185d647..b16e62149a 100644 --- a/platform/android/java/editor/src/main/java/org/godotengine/editor/EditorMessageDispatcher.kt +++ b/platform/android/java/editor/src/main/java/org/godotengine/editor/EditorMessageDispatcher.kt @@ -176,7 +176,7 @@ internal class EditorMessageDispatcher(private val editor: GodotEditor) { registerMessenger(senderId, senderMessenger) // Register ourselves to the sender so that it can communicate with us. - registerSelfTo(pm, senderMessenger, editor.getEditorId()) + registerSelfTo(pm, senderMessenger, editor.getEditorWindowInfo().windowId) } /** @@ -185,7 +185,7 @@ internal class EditorMessageDispatcher(private val editor: GodotEditor) { */ fun getMessageDispatcherPayload(): Bundle { return Bundle().apply { - putInt(KEY_EDITOR_ID, editor.getEditorId()) + putInt(KEY_EDITOR_ID, editor.getEditorWindowInfo().windowId) putParcelable(KEY_EDITOR_MESSENGER, Messenger(dispatcherHandler)) } } diff --git a/platform/android/java/editor/src/main/java/org/godotengine/editor/GodotEditor.kt b/platform/android/java/editor/src/main/java/org/godotengine/editor/GodotEditor.kt index 5d6da06f97..1995a38c2a 100644 --- a/platform/android/java/editor/src/main/java/org/godotengine/editor/GodotEditor.kt +++ b/platform/android/java/editor/src/main/java/org/godotengine/editor/GodotEditor.kt @@ -40,6 +40,7 @@ import android.content.pm.PackageManager import android.os.* import android.util.Log import android.view.View +import android.view.WindowManager import android.widget.Toast import androidx.annotation.CallSuper import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen @@ -78,6 +79,8 @@ open class GodotEditor : GodotActivity() { protected val EXTRA_LAUNCH_IN_PIP = "launch_in_pip_requested" // Command line arguments + private const val FULLSCREEN_ARG = "--fullscreen" + private const val FULLSCREEN_ARG_SHORT = "-f" private const val EDITOR_ARG = "--editor" private const val EDITOR_ARG_SHORT = "-e" private const val EDITOR_PROJECT_MANAGER_ARG = "--project-manager" @@ -116,11 +119,16 @@ open class GodotEditor : GodotActivity() { override fun getGodotAppLayout() = R.layout.godot_editor_layout - internal open fun getEditorId() = EDITOR_MAIN_INFO.windowId + internal open fun getEditorWindowInfo() = EDITOR_MAIN_INFO override fun onCreate(savedInstanceState: Bundle?) { installSplashScreen() + // Prevent the editor window from showing in the display cutout + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P && getEditorWindowInfo() == EDITOR_MAIN_INFO) { + window.attributes.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER + } + // We exclude certain permissions from the set we request at startup, as they'll be // requested on demand based on use-cases. PermissionsUtil.requestManifestPermissions(this, setOf(Manifest.permission.RECORD_AUDIO)) @@ -213,10 +221,24 @@ open class GodotEditor : GodotActivity() { } protected fun getNewGodotInstanceIntent(editorWindowInfo: EditorWindowInfo, args: Array<String>): Intent { + val updatedArgs = if (editorWindowInfo == EDITOR_MAIN_INFO && + godot?.isInImmersiveMode() == true && + !args.contains(FULLSCREEN_ARG) && + !args.contains(FULLSCREEN_ARG_SHORT) + ) { + // If we're launching an editor window (project manager or editor) and we're in + // fullscreen mode, we want to remain in fullscreen mode. + // This doesn't apply to the play / game window since for that window fullscreen is + // controlled by the game logic. + args + FULLSCREEN_ARG + } else { + args + } + val newInstance = Intent() .setComponent(ComponentName(this, editorWindowInfo.windowClassName)) .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - .putExtra(EXTRA_COMMAND_LINE_PARAMS, args) + .putExtra(EXTRA_COMMAND_LINE_PARAMS, updatedArgs) val launchPolicy = resolveLaunchPolicyIfNeeded(editorWindowInfo.launchPolicy) val isPiPAvailable = if (editorWindowInfo.supportsPiPMode && hasPiPSystemFeature()) { @@ -235,7 +257,7 @@ open class GodotEditor : GodotActivity() { } } else if (launchPolicy == LaunchPolicy.SAME) { if (isPiPAvailable && - (args.contains(BREAKPOINTS_ARG) || args.contains(BREAKPOINTS_ARG_SHORT))) { + (updatedArgs.contains(BREAKPOINTS_ARG) || updatedArgs.contains(BREAKPOINTS_ARG_SHORT))) { Log.v(TAG, "Launching in PiP mode because of breakpoints") newInstance.putExtra(EXTRA_LAUNCH_IN_PIP, true) } diff --git a/platform/android/java/editor/src/main/java/org/godotengine/editor/GodotGame.kt b/platform/android/java/editor/src/main/java/org/godotengine/editor/GodotGame.kt index 33fcbf9030..6b4bf255f2 100644 --- a/platform/android/java/editor/src/main/java/org/godotengine/editor/GodotGame.kt +++ b/platform/android/java/editor/src/main/java/org/godotengine/editor/GodotGame.kt @@ -128,7 +128,7 @@ class GodotGame : GodotEditor() { override fun getGodotAppLayout() = R.layout.godot_game_layout - override fun getEditorId() = RUN_GAME_INFO.windowId + override fun getEditorWindowInfo() = RUN_GAME_INFO override fun overrideOrientationRequest() = false |
