Skip to content

Commit e1d79c6

Browse files
committed
feat(ui): support AMOLED mode with system theme and preserve selection
1 parent 3134eea commit e1d79c6

2 files changed

Lines changed: 15 additions & 26 deletions

File tree

Android/app/src/main/java/com/droidspaces/app/ui/screen/SettingsScreen.kt

Lines changed: 14 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -332,11 +332,6 @@ fun SettingsScreen(
332332
checked = followSystemTheme,
333333
onCheckedChange = { checked ->
334334
prefsManager.followSystemTheme = checked
335-
// Disable AMOLED mode when enabling follow system theme
336-
// Theme state updates automatically via SharedPreferences listener
337-
if (checked && amoledMode) {
338-
prefsManager.amoledMode = false
339-
}
340335
}
341336
)
342337

@@ -349,28 +344,23 @@ fun SettingsScreen(
349344
checked = darkTheme,
350345
onCheckedChange = { checked ->
351346
prefsManager.darkTheme = checked
352-
// Disable AMOLED if dark theme is disabled
353-
// Theme state updates automatically via SharedPreferences listener
354-
if (!checked && amoledMode) {
355-
prefsManager.amoledMode = false
356-
}
357347
}
358348
)
349+
}
359350

360-
// AMOLED Mode (only shown when dark theme is explicitly enabled, directly beneath Dark Theme)
361-
if (darkTheme) {
362-
SwitchItem(
363-
icon = Icons.Default.RadioButtonUnchecked,
364-
title = context.getString(R.string.amoled_mode),
365-
summary = context.getString(R.string.amoled_mode_description),
366-
checked = amoledMode,
367-
enabled = true,
368-
onCheckedChange = { checked ->
369-
prefsManager.amoledMode = checked
370-
// Theme state updates automatically via SharedPreferences listener
371-
}
372-
)
373-
}
351+
// AMOLED Mode (shown when followSystemTheme is true OR manual darkTheme is true)
352+
if (followSystemTheme || darkTheme) {
353+
SwitchItem(
354+
icon = Icons.Default.RadioButtonUnchecked,
355+
title = context.getString(R.string.amoled_mode),
356+
summary = context.getString(R.string.amoled_mode_description),
357+
checked = amoledMode,
358+
enabled = true,
359+
onCheckedChange = { checked ->
360+
prefsManager.amoledMode = checked
361+
// Theme state updates automatically via SharedPreferences listener
362+
}
363+
)
374364
}
375365

376366
// Use Dynamic Color (Monet theming) - Only show on Android 12+

Android/app/src/main/java/com/droidspaces/app/ui/theme/ThemeStateHolder.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,14 +76,13 @@ fun rememberThemeState(): ThemeState {
7676

7777
val systemDark = isSystemInDarkTheme()
7878
val effectiveDarkTheme = if (followSystemTheme) systemDark else darkTheme
79-
val effectiveAmoledMode = amoledMode && effectiveDarkTheme // AMOLED only works with dark theme
8079

8180
// Return state that triggers recomposition when any theme preference changes
8281
return remember(followSystemTheme, darkTheme, amoledMode, useDynamicColor, systemDark, themePalette) {
8382
ThemeState(
8483
followSystemTheme = followSystemTheme,
8584
darkTheme = effectiveDarkTheme,
86-
amoledMode = effectiveAmoledMode,
85+
amoledMode = amoledMode,
8786
useDynamicColor = useDynamicColor,
8887
themePalette = themePalette
8988
)

0 commit comments

Comments
 (0)