Skip to content

Commit 9c40dd8

Browse files
authored
Merge pull request #1422 from ZalithLauncher/fix/multiwindow_mode
fix: 在多窗口模式下为标题栏留出安全区
2 parents f4145bd + 6d516dc commit 9c40dd8

1 file changed

Lines changed: 28 additions & 2 deletions

File tree

ZalithLauncher/src/main/java/com/movtery/zalithlauncher/ui/base/FullScreenAppCompatActivity.kt

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,33 @@
1818

1919
package com.movtery.zalithlauncher.ui.base
2020

21+
import android.content.res.Configuration
2122
import android.graphics.Color
2223
import android.os.Build
2324
import android.os.Bundle
2425
import android.view.WindowManager
26+
import androidx.activity.compose.LocalActivity
2527
import androidx.annotation.CallSuper
2628
import androidx.compose.foundation.layout.WindowInsets
29+
import androidx.compose.foundation.layout.captionBarPadding
2730
import androidx.compose.foundation.layout.displayCutout
2831
import androidx.compose.foundation.layout.fillMaxSize
2932
import androidx.compose.foundation.layout.windowInsetsPadding
3033
import androidx.compose.runtime.Composable
34+
import androidx.compose.runtime.State
35+
import androidx.compose.runtime.getValue
3136
import androidx.compose.ui.Modifier
3237
import androidx.core.view.WindowCompat
3338
import androidx.core.view.WindowInsetsCompat
3439
import androidx.core.view.WindowInsetsControllerCompat
40+
import androidx.lifecycle.compose.collectAsStateWithLifecycle
41+
import kotlinx.coroutines.flow.MutableStateFlow
42+
import kotlinx.coroutines.flow.asStateFlow
3543

3644
abstract class FullScreenAppCompatActivity : AbstractAppCompatActivity() {
45+
private val _isMultiWindowMode = MutableStateFlow(false)
46+
val isMultiWindowMode = _isMultiWindowMode.asStateFlow()
47+
3748
@CallSuper
3849
override fun onCreate(savedInstanceState: Bundle?) {
3950
super.onCreate(savedInstanceState)
@@ -54,6 +65,11 @@ abstract class FullScreenAppCompatActivity : AbstractAppCompatActivity() {
5465
}
5566
}
5667

68+
override fun onMultiWindowModeChanged(isInMultiWindowMode: Boolean, newConfig: Configuration) {
69+
super.onMultiWindowModeChanged(isInMultiWindowMode, newConfig)
70+
_isMultiWindowMode.value = isInMultiWindowMode
71+
}
72+
5773
@Suppress("DEPRECATION")
5874
private fun applyFullImmersive() {
5975
window?.let { window ->
@@ -83,9 +99,19 @@ abstract class FullScreenAppCompatActivity : AbstractAppCompatActivity() {
8399

84100
@Composable
85101
fun Modifier.applyFullscreen(value: Boolean): Modifier {
86-
val modifier = Modifier.fillMaxSize()
102+
val isInMultiWindowMode by isInMultiWindowMode()
103+
104+
val modifier = Modifier
105+
.fillMaxSize()
106+
.captionBarPadding()
87107
return then(
88-
if (value) modifier
108+
if (value || isInMultiWindowMode) modifier
89109
else modifier.windowInsetsPadding(WindowInsets.displayCutout)
90110
)
111+
}
112+
113+
@Composable
114+
private fun isInMultiWindowMode(): State<Boolean> {
115+
val activity = LocalActivity.current as FullScreenAppCompatActivity
116+
return activity.isMultiWindowMode.collectAsStateWithLifecycle()
91117
}

0 commit comments

Comments
 (0)