fix(#40): tint status and navigation bars to match active theme and flip icon appearance #46

Merged
admin merged 1 commits from feat/40-status-and-navigation-bar-colors-dont-follow-current-theme into main 2026-06-28 14:54:59 +00:00
@@ -12,6 +12,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.SideEffect import androidx.compose.runtime.SideEffect
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.luminance
import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.platform.LocalView import androidx.compose.ui.platform.LocalView
import androidx.core.view.WindowCompat import androidx.core.view.WindowCompat
@@ -25,6 +26,8 @@ fun AppTheme(
darkTheme -> darkColorScheme() darkTheme -> darkColorScheme()
else -> lightColorScheme() else -> lightColorScheme()
} }
StatusBarColor(colorScheme.background)
NavigationBarColor(colorScheme.background)
Box( Box(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
@@ -45,9 +48,12 @@ fun NavigationBarColor(color: Color) {
val activity = LocalActivity.current val activity = LocalActivity.current
if (!view.isInEditMode) { if (!view.isInEditMode) {
SideEffect { SideEffect {
activity?.window?.let { activity?.window?.let { window ->
it.navigationBarColor = color.toArgb() window.navigationBarColor = color.toArgb()
WindowCompat.setDecorFitsSystemWindows(it, false) WindowCompat.setDecorFitsSystemWindows(window, false)
WindowCompat.getInsetsController(window, view).apply {
isAppearanceLightNavigationBars = color.luminance() > 0.5f
}
} }
} }
} }
@@ -60,9 +66,12 @@ fun StatusBarColor(color: Color) {
val activity = LocalActivity.current val activity = LocalActivity.current
if (!view.isInEditMode) { if (!view.isInEditMode) {
SideEffect { SideEffect {
activity?.window?.let { activity?.window?.let { window ->
it.statusBarColor = color.toArgb() window.statusBarColor = color.toArgb()
WindowCompat.setDecorFitsSystemWindows(it, false) WindowCompat.setDecorFitsSystemWindows(window, false)
WindowCompat.getInsetsController(window, view).apply {
isAppearanceLightStatusBars = color.luminance() > 0.5f
}
} }
} }
} }