implement DebugTheme and update system bar colors in MainActivity

This commit is contained in:
jonasgaudian
2026-02-15 13:01:35 +01:00
parent 77b86208c3
commit fa3524268a
3 changed files with 136 additions and 7 deletions

View File

@@ -9,6 +9,7 @@ import eu.gaudian.translator.ui.theme.themes.CitrusSplashTheme
import eu.gaudian.translator.ui.theme.themes.CoffeeTheme import eu.gaudian.translator.ui.theme.themes.CoffeeTheme
import eu.gaudian.translator.ui.theme.themes.CrimsonTheme import eu.gaudian.translator.ui.theme.themes.CrimsonTheme
import eu.gaudian.translator.ui.theme.themes.CyberpunkTheme import eu.gaudian.translator.ui.theme.themes.CyberpunkTheme
import eu.gaudian.translator.ui.theme.themes.DebugTheme
import eu.gaudian.translator.ui.theme.themes.DefaultTheme import eu.gaudian.translator.ui.theme.themes.DefaultTheme
import eu.gaudian.translator.ui.theme.themes.ForestTheme import eu.gaudian.translator.ui.theme.themes.ForestTheme
import eu.gaudian.translator.ui.theme.themes.NordTheme import eu.gaudian.translator.ui.theme.themes.NordTheme
@@ -113,6 +114,7 @@ val AllThemes = listOf(
SpaceTheme, SpaceTheme,
CyberpunkTheme, CyberpunkTheme,
SynthwaveTheme, SynthwaveTheme,
DebugTheme,
) )

View File

@@ -0,0 +1,123 @@
@file:Suppress("HardCodedStringLiteral")
package eu.gaudian.translator.ui.theme.themes
import androidx.compose.ui.graphics.Color
import eu.gaudian.translator.ui.theme.AppTheme
import eu.gaudian.translator.ui.theme.ThemeColorSet
val DebugTheme = AppTheme(
name = "Debug",
lightColors = ThemeColorSet(
// Primary: Bright Red
primary = Color(0xFFFF0000),
onPrimary = Color(0xFFFFFFFF),
primaryContainer = Color(0xFFFFCCCC),
onPrimaryContainer = Color(0xFF660000),
// Secondary: Bright Blue
secondary = Color(0xFF0000FF),
onSecondary = Color(0xFFFFFFFF),
secondaryContainer = Color(0xFFCCCCFF),
onSecondaryContainer = Color(0xFF000066),
// Tertiary: Bright Green
tertiary = Color(0xFF00FF00),
onTertiary = Color(0xFF000000),
tertiaryContainer = Color(0xFFCCFFCC),
onTertiaryContainer = Color(0xFF006600),
// Error: Standard Material Red
error = Color(0xFFBA1A1A),
onError = Color(0xFFFFFFFF),
errorContainer = Color(0xFFFFDAD6),
onErrorContainer = Color(0xFF410002),
// Background: Light Gray
background = Color(0xFFF5F5F5),
onBackground = Color(0xFF333333),
// Surface: White
surface = Color(0xFFFFFFFF),
onSurface = Color(0xFF333333),
surfaceVariant = Color(0xFFE0E0E0),
onSurfaceVariant = Color(0xFF666666),
// Outline
outline = Color(0xFF999999),
outlineVariant = Color(0xFFCCCCCC),
// Scrim
scrim = Color(0xFF000000),
// Inverse colors
inverseSurface = Color(0xFF333333),
inverseOnSurface = Color(0xFFFFFFFF),
inversePrimary = Color(0xFFFF6666),
// Surface containers
surfaceDim = Color(0xFFE8E8E8),
surfaceBright = Color(0xFFFFFFFF),
surfaceContainerLowest = Color(0xFFFFFFFF),
surfaceContainerLow = Color(0xFFEEEEEE),
surfaceContainer = Color(0xFFF5F5F5),
surfaceContainerHigh = Color(0xFFFAFAFA),
surfaceContainerHighest = Color(0xFFFFFFFF)
),
darkColors = ThemeColorSet(
// Primary: Bright Cyan
primary = Color(0xFF00FFFF),
onPrimary = Color(0xFF000000),
primaryContainer = Color(0xFF66FFFF),
onPrimaryContainer = Color(0xFF003333),
// Secondary: Bright Magenta
secondary = Color(0xFFFF00FF),
onSecondary = Color(0xFF000000),
secondaryContainer = Color(0xFFFF66FF),
onSecondaryContainer = Color(0xFF330033),
// Tertiary: Bright Yellow
tertiary = Color(0xFFFFFF00),
onTertiary = Color(0xFF000000),
tertiaryContainer = Color(0xFFFFFF66),
onTertiaryContainer = Color(0xFF333300),
// Error: Standard Material Red
error = Color(0xFFFFB4AB),
onError = Color(0xFF690005),
errorContainer = Color(0xFF93000A),
onErrorContainer = Color(0xFFFFDAD6),
// Background: Dark Gray
background = Color(0xFF121212),
onBackground = Color(0xFFE0E0E0),
// Surface: Dark Gray
surface = Color(0xFF1E1E1E),
onSurface = Color(0xFFE0E0E0),
surfaceVariant = Color(0xFF2D2D2D),
onSurfaceVariant = Color(0xFFB0B0B0),
// Outline
outline = Color(0xFF555555),
outlineVariant = Color(0xFF333333),
// Scrim
scrim = Color(0xFF000000),
// Inverse colors
inverseSurface = Color(0xFFE0E0E0),
inverseOnSurface = Color(0xFF121212),
inversePrimary = Color(0xFF006666),
// Surface containers
surfaceDim = Color(0xFF121212),
surfaceBright = Color(0xFF333333),
surfaceContainerLowest = Color(0xFF0A0A0A),
surfaceContainerLow = Color(0xFF181818),
surfaceContainer = Color(0xFF1E1E1E),
surfaceContainerHigh = Color(0xFF252525),
surfaceContainerHighest = Color(0xFF2D2D2D)
)
)

