Improve jetpack compose edge-to-edge handling

This commit is contained in:
SuperDragonXD
2024-08-18 16:30:14 +08:00
parent a96634f975
commit 4c33d346df
3 changed files with 23 additions and 15 deletions

View File

@@ -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,

View File

@@ -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,
)

View File

@@ -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