diff --git a/lawnchair/src/app/lawnchair/BlankActivity.kt b/lawnchair/src/app/lawnchair/BlankActivity.kt index a64f01cbbaf..18d0c235827 100644 --- a/lawnchair/src/app/lawnchair/BlankActivity.kt +++ b/lawnchair/src/app/lawnchair/BlankActivity.kt @@ -7,7 +7,6 @@ import android.os.Handler import android.os.Looper import android.os.ResultReceiver import androidx.activity.compose.setContent -import androidx.activity.enableEdgeToEdge import androidx.activity.result.ActivityResult import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AppCompatActivity @@ -22,6 +21,7 @@ import androidx.compose.material3.Text import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.core.os.bundleOf +import app.lawnchair.ui.theme.EdgeToEdge import app.lawnchair.ui.theme.LawnchairTheme import app.lawnchair.util.unsafeLazy import kotlin.coroutines.resume @@ -37,12 +37,13 @@ class BlankActivity : AppCompatActivity() { @OptIn(ExperimentalMaterial3Api::class) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - enableEdgeToEdge() if (!intent.hasExtra("dialogTitle")) { startTargetActivity() return } setContent { + EdgeToEdge() + LawnchairTheme { Surface( modifier = Modifier.fillMaxSize(), diff --git a/lawnchair/src/app/lawnchair/ui/preferences/PreferenceActivity.kt b/lawnchair/src/app/lawnchair/ui/preferences/PreferenceActivity.kt index d1d71aaf63d..184191f3d8d 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/PreferenceActivity.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/PreferenceActivity.kt @@ -18,42 +18,23 @@ package app.lawnchair.ui.preferences import android.content.Context import android.content.Intent -import android.graphics.Color import android.os.Bundle -import androidx.activity.SystemBarStyle import androidx.activity.compose.setContent -import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass -import androidx.compose.runtime.DisposableEffect import androidx.core.net.toUri +import app.lawnchair.ui.theme.EdgeToEdge import app.lawnchair.ui.theme.LawnchairTheme -import app.lawnchair.ui.theme.isSelectedThemeDark class PreferenceActivity : AppCompatActivity() { @OptIn(ExperimentalMaterial3WindowSizeClassApi::class) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - enableEdgeToEdge() setContent { - val windowSizeClass = calculateWindowSizeClass(this) - val darkTheme = isSelectedThemeDark - - DisposableEffect(darkTheme) { - enableEdgeToEdge( - statusBarStyle = SystemBarStyle.auto( - Color.TRANSPARENT, - Color.TRANSPARENT, - ) { darkTheme }, - navigationBarStyle = SystemBarStyle.auto( - lightScrim, - darkScrim, - ) { darkTheme }, - ) - onDispose {} - } + EdgeToEdge() + val windowSizeClass = calculateWindowSizeClass(this) LawnchairTheme { Preferences( windowSizeClass, @@ -70,15 +51,3 @@ class PreferenceActivity : AppCompatActivity() { } } } - -/** - * The default light scrim, as defined by androidx and the platform: - * https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:activity/activity/src/main/java/androidx/activity/EdgeToEdge.kt;l=35-38;drc=27e7d52e8604a080133e8b842db10c89b4482598 - */ -private val lightScrim = Color.argb(0xe6, 0xFF, 0xFF, 0xFF) - -/** - * The default dark scrim, as defined by androidx and the platform: - * https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:activity/activity/src/main/java/androidx/activity/EdgeToEdge.kt;l=40-44;drc=27e7d52e8604a080133e8b842db10c89b4482598 - */ -private val darkScrim = Color.argb(0x80, 0x1b, 0x1b, 0x1b) diff --git a/lawnchair/src/app/lawnchair/ui/theme/Theme.kt b/lawnchair/src/app/lawnchair/ui/theme/Theme.kt index 48e8dfb6c59..8536bb4440e 100644 --- a/lawnchair/src/app/lawnchair/ui/theme/Theme.kt +++ b/lawnchair/src/app/lawnchair/ui/theme/Theme.kt @@ -16,11 +16,17 @@ package app.lawnchair.ui.theme +import android.graphics.Color +import android.view.WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS +import androidx.activity.ComponentActivity +import androidx.activity.SystemBarStyle +import androidx.activity.enableEdgeToEdge import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.material3.ColorScheme import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -50,6 +56,26 @@ fun LawnchairTheme( ) } +@Composable +fun ComponentActivity.EdgeToEdge() { + val darkTheme = isSelectedThemeDark + LaunchedEffect(darkTheme) { + val barStyle = SystemBarStyle.auto( + Color.TRANSPARENT, + Color.TRANSPARENT, + detectDarkMode = { darkTheme }, + ) + enableEdgeToEdge( + statusBarStyle = barStyle, + navigationBarStyle = barStyle, + ) + + // Fix for three-button nav not properly going edge-to-edge. + // TODO: https://issuetracker.google.com/issues/298296168 + window.setFlags(FLAG_LAYOUT_NO_LIMITS, FLAG_LAYOUT_NO_LIMITS) + } +} + @Composable fun getColorScheme(darkTheme: Boolean): ColorScheme { val context = LocalContext.current