View File

@@ -24,6 +24,7 @@ import androidx.compose.material3.Text
import androidx.compose.material3.TextButton import androidx.compose.material3.TextButton
import androidx.compose.material3.dynamicDarkColorScheme import androidx.compose.material3.dynamicDarkColorScheme
import androidx.compose.material3.dynamicLightColorScheme import androidx.compose.material3.dynamicLightColorScheme
import androidx.compose.material3.surfaceColorAtElevation
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
@@ -35,12 +36,14 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
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.toArgb
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.LocalView import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.Font import androidx.compose.ui.text.font.Font
import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.unit.dp
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import androidx.core.view.WindowCompat import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsControllerCompat import androidx.core.view.WindowInsetsControllerCompat
@@ -56,6 +59,7 @@ import eu.gaudian.translator.MyApplication
import eu.gaudian.translator.R import eu.gaudian.translator.R
import eu.gaudian.translator.ui.theme.AllFonts import eu.gaudian.translator.ui.theme.AllFonts
import eu.gaudian.translator.ui.theme.AllThemes import eu.gaudian.translator.ui.theme.AllThemes
import eu.gaudian.translator.ui.theme.ProvideSemanticColors
import eu.gaudian.translator.ui.theme.buildColorScheme import eu.gaudian.translator.ui.theme.buildColorScheme
import eu.gaudian.translator.utils.Log import eu.gaudian.translator.utils.Log
import eu.gaudian.translator.utils.findActivity import eu.gaudian.translator.utils.findActivity
@@ -150,9 +154,6 @@ fun TranslatorApp(
val activity = LocalContext.current.findActivity() val activity = LocalContext.current.findActivity()
val statusViewModel: StatusViewModel = hiltViewModel(activity) val statusViewModel: StatusViewModel = hiltViewModel(activity)
val navController = rememberNavController() val navController = rememberNavController()
val statusState by statusViewModel.status.collectAsStateWithLifecycle() val statusState by statusViewModel.status.collectAsStateWithLifecycle()
val keyboardInsets = WindowInsets.ime val keyboardInsets = WindowInsets.ime
@@ -357,9 +358,12 @@ private fun AppTheme(
val window = (view.context as Activity).window val window = (view.context as Activity).window
val windowInsetsController = WindowInsetsControllerCompat(window, view) val windowInsetsController = WindowInsetsControllerCompat(window, view)
//window.statusBarColor = android.graphics.Color.TRANSPARENT // We must keep this for older Android version!!!
//window.navigationBarColor = android.graphics.Color.TRANSPARENT @Suppress("DEPRECATION")
//TODO remove eventually window.statusBarColor = colorScheme.surface.toArgb()
//Elevation must be the same as BottomNavigationBar
@Suppress("DEPRECATION")
window.navigationBarColor = colorScheme.surfaceColorAtElevation(8.dp).toArgb()
windowInsetsController.isAppearanceLightStatusBars = !useDarkTheme windowInsetsController.isAppearanceLightStatusBars = !useDarkTheme
windowInsetsController.isAppearanceLightNavigationBars = !useDarkTheme windowInsetsController.isAppearanceLightNavigationBars = !useDarkTheme
@@ -400,7 +404,7 @@ private fun AppTheme(
colorScheme = colorScheme, colorScheme = colorScheme,
typography = dynamicTypography, typography = dynamicTypography,
) { ) {
eu.gaudian.translator.ui.theme.ProvideSemanticColors { ProvideSemanticColors {
content() content()
} }
} }