diff --git a/app/src/main/java/com/m57/hermescontrol/theme/Theme.kt b/app/src/main/java/com/m57/hermescontrol/theme/Theme.kt index 57ebd37d..4577239b 100644 --- a/app/src/main/java/com/m57/hermescontrol/theme/Theme.kt +++ b/app/src/main/java/com/m57/hermescontrol/theme/Theme.kt @@ -15,7 +15,7 @@ import androidx.compose.ui.platform.LocalContext enum class ThemePreference { SYSTEM, LIGHT, DARK } -enum class ThemePreset { DEFAULT, MONOCHROME, GRUVBOX, CATPPUCCIN, AMOLED } +enum class ThemePreset { DEFAULT, MONOCHROME, GRUVBOX, CATPPUCCIN, AMOLED, NEON_NOIR } enum class BottomNavDisplayMode { ICON_AND_TEXT, ICON_ONLY, TEXT_ONLY } @@ -226,6 +226,76 @@ private val AmoledDarkColorScheme = outline = Color(0xFF3A3A4A), ) +private val NeonNoirDarkColorScheme = + darkColorScheme( + primary = Color(0xFFFF6BF4), + onPrimary = Color(0xFF1A001A), + primaryContainer = Color(0xFF3A003A), + onPrimaryContainer = Color(0xFFFFCCF2), + secondary = Color(0xFFA78BFA), + onSecondary = Color(0xFF0F0B1A), + secondaryContainer = Color(0xFF2B1F59), + onSecondaryContainer = Color(0xFFD9CCFF), + tertiary = Color(0xFF60F0FF), + onTertiary = Color(0xFF003B40), + tertiaryContainer = Color(0xFF004F59), + onTertiaryContainer = Color(0xFFBFFAFF), + background = Color(0xFF0F0B1A), + onBackground = Color(0xFFE8E0F0), + surface = Color(0xFF1A1530), + onSurface = Color(0xFFE8E0F0), + surfaceVariant = Color(0xFF2B2540), + onSurfaceVariant = Color(0xFF9A90B0), + surfaceTint = Color(0xFFFF6BF4), + surfaceContainer = Color(0xFF1A1530), + surfaceContainerHigh = Color(0xFF252040), + surfaceContainerHighest = Color(0xFF2F2A50), + inverseSurface = Color(0xFFE8E0F0), + inverseOnSurface = Color(0xFF0F0B1A), + error = Color(0xFFFF3D68), + onError = Color.White, + errorContainer = Color(0xFF3A0A14), + onErrorContainer = Color(0xFFFFB3C0), + outline = Color(0xFF3A3060), + outlineVariant = Color(0xFF2E2545), + scrim = Color(0xFF000000), + ) + +private val NeonNoirLightColorScheme = + lightColorScheme( + primary = Color(0xFFC440A8), + onPrimary = Color.White, + primaryContainer = Color(0xFFFFD9F2), + onPrimaryContainer = Color(0xFF3A003A), + secondary = Color(0xFF7C4DFF), + onSecondary = Color.White, + secondaryContainer = Color(0xFFEDE0FF), + onSecondaryContainer = Color(0xFF1E0066), + tertiary = Color(0xFF0098A6), + onTertiary = Color.White, + tertiaryContainer = Color(0xFFBFFAFF), + onTertiaryContainer = Color(0xFF003B40), + background = Color(0xFFF5F0FA), + onBackground = Color(0xFF0F0B1A), + surface = Color.White, + onSurface = Color(0xFF0F0B1A), + surfaceVariant = Color(0xFFEDE6F5), + onSurfaceVariant = Color(0xFF7A7090), + surfaceTint = Color(0xFFC440A8), + surfaceContainer = Color(0xFFFDF8FF), + surfaceContainerHigh = Color(0xFFF0EDF5), + surfaceContainerHighest = Color(0xFFE6E0ED), + inverseSurface = Color(0xFF0F0B1A), + inverseOnSurface = Color(0xFFE8E0F0), + error = Color(0xFFB3261E), + onError = Color.White, + errorContainer = Color(0xFFF9DEDC), + onErrorContainer = Color(0xFF410E0B), + outline = Color(0xFFBFB8CC), + outlineVariant = Color(0xFFD9D2E3), + scrim = Color(0xFF000000), + ) + @Composable fun HermesControlTheme( themePreference: ThemePreference = LocalThemePreference.current, @@ -259,6 +329,7 @@ fun HermesControlTheme( ThemePreset.GRUVBOX -> if (darkTheme) GruvboxDarkColorScheme else GruvboxLightColorScheme ThemePreset.CATPPUCCIN -> if (darkTheme) CatppuccinDarkColorScheme else CatppuccinLightColorScheme ThemePreset.AMOLED -> if (darkTheme) AmoledDarkColorScheme else HermesLightColorScheme + ThemePreset.NEON_NOIR -> if (darkTheme) NeonNoirDarkColorScheme else NeonNoirLightColorScheme } } } @@ -317,6 +388,32 @@ fun HermesControlTheme( ) } + themePreset == ThemePreset.NEON_NOIR && darkTheme -> { + HermesStatusColors( + success = Color(0xFF6FEA8B), + successContainer = Color(0xFF0A3A14), + warning = Color(0xFFFFB347), + warningContainer = Color(0xFF3A2000), + error = Color(0xFFFF3D68), + errorContainer = Color(0xFF3A0A14), + info = Color(0xFF60F0FF), + infoContainer = Color(0xFF003B40), + ) + } + + themePreset == ThemePreset.NEON_NOIR && !darkTheme -> { + HermesStatusColors( + success = Color(0xFF1B873A), + successContainer = Color(0xFFD7F5E0), + warning = Color(0xFFB87800), + warningContainer = Color(0xFFFFEAB3), + error = Color(0xFFB3261E), + errorContainer = Color(0xFFF9DEDC), + info = Color(0xFF2E6FBD), + infoContainer = Color(0xFFD4E7FF), + ) + } + darkTheme -> { HermesStatusColors( success = StatusGreen, diff --git a/app/src/main/java/com/m57/hermescontrol/ui/settings/SettingsScreen.kt b/app/src/main/java/com/m57/hermescontrol/ui/settings/SettingsScreen.kt index c71ba7b0..a45b0a3b 100644 --- a/app/src/main/java/com/m57/hermescontrol/ui/settings/SettingsScreen.kt +++ b/app/src/main/java/com/m57/hermescontrol/ui/settings/SettingsScreen.kt @@ -862,6 +862,7 @@ private fun AppearanceSection( ThemePreset.GRUVBOX -> stringResource(R.string.theme_preset_gruvbox) ThemePreset.CATPPUCCIN -> stringResource(R.string.theme_preset_catppuccin) ThemePreset.AMOLED -> stringResource(R.string.theme_preset_amoled) + ThemePreset.NEON_NOIR -> stringResource(R.string.theme_preset_neon_noir) }, ) } @@ -895,6 +896,10 @@ private fun AppearanceSection( stringResource( R.string.theme_preset_amoled, ) + ThemePreset.NEON_NOIR -> + stringResource( + R.string.theme_preset_neon_noir, + ) }, ) }, diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 30ad22ba..1563b208 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -172,6 +172,7 @@ Gruvbox Catppuccin AMOLED Black (Dark only) + Neon Noir Profile: %1$s