From 0d480f5d0d578ae1008207650cacf15b86502194 Mon Sep 17 00:00:00 2001 From: Rahul Patel Date: Thu, 7 May 2026 16:05:17 +0530 Subject: [PATCH] theme: fix OEM skin edgecases --- .../com/aurora/store/compose/theme/Theme.kt | 42 +++++++++++++++++++ .../compose/ui/blacklist/BlacklistScreen.kt | 6 ++- .../compose/ui/details/AppDetailsScreen.kt | 2 +- .../compose/ui/onboarding/OnboardingScreen.kt | 8 +++- .../compose/ui/onboarding/PermissionsPage.kt | 34 +++++++-------- .../compose/ui/onboarding/WelcomePage.kt | 34 +++++++-------- .../store/compose/ui/search/SearchScreen.kt | 9 +++- 7 files changed, 93 insertions(+), 42 deletions(-) diff --git a/app/src/main/java/com/aurora/store/compose/theme/Theme.kt b/app/src/main/java/com/aurora/store/compose/theme/Theme.kt index e797d772f..0f9efeebb 100644 --- a/app/src/main/java/com/aurora/store/compose/theme/Theme.kt +++ b/app/src/main/java/com/aurora/store/compose/theme/Theme.kt @@ -5,6 +5,9 @@ package com.aurora.store.compose.theme +import android.app.Activity +import android.content.Context +import android.content.ContextWrapper import android.os.Build import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.material3.MaterialExpressiveTheme @@ -14,8 +17,11 @@ import androidx.compose.material3.dynamicDarkColorScheme import androidx.compose.material3.dynamicLightColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.runtime.Composable +import androidx.compose.runtime.SideEffect import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalView import androidx.compose.ui.res.colorResource +import androidx.core.view.WindowCompat import com.aurora.store.R import com.aurora.store.util.Preferences @@ -46,5 +52,41 @@ fun AuroraTheme(content: @Composable () -> Unit) { else -> if (isSystemInDarkTheme()) darkScheme else lightScheme } + val darkTheme = when (themeStyle) { + 1 -> false + 2 -> true + else -> isSystemInDarkTheme() + } + + /** + * Side effect to update the system bars to be transparent and match the theme's light/dark mode. + * This is necessary on OEM devices that don't properly support dynamic theming and may have issues with light/dark status bar icons. + */ + val view = LocalView.current + if (!view.isInEditMode) { + SideEffect { + val activity = view.context.findActivity() ?: return@SideEffect + val window = activity.window + + // Transparent system bars + window.statusBarColor = android.graphics.Color.TRANSPARENT + window.navigationBarColor = android.graphics.Color.TRANSPARENT + + // Control icon colors explicitly + WindowCompat + .getInsetsController(window, view) + .apply { + isAppearanceLightStatusBars = !darkTheme + isAppearanceLightNavigationBars = !darkTheme + } + } + } + MaterialExpressiveTheme(colorScheme = colorScheme, content = content) } + +tailrec fun Context.findActivity(): Activity? = when (this) { + is Activity -> this + is ContextWrapper -> baseContext.findActivity() + else -> null +} diff --git a/app/src/main/java/com/aurora/store/compose/ui/blacklist/BlacklistScreen.kt b/app/src/main/java/com/aurora/store/compose/ui/blacklist/BlacklistScreen.kt index d83ac2820..c55489080 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/blacklist/BlacklistScreen.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/blacklist/BlacklistScreen.kt @@ -38,6 +38,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.painterResource @@ -212,7 +213,10 @@ private fun ScreenContent( ) } }, - actions = { if (!packages.isNullOrEmpty()) SetupMenu() } + actions = { if (!packages.isNullOrEmpty()) SetupMenu() }, + colors = SearchBarDefaults.appBarWithSearchColors( + appBarContainerColor = Color.Transparent + ) ) } diff --git a/app/src/main/java/com/aurora/store/compose/ui/details/AppDetailsScreen.kt b/app/src/main/java/com/aurora/store/compose/ui/details/AppDetailsScreen.kt index 9b19680ea..6773c6a42 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/details/AppDetailsScreen.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/details/AppDetailsScreen.kt @@ -533,7 +533,7 @@ private fun ScreenContentApp( } ScrollHint( listState = listState, - bottomPadding = 5.dp, + bottomPadding = 72.dp, modifier = Modifier.align(Alignment.BottomCenter) ) } diff --git a/app/src/main/java/com/aurora/store/compose/ui/onboarding/OnboardingScreen.kt b/app/src/main/java/com/aurora/store/compose/ui/onboarding/OnboardingScreen.kt index 89c10872d..2d4d80891 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/onboarding/OnboardingScreen.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/onboarding/OnboardingScreen.kt @@ -22,12 +22,14 @@ import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.material3.TopAppBar +import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.adaptive.WindowAdaptiveInfo import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo import androidx.compose.runtime.Composable import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow @@ -82,7 +84,11 @@ private fun ScreenContent( modifier = Modifier.height(64.dp), title = { PageIndicator(totalPages = pages.size, currentPage = pagerState.currentPage) - } + }, + colors = TopAppBarDefaults.topAppBarColors( + containerColor = Color.Transparent, + scrolledContainerColor = Color.Transparent + ) ) }, bottomBar = { diff --git a/app/src/main/java/com/aurora/store/compose/ui/onboarding/PermissionsPage.kt b/app/src/main/java/com/aurora/store/compose/ui/onboarding/PermissionsPage.kt index 63fb49788..7018c6724 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/onboarding/PermissionsPage.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/onboarding/PermissionsPage.kt @@ -6,10 +6,8 @@ package com.aurora.store.compose.ui.onboarding import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue @@ -50,23 +48,21 @@ private fun PageContent( permissions = permissions, onPermissionCallback = onPermissionCallback, header = { - Surface(modifier = Modifier.fillMaxWidth()) { - Column( - modifier = Modifier.padding(dimensionResource(R.dimen.padding_medium)) - ) { - Text( - text = stringResource(R.string.onboarding_title_permissions), - style = MaterialTheme.typography.headlineLargeEmphasized, - maxLines = 1, - overflow = TextOverflow.Ellipsis - ) - Text( - text = stringResource(R.string.onboarding_permission_select), - style = MaterialTheme.typography.titleMedium, - maxLines = 2, - overflow = TextOverflow.Ellipsis - ) - } + Column( + modifier = Modifier.padding(dimensionResource(R.dimen.padding_medium)) + ) { + Text( + text = stringResource(R.string.onboarding_title_permissions), + style = MaterialTheme.typography.headlineLargeEmphasized, + maxLines = 1, + overflow = TextOverflow.Ellipsis + ) + Text( + text = stringResource(R.string.onboarding_permission_select), + style = MaterialTheme.typography.titleMedium, + maxLines = 2, + overflow = TextOverflow.Ellipsis + ) } } ) diff --git a/app/src/main/java/com/aurora/store/compose/ui/onboarding/WelcomePage.kt b/app/src/main/java/com/aurora/store/compose/ui/onboarding/WelcomePage.kt index 0b1ea6550..192307972 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/onboarding/WelcomePage.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/onboarding/WelcomePage.kt @@ -9,12 +9,10 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue @@ -101,23 +99,21 @@ private fun PageContent(onAboutAurora: () -> Unit = {}) { verticalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.margin_xxsmall)) ) { stickyHeader { - Surface(modifier = Modifier.fillMaxWidth()) { - Column( - modifier = Modifier.padding(dimensionResource(R.dimen.padding_medium)) - ) { - Text( - text = stringResource(R.string.onboarding_title_welcome), - style = MaterialTheme.typography.headlineLargeEmphasized, - maxLines = 1, - overflow = TextOverflow.Ellipsis - ) - Text( - text = stringResource(R.string.onboarding_welcome_select), - style = MaterialTheme.typography.titleMedium, - maxLines = 1, - overflow = TextOverflow.Ellipsis - ) - } + Column( + modifier = Modifier.padding(dimensionResource(R.dimen.padding_medium)) + ) { + Text( + text = stringResource(R.string.onboarding_title_welcome), + style = MaterialTheme.typography.headlineLargeEmphasized, + maxLines = 1, + overflow = TextOverflow.Ellipsis + ) + Text( + text = stringResource(R.string.onboarding_welcome_select), + style = MaterialTheme.typography.titleMedium, + maxLines = 1, + overflow = TextOverflow.Ellipsis + ) } } diff --git a/app/src/main/java/com/aurora/store/compose/ui/search/SearchScreen.kt b/app/src/main/java/com/aurora/store/compose/ui/search/SearchScreen.kt index a04ced42e..021731e56 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/search/SearchScreen.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/search/SearchScreen.kt @@ -51,6 +51,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.platform.LocalSoftwareKeyboardController import androidx.compose.ui.res.dimensionResource @@ -210,7 +211,13 @@ private fun ScreenContent( ) } - AppBarWithSearch(state = searchBarState, inputField = inputField) + AppBarWithSearch( + state = searchBarState, + inputField = inputField, + colors = SearchBarDefaults.appBarWithSearchColors( + appBarContainerColor = Color.Transparent + ) + ) ExpandedDockedSearchBar(state = searchBarState, inputField = inputField) { suggestions.forEach { suggestion -> SearchSuggestionListItem(