Better handle status bar light/dark icons based on banner background color

This commit is contained in:
arkon 2022-12-14 22:54:34 -05:00
parent 7608cb0da3
commit 4992f87cb1
2 changed files with 20 additions and 9 deletions

View File

@ -19,6 +19,11 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
val DownloadedOnlyBannerBackgroundColor
@Composable get() = MaterialTheme.colorScheme.tertiary
val IncognitoModeBannerBackgroundColor
@Composable get() = MaterialTheme.colorScheme.primary
@Composable @Composable
fun WarningBanner( fun WarningBanner(
@StringRes textRes: Int, @StringRes textRes: Int,
@ -66,7 +71,7 @@ private fun DownloadedOnlyModeBanner(modifier: Modifier = Modifier) {
Text( Text(
text = stringResource(R.string.label_downloaded_only), text = stringResource(R.string.label_downloaded_only),
modifier = Modifier modifier = Modifier
.background(color = MaterialTheme.colorScheme.tertiary) .background(DownloadedOnlyBannerBackgroundColor)
.fillMaxWidth() .fillMaxWidth()
.padding(4.dp) .padding(4.dp)
.then(modifier), .then(modifier),
@ -81,7 +86,7 @@ private fun IncognitoModeBanner(modifier: Modifier = Modifier) {
Text( Text(
text = stringResource(R.string.pref_incognito_mode), text = stringResource(R.string.pref_incognito_mode),
modifier = Modifier modifier = Modifier
.background(color = MaterialTheme.colorScheme.primary) .background(IncognitoModeBannerBackgroundColor)
.fillMaxWidth() .fillMaxWidth()
.padding(4.dp) .padding(4.dp)
.then(modifier), .then(modifier),

View File

@ -29,6 +29,7 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.luminance
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
@ -51,6 +52,8 @@ import eu.kanade.domain.library.service.LibraryPreferences
import eu.kanade.domain.source.service.SourcePreferences import eu.kanade.domain.source.service.SourcePreferences
import eu.kanade.domain.ui.UiPreferences import eu.kanade.domain.ui.UiPreferences
import eu.kanade.presentation.components.AppStateBanners import eu.kanade.presentation.components.AppStateBanners
import eu.kanade.presentation.components.DownloadedOnlyBannerBackgroundColor
import eu.kanade.presentation.components.IncognitoModeBannerBackgroundColor
import eu.kanade.presentation.util.AssistContentScreen import eu.kanade.presentation.util.AssistContentScreen
import eu.kanade.presentation.util.DefaultNavigatorScreenTransition import eu.kanade.presentation.util.DefaultNavigatorScreenTransition
import eu.kanade.presentation.util.collectAsState import eu.kanade.presentation.util.collectAsState
@ -149,22 +152,25 @@ class MainActivity : BaseActivity() {
setComposeContent { setComposeContent {
val incognito by preferences.incognitoMode().collectAsState() val incognito by preferences.incognitoMode().collectAsState()
val download by preferences.downloadedOnly().collectAsState() val downloadOnly by preferences.downloadedOnly().collectAsState()
Column { Column {
AppStateBanners( AppStateBanners(
downloadedOnlyMode = download, downloadedOnlyMode = downloadOnly,
incognitoMode = incognito, incognitoMode = incognito,
) )
// Set statusbar color // Set statusbar color
val systemUiController = rememberSystemUiController() val systemUiController = rememberSystemUiController()
val isSystemInDarkTheme = isSystemInDarkTheme() val isSystemInDarkTheme = isSystemInDarkTheme()
val active = incognito || download val statusBarBackgroundColor = when {
val useDarkStatusBarIcons = if (isSystemInDarkTheme) active else !active downloadOnly -> DownloadedOnlyBannerBackgroundColor
LaunchedEffect(systemUiController, useDarkStatusBarIcons) { incognito -> IncognitoModeBannerBackgroundColor
else -> MaterialTheme.colorScheme.background
}
LaunchedEffect(systemUiController, statusBarBackgroundColor) {
systemUiController.setStatusBarColor( systemUiController.setStatusBarColor(
color = ComposeColor.Transparent, color = ComposeColor.Transparent,
darkIcons = useDarkStatusBarIcons, darkIcons = statusBarBackgroundColor.luminance() > 0.5,
transformColorForLightContent = { ComposeColor.Black }, transformColorForLightContent = { ComposeColor.Black },
) )
} }
@ -206,7 +212,7 @@ class MainActivity : BaseActivity() {
} }
// Consume insets already used by app state banners // Consume insets already used by app state banners
val boxModifier = if (incognito || download) { val boxModifier = if (incognito || downloadOnly) {
Modifier.consumeWindowInsets(WindowInsets.statusBars) Modifier.consumeWindowInsets(WindowInsets.statusBars)
} else { } else {
Modifier Modifier