From 8cf989a23906d0b1b6e13154e00be102da2082be Mon Sep 17 00:00:00 2001 From: kmmiio99o Date: Fri, 16 Jan 2026 20:44:29 +0100 Subject: [PATCH] feat: Add basic implementation of Amoled mode in the manager and fix some misspells TODO: - Fix instance card to also use Amoled when needed --- .../com/aliucord/manager/MainActivity.kt | 1 + .../manager/manager/PreferencesManager.kt | 1 + .../ui/screens/settings/SettingsScreen.kt | 8 +++ .../com/aliucord/manager/ui/theme/Theme.kt | 58 ++++++++++++++++++- .../manager/ui/theme/ThemeCustomColors.kt | 12 ++++ app/src/main/res/values/strings.xml | 9 ++- 6 files changed, 84 insertions(+), 5 deletions(-) diff --git a/app/src/main/kotlin/com/aliucord/manager/MainActivity.kt b/app/src/main/kotlin/com/aliucord/manager/MainActivity.kt index 55237e8..6e34f6e 100644 --- a/app/src/main/kotlin/com/aliucord/manager/MainActivity.kt +++ b/app/src/main/kotlin/com/aliucord/manager/MainActivity.kt @@ -42,6 +42,7 @@ class MainActivity : ComponentActivity() { ManagerTheme( theme = preferences.theme, dynamicColor = preferences.dynamicColor, + amoled = preferences.amoled, ) { if (BuildConfig.RELEASE) { UpdaterDialog() diff --git a/app/src/main/kotlin/com/aliucord/manager/manager/PreferencesManager.kt b/app/src/main/kotlin/com/aliucord/manager/manager/PreferencesManager.kt index 78366a8..20a9b54 100644 --- a/app/src/main/kotlin/com/aliucord/manager/manager/PreferencesManager.kt +++ b/app/src/main/kotlin/com/aliucord/manager/manager/PreferencesManager.kt @@ -8,6 +8,7 @@ import com.aliucord.manager.ui.theme.Theme @Stable class PreferencesManager(preferences: SharedPreferences) : BasePreferenceManager(preferences) { var theme by enumPreference("theme", Theme.System) + var amoled by booleanPreference("amoled", false) var dynamicColor by booleanPreference("dynamic_color", true) var devMode by booleanPreference("dev_mode", false) var installer by enumPreference("installer", InstallerSetting.PM) diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/screens/settings/SettingsScreen.kt b/app/src/main/kotlin/com/aliucord/manager/ui/screens/settings/SettingsScreen.kt index 607d12e..387270f 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/screens/settings/SettingsScreen.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/screens/settings/SettingsScreen.kt @@ -98,6 +98,14 @@ class SettingsScreen : Screen, Parcelable { } + SettingsSwitch( + label = stringResource(R.string.setting_amoled), + secondaryLabel = stringResource(R.string.setting_amoled_desc), + pref = preferences.amoled, + icon = { Icon(painterResource(R.drawable.ic_night), null) }, + onPrefChange = { preferences.amoled = it }, + ) + // Material You theming on Android 12+ if (Build.VERSION.SDK_INT >= 31) { SettingsSwitch( diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/theme/Theme.kt b/app/src/main/kotlin/com/aliucord/manager/ui/theme/Theme.kt index 1ff9074..49aa4eb 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/theme/Theme.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/theme/Theme.kt @@ -20,6 +20,7 @@ import dev.shiggy.manager.R fun ManagerTheme( theme: Theme = Theme.System, dynamicColor: Boolean = true, + amoled: Boolean = false, content: @Composable () -> Unit, ) { val dynamicColor = dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S @@ -28,12 +29,63 @@ fun ManagerTheme( Theme.Dark -> true Theme.Light -> false } - val colorScheme = when { - dynamicColor && darkTheme -> dynamicDarkColorScheme(LocalContext.current) - dynamicColor && !darkTheme -> dynamicLightColorScheme(LocalContext.current) + + val context = LocalContext.current + + val baseScheme = when { + dynamicColor && darkTheme -> dynamicDarkColorScheme(context) + dynamicColor && !darkTheme -> dynamicLightColorScheme(context) darkTheme -> darkColorScheme() else -> lightColorScheme() } + + val colorScheme = if (amoled && darkTheme) { + baseScheme.copy( + // Core surfaces: true black with white content + background = Color(0xFF000000), + onBackground = Color(0xFFFFFFFF), + surface = Color(0xFF000000), + onSurface = Color(0xFFFFFFFF), + + // Surface variants / tints for containers and subtle surfaces + surfaceVariant = Color(0xFF000000), + onSurfaceVariant = Color(0xFFFFFFFF), + surfaceTint = Color(0xFF000000), + + // Primary (controls). Set both primary and primaryContainer to white so + // Filled / FilledTonal controls and other components using either token + // will have a white container with black text/icons. + primary = Color(0xFFFFFFFF), + onPrimary = Color(0xFF000000), + primaryContainer = Color(0xFFFFFFFF), + onPrimaryContainer = Color(0xFF000000), + + // Secondary / tertiary: match primary behavior for consistency across different control types + secondary = Color(0xFFFFFFFF), + onSecondary = Color(0xFF000000), + secondaryContainer = Color(0xFFFFFFFF), + onSecondaryContainer = Color(0xFF000000), + + tertiary = Color(0xFFFFFFFF), + onTertiary = Color(0xFF000000), + tertiaryContainer = Color(0xFFFFFFFF), + onTertiaryContainer = Color(0xFF000000), + + // Inverse surfaces for components that might use them + inverseSurface = Color(0xFF121212), + inverseOnSurface = Color(0xFFFFFFFF), + + // Outline and subtle elements: semi-transparent white for edges/highlights + outline = Color(0x66FFFFFF), + + // Preserve error semantics from base (keeps readable error colors) + error = baseScheme.error, + onError = baseScheme.onError, + errorContainer = baseScheme.errorContainer, + onErrorContainer = baseScheme.onErrorContainer, + ) + } else baseScheme + val customColors = when (darkTheme) { true -> DarkCustomColors false -> LightCustomColors diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/theme/ThemeCustomColors.kt b/app/src/main/kotlin/com/aliucord/manager/ui/theme/ThemeCustomColors.kt index ff572e4..e2f4671 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/theme/ThemeCustomColors.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/theme/ThemeCustomColors.kt @@ -19,6 +19,10 @@ data class CustomColors( val onWarning: Color, val warningContainer: Color, val onWarningContainer: Color, + val instanceCardBackground: Color, + val instanceCardContent: Color, + val instanceCardButtonContainer: Color, + val instanceCardButtonContent: Color, ) private val YellowAlt1 = Color(0xFFE9C414) @@ -32,6 +36,10 @@ val DarkCustomColors = CustomColors( onWarning = DarkBrown, warningContainer = DarkBronze, onWarningContainer = Shandy, + instanceCardBackground = Color(0xFF0E0E0E), + instanceCardContent = Color(0xFFFFFFFF), + instanceCardButtonContainer = Color(0xFFF2F2F2), + instanceCardButtonContent = Color(0xFF000000), ) val LightCustomColors = CustomColors( @@ -39,4 +47,8 @@ val LightCustomColors = CustomColors( onWarning = Color.White, warningContainer = Shandy, onWarningContainer = DarkerBrown, + instanceCardBackground = Color(0xFFFFFFFF), + instanceCardContent = Color(0xFF000000), + instanceCardButtonContainer = Color(0xFFFAFAFA), + instanceCardButtonContent = Color(0xFF000000), ) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a51ce93..74957e1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -51,8 +51,12 @@ Info Theme The theme to apply to this app + Amoled mode + Force true-black backgrounds for AMOLED displays Dynamic color - Enables Material You theming on Android 12+ + Enables Material You theming on Android 12+; dynamic colors will also be applied to the Amoled theme when enabled Installer The method to use for installing Shiggy Developer options @@ -72,6 +76,7 @@ System Dark Light + Amoled Back About @@ -84,7 +89,7 @@ Kettu - Creator ShiggyCord - Creator Bunny - Creator - Creator of Vendetta + Vendetta - Creator Original Manager Creator Failed to load