1818
1919package com.movtery.zalithlauncher.ui.base
2020
21+ import android.content.res.Configuration
2122import android.graphics.Color
2223import android.os.Build
2324import android.os.Bundle
2425import android.view.WindowManager
26+ import androidx.activity.compose.LocalActivity
2527import androidx.annotation.CallSuper
2628import androidx.compose.foundation.layout.WindowInsets
29+ import androidx.compose.foundation.layout.captionBarPadding
2730import androidx.compose.foundation.layout.displayCutout
2831import androidx.compose.foundation.layout.fillMaxSize
2932import androidx.compose.foundation.layout.windowInsetsPadding
3033import androidx.compose.runtime.Composable
34+ import androidx.compose.runtime.State
35+ import androidx.compose.runtime.getValue
3136import androidx.compose.ui.Modifier
3237import androidx.core.view.WindowCompat
3338import androidx.core.view.WindowInsetsCompat
3439import androidx.core.view.WindowInsetsControllerCompat
40+ import androidx.lifecycle.compose.collectAsStateWithLifecycle
41+ import kotlinx.coroutines.flow.MutableStateFlow
42+ import kotlinx.coroutines.flow.asStateFlow
3543
3644abstract 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
85101fun 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