From 4c33d346df3a80d743c19da60dd32e5ff36e3824 Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sun, 18 Aug 2024 16:30:14 +0800 Subject: [PATCH] Improve jetpack compose edge-to-edge handling --- lawnchair/src/app/lawnchair/BlankActivity.kt | 5 ++-- .../ui/preferences/PreferenceActivity.kt | 5 ++-- lawnchair/src/app/lawnchair/ui/theme/Theme.kt | 28 +++++++++++-------- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/lawnchair/src/app/lawnchair/BlankActivity.kt b/lawnchair/src/app/lawnchair/BlankActivity.kt index 18d0c23582..02648934e6 100644 --- a/lawnchair/src/app/lawnchair/BlankActivity.kt +++ b/lawnchair/src/app/lawnchair/BlankActivity.kt @@ -7,6 +7,7 @@ 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 @@ -37,14 +38,14 @@ class BlankActivity : AppCompatActivity() { @OptIn(ExperimentalMaterial3Api::class) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + enableEdgeToEdge() if (!intent.hasExtra("dialogTitle")) { startTargetActivity() return } setContent { - EdgeToEdge() - LawnchairTheme { + EdgeToEdge() Surface( modifier = Modifier.fillMaxSize(), color = BottomSheetDefaults.ScrimColor, diff --git a/lawnchair/src/app/lawnchair/ui/preferences/PreferenceActivity.kt b/lawnchair/src/app/lawnchair/ui/preferences/PreferenceActivity.kt index 184191f3d8..12ce4a1b2e 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/PreferenceActivity.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/PreferenceActivity.kt @@ -20,6 +20,7 @@ import android.content.Context import android.content.Intent import android.os.Bundle 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 @@ -31,11 +32,11 @@ class PreferenceActivity : AppCompatActivity() { @OptIn(ExperimentalMaterial3WindowSizeClassApi::class) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + enableEdgeToEdge() setContent { - EdgeToEdge() - val windowSizeClass = calculateWindowSizeClass(this) LawnchairTheme { + EdgeToEdge() Preferences( windowSizeClass, ) diff --git a/lawnchair/src/app/lawnchair/ui/theme/Theme.kt b/lawnchair/src/app/lawnchair/ui/theme/Theme.kt index 8536bb4440..0ad21c44b2 100644 --- a/lawnchair/src/app/lawnchair/ui/theme/Theme.kt +++ b/lawnchair/src/app/lawnchair/ui/theme/Theme.kt @@ -17,7 +17,6 @@ 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 @@ -31,13 +30,14 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.platform.LocalContext import app.lawnchair.preferences.observeAsState import app.lawnchair.preferences.preferenceManager import app.lawnchair.preferences2.asState import app.lawnchair.preferences2.preferenceManager2 import app.lawnchair.theme.ThemeProvider -import app.lawnchair.theme.toM3ColorScheme +import app.lawnchair.theme.toComposeColorScheme import app.lawnchair.ui.preferences.components.ThemeChoice import app.lawnchair.wallpaper.WallpaperManagerCompat import com.android.launcher3.Utilities @@ -59,20 +59,26 @@ fun LawnchairTheme( @Composable fun ComponentActivity.EdgeToEdge() { val darkTheme = isSelectedThemeDark + val scrimColor = MaterialTheme.colorScheme.background.copy(alpha = 0.95f).toArgb() + val contentColor = MaterialTheme.colorScheme.onBackground.toArgb() + LaunchedEffect(darkTheme) { - val barStyle = SystemBarStyle.auto( + val statusBarStyle = 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) + val navigationBarStyle = if (!darkTheme) { + SystemBarStyle.light(scrimColor, contentColor) + } else { + SystemBarStyle.dark(scrimColor) + } + + enableEdgeToEdge( + statusBarStyle = statusBarStyle, + navigationBarStyle = navigationBarStyle, + ) } } @@ -87,7 +93,7 @@ fun getColorScheme(darkTheme: Boolean): ColorScheme { ThemeProvider.INSTANCE.get(context).colorScheme } - return colorScheme.toM3ColorScheme(isDark = darkTheme) + return colorScheme.toComposeColorScheme(isDark = darkTheme) } val isSelectedThemeDark: Boolean