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.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.luminance
import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.platform.LocalView
import androidx.core.view.WindowCompat
@@ -25,6 +26,8 @@ fun AppTheme(
darkTheme -> darkColorScheme()
else -> lightColorScheme()
}
StatusBarColor(colorScheme.background)
NavigationBarColor(colorScheme.background)
Box(
modifier = Modifier
.fillMaxSize()
@@ -45,9 +48,12 @@ fun NavigationBarColor(color: Color) {
val activity = LocalActivity.current
if (!view.isInEditMode) {
SideEffect {
activity?.window?.let {
it.navigationBarColor = color.toArgb()
WindowCompat.setDecorFitsSystemWindows(it, false)
activity?.window?.let { window ->
window.navigationBarColor = color.toArgb()
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
if (!view.isInEditMode) {
SideEffect {
activity?.window?.let {
it.statusBarColor = color.toArgb()
WindowCompat.setDecorFitsSystemWindows(it, false)
activity?.window?.let { window ->
window.statusBarColor = color.toArgb()
WindowCompat.setDecorFitsSystemWindows(window, false)
WindowCompat.getInsetsController(window, view).apply {
isAppearanceLightStatusBars = color.luminance() > 0.5f
}
}
}
}