Merge branch 'kmmiio99o:main' into main

This commit is contained in:
OTKUSteyler 2026-01-16 21:29:00 +00:00 • committed by GitHub
commit 79a215d318
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 84 additions and 5 deletions

View file

@ -42,6 +42,7 @@ class MainActivity : ComponentActivity() {
ManagerTheme( ManagerTheme(
theme = preferences.theme, theme = preferences.theme,
dynamicColor = preferences.dynamicColor, dynamicColor = preferences.dynamicColor,
amoled = preferences.amoled,
) { ) {
if (BuildConfig.RELEASE) { if (BuildConfig.RELEASE) {
UpdaterDialog() UpdaterDialog()

View file

@ -8,6 +8,7 @@ import com.aliucord.manager.ui.theme.Theme
@Stable @Stable
class PreferencesManager(preferences: SharedPreferences) : BasePreferenceManager(preferences) { class PreferencesManager(preferences: SharedPreferences) : BasePreferenceManager(preferences) {
var theme by enumPreference("theme", Theme.System) var theme by enumPreference("theme", Theme.System)
var amoled by booleanPreference("amoled", false)
var dynamicColor by booleanPreference("dynamic_color", true) var dynamicColor by booleanPreference("dynamic_color", true)
var devMode by booleanPreference("dev_mode", false) var devMode by booleanPreference("dev_mode", false)
var installer by enumPreference<InstallerSetting>("installer", InstallerSetting.PM) var installer by enumPreference<InstallerSetting>("installer", InstallerSetting.PM)

View file

@ -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+ // Material You theming on Android 12+
if (Build.VERSION.SDK_INT >= 31) { if (Build.VERSION.SDK_INT >= 31) {
SettingsSwitch( SettingsSwitch(

View file

@ -20,6 +20,7 @@ import dev.goon.manager.R
fun ManagerTheme( fun ManagerTheme(
theme: Theme = Theme.System, theme: Theme = Theme.System,
dynamicColor: Boolean = true, dynamicColor: Boolean = true,
amoled: Boolean = false,
content: @Composable () -> Unit, content: @Composable () -> Unit,
) { ) {
val dynamicColor = dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S val dynamicColor = dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S
@ -28,12 +29,63 @@ fun ManagerTheme(
Theme.Dark -> true Theme.Dark -> true
Theme.Light -> false Theme.Light -> false
} }
val colorScheme = when {
dynamicColor && darkTheme -> dynamicDarkColorScheme(LocalContext.current) val context = LocalContext.current
dynamicColor && !darkTheme -> dynamicLightColorScheme(LocalContext.current)
val baseScheme = when {
dynamicColor && darkTheme -> dynamicDarkColorScheme(context)
dynamicColor && !darkTheme -> dynamicLightColorScheme(context)
darkTheme -> darkColorScheme() darkTheme -> darkColorScheme()
else -> lightColorScheme() 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) { val customColors = when (darkTheme) {
true -> DarkCustomColors true -> DarkCustomColors
false -> LightCustomColors false -> LightCustomColors

View file

@ -19,6 +19,10 @@ data class CustomColors(
val onWarning: Color, val onWarning: Color,
val warningContainer: Color, val warningContainer: Color,
val onWarningContainer: Color, val onWarningContainer: Color,
val instanceCardBackground: Color,
val instanceCardContent: Color,
val instanceCardButtonContainer: Color,
val instanceCardButtonContent: Color,
) )
private val YellowAlt1 = Color(0xFFE9C414) private val YellowAlt1 = Color(0xFFE9C414)
@ -32,6 +36,10 @@ val DarkCustomColors = CustomColors(
onWarning = DarkBrown, onWarning = DarkBrown,
warningContainer = DarkBronze, warningContainer = DarkBronze,
onWarningContainer = Shandy, onWarningContainer = Shandy,
instanceCardBackground = Color(0xFF0E0E0E),
instanceCardContent = Color(0xFFFFFFFF),
instanceCardButtonContainer = Color(0xFFF2F2F2),
instanceCardButtonContent = Color(0xFF000000),
) )
val LightCustomColors = CustomColors( val LightCustomColors = CustomColors(
@ -39,4 +47,8 @@ val LightCustomColors = CustomColors(
onWarning = Color.White, onWarning = Color.White,
warningContainer = Shandy, warningContainer = Shandy,
onWarningContainer = DarkerBrown, onWarningContainer = DarkerBrown,
instanceCardBackground = Color(0xFFFFFFFF),
instanceCardContent = Color(0xFF000000),
instanceCardButtonContainer = Color(0xFFFAFAFA),
instanceCardButtonContent = Color(0xFF000000),
) )

View file

@ -51,8 +51,12 @@
<string name="settings_header_info">Info</string> <string name="settings_header_info">Info</string>
<string name="setting_theme">Theme</string> <string name="setting_theme">Theme</string>
<string name="setting_theme_desc">The theme to apply to this app</string> <string name="setting_theme_desc">The theme to apply to this app</string>
<string name="setting_amoled">Amoled mode</string>
<string name="setting_amoled_desc">Force true-black backgrounds for AMOLED displays</string>
<string name="setting_dynamic_color">Dynamic color</string> <string name="setting_dynamic_color">Dynamic color</string>
<string name="setting_dynamic_color_desc">Enables Material You theming on Android 12+</string> <string
name="setting_dynamic_color_desc"
>Enables Material You theming on Android 12+; dynamic colors will also be applied to the Amoled theme when enabled</string>
<string name="setting_installer">Installer</string> <string name="setting_installer">Installer</string>
<string name="setting_installer_desc">The method to use for installing Goon</string> <string name="setting_installer_desc">The method to use for installing Goon</string>
<string name="setting_developer_options">Developer options</string> <string name="setting_developer_options">Developer options</string>
@ -72,6 +76,7 @@
<string name="theme_system">System</string> <string name="theme_system">System</string>
<string name="theme_dark">Dark</string> <string name="theme_dark">Dark</string>
<string name="theme_light">Light</string> <string name="theme_light">Light</string>
<string name="theme_amoled">Amoled</string>
<string name="navigation_back">Back</string> <string name="navigation_back">Back</string>
<string name="navigation_about">About</string> <string name="navigation_about">About</string>
@ -84,7 +89,7 @@
<string name="lead_role_kettu">Kettu - Creator</string> <string name="lead_role_kettu">Kettu - Creator</string>
<string name="lead_role_shiggycord">GoonCord - Creator</string> <string name="lead_role_shiggycord">GoonCord - Creator</string>
<string name="lead_role_bunny">Bunny - Creator</string> <string name="lead_role_bunny">Bunny - Creator</string>
<string name="role_creator_vendetta">Creator of Vendetta</string> <string name="role_creator_vendetta">Vendetta - Creator</string>
<string name="role_original_manager_creator">Original Manager Creator</string> <string name="role_original_manager_creator">Original Manager Creator</string>
<string name="network_load_fail">Failed to load</string> <string name="network_load_fail">Failed to load</string>