From 9a5447bac046b6d270de581d1dbee801ebc66cce Mon Sep 17 00:00:00 2001 From: cookies Date: Thu, 8 Oct 2026 17:05:23 +0800 Subject: [PATCH] feat(lifecycle): support multi-resume and adaptive multi-window mode - Add android.allow_multiple_resumed_activities meta-data to enable multi-resume on Android 9 (API 28) and Android 10, preventing frame drops and rendering suspension when interacting with another app in split-screen or floating multi-window mode. - Implement onMultiWindowModeChanged to trigger dynamic resolution re-scheduling when entering/exiting multi-window mode. - Avoid force-hiding status and navigation bars while in multi-window mode to preserve split-screen boundaries and car system dock controls. - Add supportsPictureInPicture and ensure resizeableActivity is declared consistently across activities. --- common/src/main/AndroidManifest.xml | 7 +++++++ .../shilapi/xcertplay/CarPlayHostActivity.kt | 17 +++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/common/src/main/AndroidManifest.xml b/common/src/main/AndroidManifest.xml index 0bd90390..62abf92f 100644 --- a/common/src/main/AndroidManifest.xml +++ b/common/src/main/AndroidManifest.xml @@ -5,6 +5,10 @@ + + @@ -30,11 +35,13 @@ diff --git a/common/src/main/java/com/shilapi/xcertplay/CarPlayHostActivity.kt b/common/src/main/java/com/shilapi/xcertplay/CarPlayHostActivity.kt index af9db22c..e7fc5426 100644 --- a/common/src/main/java/com/shilapi/xcertplay/CarPlayHostActivity.kt +++ b/common/src/main/java/com/shilapi/xcertplay/CarPlayHostActivity.kt @@ -641,6 +641,15 @@ class CarPlayHostActivity : ComponentActivity() { } } + override fun onMultiWindowModeChanged(isInMultiWindowMode: Boolean, newConfig: Configuration) { + super.onMultiWindowModeChanged(isInMultiWindowMode, newConfig) + applyFullscreenMode() + videoView?.post { + val view = videoView ?: return@post + scheduleDisplaySize(view.width, view.height) + } + } + override fun onDestroy() { stopMicrophoneGainTest() mainHandler.removeCallbacks(applyDisplaySize) @@ -3097,6 +3106,9 @@ class CarPlayHostActivity : ComponentActivity() { append(if (hideTopBar) "top hidden" else "top shown") append(", ") append(if (hideBottomBar) "bottom hidden" else "bottom shown") + if (isInMultiWindowMode) { + append(" (multi-window)") + } } resolutionPreviewView?.text = buildString { append(resolution).append('\n') @@ -4035,8 +4047,9 @@ class CarPlayHostActivity : ComponentActivity() { } private fun applyFullscreenMode() { - val hideTop = hideTopBar - val hideBottom = hideBottomBar + val inMultiWindow = isInMultiWindowMode + val hideTop = hideTopBar && !inMultiWindow + val hideBottom = hideBottomBar && !inMultiWindow WindowCompat.setDecorFitsSystemWindows(window, !(hideTop && hideBottom)) val controller = WindowInsetsControllerCompat(window, window.decorView) if (hideTop) {