Skip to content

Commit 692ae87

Browse files
committed
Add theme switcher and a simple black and white theme
1 parent b8f61b6 commit 692ae87

15 files changed

Lines changed: 194 additions & 164 deletions

File tree

app/src/main/java/com/readrops/app/MainActivity.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,21 +55,21 @@ class MainActivity : ComponentActivity(), KoinComponent {
5555
val initialUseDarkTheme = runBlocking {
5656
useDarkTheme(preferences.theme.flow.first(), darkFlag)
5757
}
58-
val initialUseAltColours = runBlocking {
59-
preferences.themeUseAlt.flow.first()
58+
val initialColourScheme = runBlocking {
59+
preferences.theme.flow.first()
6060
}
6161

6262
setContent {
6363
KoinAndroidContext {
6464
val useDarkTheme by preferences.theme.flow
6565
.map { mode -> useDarkTheme(mode, darkFlag) }
6666
.collectAsState(initial = initialUseDarkTheme)
67-
val useAltColours by preferences.themeUseAlt.flow
68-
.collectAsState(initial = initialUseAltColours)
67+
val themeColourScheme by preferences.themeColourScheme.flow
68+
.collectAsState(initial = initialColourScheme)
6969

7070
ReadropsTheme(
7171
useDarkTheme = useDarkTheme,
72-
useAltColours = useAltColours
72+
themeColourScheme = themeColourScheme
7373
) {
7474
val navigationBarElevation = NavigationBarDefaults.Elevation
7575

app/src/main/java/com/readrops/app/more/preferences/PreferencesScreen.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,10 +99,15 @@ class PreferencesScreen : AndroidScreen() {
9999
onValueChange = {}
100100
)
101101

102-
SwitchPreferenceWidget(
103-
preference = loadedState.themeUseAlt.second,
104-
isChecked = loadedState.themeUseAlt.first,
105-
title = stringResource(id = R.string.use_alternate_theme_colours)
102+
ListPreferenceWidget(
103+
preference = loadedState.themeColourScheme.second,
104+
selectedKey = loadedState.themeColourScheme.first,
105+
entries = mapOf(
106+
"readrops" to stringResource(id = R.string.theme_readrops),
107+
"blackwhite" to stringResource(id = R.string.theme_blackwhite),
108+
),
109+
title = stringResource(id = R.string.theme_color_scheme),
110+
onValueChange = {}
106111
)
107112

108113
ListPreferenceWidget(

app/src/main/java/com/readrops/app/more/preferences/PreferencesScreenModel.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class PreferencesScreenModel(
2626
preferences.hideReadFeeds.flow,
2727
preferences.openLinksWith.flow,
2828
preferences.timelineItemSize.flow,
29-
preferences.themeUseAlt.flow
29+
preferences.themeColourScheme.flow
3030
)
3131

3232
combine(
@@ -39,7 +39,7 @@ class PreferencesScreenModel(
3939
hideReadFeeds = (list[3] as Boolean) to preferences.hideReadFeeds,
4040
openLinksWith = (list[4] as String) to preferences.openLinksWith,
4141
timelineItemSize = (list[5] as String) to preferences.timelineItemSize,
42-
themeUseAlt = (list[6] as Boolean) to preferences.themeUseAlt
42+
themeColourScheme = (list[6] as String) to preferences.themeColourScheme
4343
)
4444
}.collect { theme ->
4545
mutableState.update { theme }
@@ -60,7 +60,7 @@ sealed class PreferencesScreenState {
6060
val hideReadFeeds: PreferenceState<Boolean>,
6161
val openLinksWith: PreferenceState<String>,
6262
val timelineItemSize: PreferenceState<String>,
63-
val themeUseAlt: PreferenceState<Boolean>
63+
val themeColourScheme: PreferenceState<String>
6464
) : PreferencesScreenState()
6565

6666
}

app/src/main/java/com/readrops/app/util/Preferences.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,15 @@ class Preferences(
2626
) {
2727

2828
val theme = Preference(
29-
dataStore = dataStore,
30-
key = stringPreferencesKey("theme"),
31-
default = "system"
32-
)
29+
dataStore = dataStore,
30+
key = stringPreferencesKey("theme"),
31+
default = "system"
32+
)
3333

34-
val themeUseAlt = Preference(
34+
val themeColourScheme = Preference(
3535
dataStore = dataStore,
36-
key = booleanPreferencesKey("theme_use_alt"),
37-
default = false
36+
key = stringPreferencesKey("theme_color_scheme"),
37+
default = "readrops"
3838
)
3939

4040
val backgroundSynchronization = Preference(

app/src/main/java/com/readrops/app/util/theme/Color.kt

Lines changed: 64 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.readrops.app.util.theme
22

33
import androidx.compose.ui.graphics.Color
44

5+
// Material Design Light
56
val md_theme_light_primary = Color(0xFF0062A2)
67
val md_theme_light_onPrimary = Color(0xFFFFFFFF)
78
val md_theme_light_primaryContainer = Color(0xFFD1E4FF)
@@ -33,6 +34,7 @@ val md_theme_light_surfaceTint = Color(0xFF0062A2)
3334
val md_theme_light_outlineVariant = Color(0xFFC3C7CF)
3435
val md_theme_light_scrim = Color(0xFF000000)
3536

37+
// Material Design Dark
3638
val md_theme_dark_primary = Color(0xFF9DCAFF)
3739
val md_theme_dark_onPrimary = Color(0xFF003257)
3840
val md_theme_dark_primaryContainer = Color(0xFF00497C)
@@ -64,75 +66,68 @@ val md_theme_dark_surfaceTint = Color(0xFF9DCAFF)
6466
val md_theme_dark_outlineVariant = Color(0xFF42474E)
6567
val md_theme_dark_scrim = Color(0xFF000000)
6668

67-
val md_alt_theme_light_primary = Color(0xFF0062A2)
68-
val md_alt_theme_light_onPrimary = Color(0xFFFFFFFF)
69-
val md_alt_theme_light_primaryContainer = Color(0xFFD1E4FF)
70-
val md_alt_theme_light_onPrimaryContainer = Color(0xFF001D35)
71-
val md_alt_theme_light_secondary = Color(0xFFA43D00)
72-
val md_alt_theme_light_onSecondary = Color(0xFFFFFFFF)
73-
val md_alt_theme_light_secondaryContainer = Color(0xFFFFDBCD)
74-
val md_alt_theme_light_onSecondaryContainer = Color(0xFF360F00)
75-
val md_alt_theme_light_tertiary = Color(0xFF006D3D)
76-
val md_alt_theme_light_onTertiary = Color(0xFFFFFFFF)
77-
val md_alt_theme_light_tertiaryContainer = Color(0xFF97F7B7)
78-
val md_alt_theme_light_onTertiaryContainer = Color(0xFF00210F)
79-
val md_alt_theme_light_error = Color(0xFFBA1A1A)
80-
val md_alt_theme_light_errorContainer = Color(0xFFFFDAD6)
81-
val md_alt_theme_light_onError = Color(0xFFFFFFFF)
82-
val md_alt_theme_light_onErrorContainer = Color(0xFF410002)
83-
val md_alt_theme_light_background = Color(0xFFF8FDFF)
84-
val md_alt_theme_light_onBackground = Color(0xFF001F25)
85-
val md_alt_theme_light_surface = Color(0xFFF8FDFF)
86-
val md_alt_theme_light_onSurface = Color(0xFF001F25)
87-
//val md_alt_theme_light_surfaceVariant = Color(0xFFDFE2EB)
88-
val md_alt_theme_light_surfaceVariant = Color(0xFFF8FDFF)
89-
val md_alt_theme_light_onSurfaceVariant = Color(0xFF42474E)
90-
val md_alt_theme_light_outline = Color(0xFF73777F)
91-
val md_alt_theme_light_inverseOnSurface = Color(0xFFD6F6FF)
92-
val md_alt_theme_light_inverseSurface = Color(0xFF00363F)
93-
val md_alt_theme_light_inversePrimary = Color(0xFF9DCAFF)
94-
val md_alt_theme_light_shadow = Color(0xFF000000)
95-
val md_alt_theme_light_surfaceTint = Color(0xFF0062A2)
96-
val md_alt_theme_light_outlineVariant = Color(0xFFC3C7CF)
97-
val md_alt_theme_light_scrim = Color(0xFF000000)
69+
// Black & White Light
70+
val bw_theme_light_primary = Color(0xFF000000)
71+
val bw_theme_light_onPrimary = Color(0xFFFFFFFF)
72+
val bw_theme_light_primaryContainer = Color(0xFF262626)
73+
val bw_theme_light_onPrimaryContainer = Color(0xFFB1B1B1)
74+
val bw_theme_light_secondary = Color(0xFF5E5E5E)
75+
val bw_theme_light_onSecondary = Color(0xFFFFFFFF)
76+
val bw_theme_light_secondaryContainer = Color(0xFFE6E6E6)
77+
val bw_theme_light_onSecondaryContainer = Color(0xFF4A4A4A)
78+
val bw_theme_light_tertiary = Color(0xFF000000)
79+
val bw_theme_light_onTertiary = Color(0xFFFFFFFF)
80+
val bw_theme_light_tertiaryContainer = Color(0xFF262626)
81+
val bw_theme_light_onTertiaryContainer = Color(0xFFB1B1B1)
82+
val bw_theme_light_error = Color(0xFF5E5E5E)
83+
val bw_theme_light_onError = Color(0xFFFFFFFF)
84+
val bw_theme_light_errorContainer = Color(0xFFE6E6E6)
85+
val bw_theme_light_onErrorContainer = Color(0xFF000000)
86+
val bw_theme_light_background = Color(0xFFF9F9F9)
87+
val bw_theme_light_onBackground = Color(0xFF1B1B1B)
88+
val bw_theme_light_surface = Color(0xFFF9F9F9)
89+
val bw_theme_light_onSurface = Color(0xFF1B1B1B)
90+
val bw_theme_light_surfaceVariant = Color(0xFFFFFFFF)
91+
val bw_theme_light_onSurfaceVariant = Color(0xFF4C4546)
92+
val bw_theme_light_outline = Color(0xFF7E7576)
93+
val bw_theme_light_inverseOnSurface = Color(0xFFF1F1F1)
94+
val bw_theme_light_inverseSurface = Color(0xFF303030)
95+
val bw_theme_light_inversePrimary = Color(0xFFC6C6C6)
96+
val bw_theme_light_shadow = Color(0xFF4C4546)
97+
val bw_theme_light_surfaceTint = Color(0xFFF3F3F3)
98+
val bw_theme_light_outlineVariant = Color(0xFFF3F3F3)
99+
val bw_theme_light_scrim = Color(0xFF000000)
98100

99-
val md_alt_theme_dark_primary = Color(0xFFFFB597)
100-
//val md_alt_theme_dark_primary = Color(0xFF9DCAFF)
101-
val md_alt_theme_dark_onPrimary = Color(0xFF003257) //
102-
//val md_alt_theme_dark_primaryContainer = Color(0xFF00497C)
103-
val md_alt_theme_dark_primaryContainer = Color(0xFF7D2D00)
104-
val md_alt_theme_dark_onPrimaryContainer = Color(0xFFD1E4FF)
105-
val md_alt_theme_dark_secondary = Color(0xFFFFB597)
106-
val md_alt_theme_dark_onSecondary = Color(0xFF581D00)
107-
val md_alt_theme_dark_secondaryContainer = Color(0xFF7D2D00)
108-
val md_alt_theme_dark_onSecondaryContainer = Color(0xFFFFDBCD)
109-
val md_alt_theme_dark_tertiary = Color(0xFF7BDA9C)
110-
val md_alt_theme_dark_onTertiary = Color(0xFF00391D)
111-
val md_alt_theme_dark_tertiaryContainer = Color(0xFF00522C)
112-
val md_alt_theme_dark_onTertiaryContainer = Color(0xFF97F7B7)
113-
val md_alt_theme_dark_error = Color(0xFFFFB4AB)
114-
val md_alt_theme_dark_errorContainer = Color(0xFF93000A)
115-
val md_alt_theme_dark_onError = Color(0xFF690005)
116-
val md_alt_theme_dark_onErrorContainer = Color(0xFFFFDAD6)
117-
// val md_alt_theme_dark_background = Color(0xFF001F25)
118-
val md_alt_theme_dark_background = Color(0xFF000000)
119-
//val md_alt_theme_dark_onBackground = Color(0xFFA6EEFF)
120-
val md_alt_theme_dark_onBackground = Color(0xFFFFFFFF)
121-
// val md_alt_theme_dark_surface = Color(0xFF001F25)
122-
val md_alt_theme_dark_surface = Color(0xFF000000)
123-
//val md_alt_theme_dark_onSurface = Color(0xFFA6EEFF)
124-
val md_alt_theme_dark_onSurface = Color(0xFFFFFFFF)
125-
//val md_alt_theme_dark_surfaceVariant = Color(0xFF42474E)
126-
val md_alt_theme_dark_surfaceVariant = Color(0xFF000000)
127-
val md_alt_theme_dark_onSurfaceVariant = Color(0xFFC3C7CF)
128-
val md_alt_theme_dark_outline = Color(0xFF8D9199)
129-
val md_alt_theme_dark_inverseOnSurface = Color(0xFF001F25) //
130-
val md_alt_theme_dark_inverseSurface = Color(0xFFA6EEFF)
131-
//val md_alt_theme_dark_inversePrimary = Color(0xFF0062A2)
132-
val md_alt_theme_dark_inversePrimary = Color(0xFF7D2D00)
133-
val md_alt_theme_dark_shadow = Color(0xFF000000)
134-
val md_alt_theme_dark_surfaceTint = Color(0xFF9DCAFF)
135-
val md_alt_theme_dark_outlineVariant = Color(0xFF42474E)
136-
val md_alt_theme_dark_scrim = Color(0xFF000000)
101+
// Black & White Dark
102+
val bw_theme_dark_primary = Color(0xFFC6C6C6)
103+
val bw_theme_dark_onPrimary = Color(0xFF303030)
104+
val bw_theme_dark_onPrimaryContainer = Color(0xFF969696)
105+
val bw_theme_dark_primaryContainer = Color(0xFF000000)
106+
val bw_theme_dark_secondary = Color(0xFFC6C6C6)
107+
val bw_theme_dark_onSecondary = Color(0xFF303030)
108+
val bw_theme_dark_secondaryContainer = Color(0xFF3D3D3D)
109+
val bw_theme_dark_onSecondaryContainer = Color(0xFFD1D1D1)
110+
val bw_theme_dark_tertiary = Color(0xFFC6C6C6)
111+
val bw_theme_dark_onTertiary = Color(0xFF303030)
112+
val bw_theme_dark_tertiaryContainer = Color(0xFF000000)
113+
val bw_theme_dark_onTertiaryContainer = Color(0xFFFFFFFF)
114+
val bw_theme_dark_error = Color(0xFF5E5E5E)
115+
val bw_theme_dark_onError = Color(0xFF000000)
116+
val bw_theme_dark_errorContainer = Color(0xFF0A0A0A)
117+
val bw_theme_dark_onErrorContainer = Color(0xFFFFFFFF)
118+
val bw_theme_dark_background = Color(0xFF131313)
119+
val bw_theme_dark_onBackground = Color(0xFFFFFFFF)
120+
val bw_theme_dark_surface = Color(0xFF131313)
121+
val bw_theme_dark_onSurface = Color(0xFFE2E2E2)
122+
val bw_theme_dark_surfaceVariant = Color(0xFF131313)
123+
val bw_theme_dark_onSurfaceVariant = Color(0xFFCFC4C5)
124+
val bw_theme_dark_outline = Color(0xFF988E90)
125+
val bw_theme_dark_inverseSurface = Color(0xFFE2E2E2)
126+
val bw_theme_dark_inverseOnSurface = Color(0xFF303030)
127+
val bw_theme_dark_inversePrimary = Color(0xFFFFFFFF)
128+
val bw_theme_dark_shadow = Color(0xFF4C4546)
129+
val bw_theme_dark_surfaceTint = Color(0xFF0A0A0A)
130+
val bw_theme_dark_outlineVariant = Color(0xFF4C4546)
131+
val bw_theme_dark_scrim = Color(0xFF000000)
137132

138133
val seed = Color(0xFF0072BC)

0 commit comments

Comments
 (0)