Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion app/src/main/java/com/readrops/app/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -70,15 +70,21 @@ class MainActivity : ComponentActivity(), KoinComponent {
val initialUseDarkTheme = runBlocking {
useDarkTheme(preferences.theme.flow.first(), darkFlag)
}
val initialColorScheme = runBlocking {
preferences.themeColorScheme.flow.first()
}

setContent {
KoinAndroidContext {
val useDarkTheme by preferences.theme.flow
.map { mode -> useDarkTheme(mode, darkFlag) }
.collectAsState(initial = initialUseDarkTheme)
val themeColorScheme by preferences.themeColorScheme.flow
.collectAsState(initial = initialColorScheme)

ReadropsTheme(
useDarkTheme = useDarkTheme
useDarkTheme = useDarkTheme,
themeColorScheme = themeColorScheme
) {
enableEdgeToEdge(
statusBarStyle = SystemBarStyle.auto(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,18 @@ class PreferencesScreen : AndroidScreen() {
onValueChange = {}
)

ListPreferenceWidget(
preference = loadedState.themeColorScheme.second,
selectedKey = loadedState.themeColorScheme.first,
entries = mapOf(
"readrops" to stringResource(id = R.string.theme_readrops),
"blackwhite" to stringResource(id = R.string.theme_blackwhite),
"material3" to stringResource(id = R.string.theme_material3),
),
title = stringResource(id = R.string.theme_color_scheme),
onValueChange = {}
)

ListPreferenceWidget(
preference = loadedState.backgroundSyncPref.second,
selectedKey = loadedState.backgroundSyncPref.first,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ class PreferencesScreenModel(
preferences: Preferences,
dispatcher: CoroutineDispatcher = Dispatchers.IO
) : StateScreenModel<PreferencesScreenState>(PreferencesScreenState.Loading) {

init {
screenModelScope.launch(dispatcher) {
with(preferences) {
Expand All @@ -37,7 +38,8 @@ class PreferencesScreenModel(
useCustomShareIntentTpl.flow,
customShareIntentTpl.flow,
swipeToLeft.flow,
swipeToRight.flow
swipeToRight.flow,
themeColorScheme.flow
)

combine(
Expand All @@ -56,6 +58,7 @@ class PreferencesScreenModel(
customShareIntentTpl = (list[9] as String) to customShareIntentTpl,
swipeToLeft = (list[10] as String) to swipeToLeft,
swipeToRight = (list[11] as String) to swipeToRight,
themeColorScheme = (list[12] as String) to themeColorScheme,
exampleItem = if (database.itemDao().count() > 0) {
database.itemDao().selectFirst()
} else {
Expand Down Expand Up @@ -106,6 +109,7 @@ sealed class PreferencesScreenState {
val customShareIntentTpl: PreferenceState<String>,
val swipeToLeft: PreferenceState<String>,
val swipeToRight: PreferenceState<String>,
val themeColorScheme: PreferenceState<String>,
val exampleItem: Item,
val showDialog: Boolean = false
) : PreferencesScreenState()
Expand Down
6 changes: 6 additions & 0 deletions app/src/main/java/com/readrops/app/util/Preferences.kt
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,12 @@ class Preferences(
default = "system"
)

val themeColorScheme = Preference(
dataStore = dataStore,
key = stringPreferencesKey("theme_color_scheme"),
default = "readrops"
)

val backgroundSynchronization = Preference(
dataStore = dataStore,
key = stringPreferencesKey("synchro"),
Expand Down
75 changes: 75 additions & 0 deletions app/src/main/java/com/readrops/app/util/theme/BlackWhiteColor.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package com.readrops.app.util.theme

import androidx.compose.ui.graphics.Color

val primaryBlackWhiteLight = Color(0xFF000000)
val onPrimaryBlackWhiteLight = Color(0xFFFFFFFF)
val primaryContainerBlackWhiteLight = Color(0xFFE2E2E2)
val onPrimaryContainerBlackWhiteLight = Color(0xFF848484)
val secondaryBlackWhiteLight = Color(0xFF464647)
val onSecondaryBlackWhiteLight = Color(0xFFFFFFFF)
val secondaryContainerBlackWhiteLight = Color(0xFF000000)
val onSecondaryContainerBlackWhiteLight = Color(0xFFD9D8D7)
val tertiaryBlackWhiteLight = Color(0xFF000000)
val onTertiaryBlackWhiteLight = Color(0xFFFFFFFF)
val tertiaryContainerBlackWhiteLight = Color(0xFF1B1B1B)
val onTertiaryContainerBlackWhiteLight = Color(0xFF848484)
val errorBlackWhiteLight = Color(0xFF464647)
val onErrorBlackWhiteLight = Color(0xFFFFFFFF)
val errorContainerBlackWhiteLight = Color(0xFF000000)
val onErrorContainerBlackWhiteLight = Color(0xFFD9D8D7)
val backgroundBlackWhiteLight = Color(0xFFFFFFFF)
val onBackgroundBlackWhiteLight = Color(0xFF1B1B1B)
val surfaceBlackWhiteLight = Color(0xFFFCF8F8)
val onSurfaceBlackWhiteLight = Color(0xFF1C1B1B)
val surfaceVariantBlackWhiteLight = Color(0xFFFFFFFF)
val onSurfaceVariantBlackWhiteLight = Color(0xFF444748)
val outlineBlackWhiteLight = Color(0xFF747878)
val outlineVariantBlackWhiteLight = Color(0xFFC4C7C8)
val scrimBlackWhiteLight = Color(0xFF000000)
val inverseSurfaceBlackWhiteLight = Color(0xFF313030)
val inverseOnSurfaceBlackWhiteLight = Color(0xFFE2E2E2)
val inversePrimaryBlackWhiteLight = Color(0xFFC6C6C6)
val surfaceDimBlackWhiteLight = Color(0xFFE2E2E2)
val surfaceBrightBlackWhiteLight = Color(0xFFFCF8F8)
val surfaceContainerLowestBlackWhiteLight = Color(0xFFFFFFFF)
val surfaceContainerLowBlackWhiteLight = Color(0xFFE2E2E2)
val surfaceContainerBlackWhiteLight = Color(0xFFFFFFFF)
val surfaceContainerHighBlackWhiteLight = Color(0xFFE2E2E2)
val surfaceContainerHighestBlackWhiteLight = Color(0xFFFFFFFF)

val primaryBlackWhiteDark = Color(0xFFC6C6C6)
val onPrimaryBlackWhiteDark = Color(0xFF303030)
val primaryContainerBlackWhiteDark = Color(0xFF000000)
val onPrimaryContainerBlackWhiteDark = Color(0xFF969696)
val secondaryBlackWhiteDark = Color(0xFFC7C6C6)
val onSecondaryBlackWhiteDark = Color(0xFF303030)
val secondaryContainerBlackWhiteDark = Color(0xFF000000)
val onSecondaryContainerBlackWhiteDark = Color(0xFFD9D8D7)
val tertiaryBlackWhiteDark = Color(0xFFC6C6C6)
val onTertiaryBlackWhiteDark = Color(0xFF303030)
val tertiaryContainerBlackWhiteDark = Color(0xFF000000)
val onTertiaryContainerBlackWhiteDark = Color(0xFFFFFFFF)
val errorBlackWhiteDark = Color(0xFFC7C6C6)
val onErrorBlackWhiteDark = Color(0xFF303030)
val errorContainerBlackWhiteDark = Color(0xFF000000)
val onErrorContainerBlackWhiteDark = Color(0xFFD9D8D7)
val backgroundBlackWhiteDark = Color(0xFF000000)
val onBackgroundBlackWhiteDark = Color(0xFFE2E2E2)
val surfaceBlackWhiteDark = Color(0xFF000000)
val onSurfaceBlackWhiteDark = Color(0xFFE5E2E1)
val surfaceVariantBlackWhiteDark = Color(0xFF000000)
val onSurfaceVariantBlackWhiteDark = Color(0xFFC4C7C8)
val outlineBlackWhiteDark = Color(0xFF8E9192)
val outlineVariantBlackWhiteDark = Color(0xFF444748)
val scrimBlackWhiteDark = Color(0xFF000000)
val inverseSurfaceBlackWhiteDark = Color(0xFFE5E2E1)
val inverseOnSurfaceBlackWhiteDark = Color(0xFF313030)
val inversePrimaryBlackWhiteDark = Color(0xFF000000)
val surfaceDimBlackWhiteDark = Color(0xFF000000)
val surfaceBrightBlackWhiteDark = Color(0xFF000000)
val surfaceContainerLowestBlackWhiteDark = Color(0xFF0E0E0E)
val surfaceContainerLowBlackWhiteDark = Color(0xFF1C1B1B)
val surfaceContainerBlackWhiteDark = Color(0xFF000000)
val surfaceContainerHighBlackWhiteDark = Color(0xFF2A2A2A)
val surfaceContainerHighestBlackWhiteDark = Color(0xFF000000)
110 changes: 104 additions & 6 deletions app/src/main/java/com/readrops/app/util/theme/Theme.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@ import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.darkColorScheme
import androidx.compose.material3.lightColorScheme
import androidx.compose.material3.dynamicDarkColorScheme
import androidx.compose.material3.dynamicLightColorScheme
import androidx.compose.ui.platform.LocalContext
import androidx.compose.runtime.Composable


private val lightScheme = lightColorScheme(
primary = primaryLight,
onPrimary = onPrimaryLight,
Expand Down Expand Up @@ -83,19 +85,115 @@ private val darkScheme = darkColorScheme(
surfaceContainerHighest = surfaceContainerHighestDark,
)

private val BlackWhiteLightScheme = lightColorScheme(
primary = primaryBlackWhiteLight,
onPrimary = onPrimaryBlackWhiteLight,
primaryContainer = primaryContainerBlackWhiteLight,
onPrimaryContainer = onPrimaryContainerBlackWhiteLight,
secondary = secondaryBlackWhiteLight,
onSecondary = onSecondaryBlackWhiteLight,
secondaryContainer = secondaryContainerBlackWhiteLight,
onSecondaryContainer = onSecondaryContainerBlackWhiteLight,
tertiary = tertiaryBlackWhiteLight,
onTertiary = onTertiaryBlackWhiteLight,
tertiaryContainer = tertiaryContainerBlackWhiteLight,
onTertiaryContainer = onTertiaryContainerBlackWhiteLight,
error = errorBlackWhiteLight,
onError = onErrorBlackWhiteLight,
errorContainer = errorContainerBlackWhiteLight,
onErrorContainer = onErrorContainerBlackWhiteLight,
background = backgroundBlackWhiteLight,
onBackground = onBackgroundBlackWhiteLight,
surface = surfaceBlackWhiteLight,
onSurface = onSurfaceBlackWhiteLight,
surfaceVariant = surfaceVariantBlackWhiteLight,
onSurfaceVariant = onSurfaceVariantBlackWhiteLight,
outline = outlineBlackWhiteLight,
outlineVariant = outlineVariantBlackWhiteLight,
scrim = scrimBlackWhiteLight,
inverseSurface = inverseSurfaceBlackWhiteLight,
inverseOnSurface = inverseOnSurfaceBlackWhiteLight,
inversePrimary = inversePrimaryBlackWhiteLight,
surfaceDim = surfaceDimBlackWhiteLight,
surfaceBright = surfaceBrightBlackWhiteLight,
surfaceContainerLowest = surfaceContainerLowestBlackWhiteLight,
surfaceContainerLow = surfaceContainerLowBlackWhiteLight,
surfaceContainer = surfaceContainerBlackWhiteLight,
surfaceContainerHigh = surfaceContainerHighBlackWhiteLight,
surfaceContainerHighest = surfaceContainerHighestBlackWhiteLight,
)

private val BlackWhiteDarkScheme = lightColorScheme(
primary = primaryBlackWhiteDark,
onPrimary = onPrimaryBlackWhiteDark,
primaryContainer = primaryContainerBlackWhiteDark,
onPrimaryContainer = onPrimaryContainerBlackWhiteDark,
secondary = secondaryBlackWhiteDark,
onSecondary = onSecondaryBlackWhiteDark,
secondaryContainer = secondaryContainerBlackWhiteDark,
onSecondaryContainer = onSecondaryContainerBlackWhiteDark,
tertiary = tertiaryBlackWhiteDark,
onTertiary = onTertiaryBlackWhiteDark,
tertiaryContainer = tertiaryContainerBlackWhiteDark,
onTertiaryContainer = onTertiaryContainerBlackWhiteDark,
error = errorBlackWhiteDark,
onError = onErrorBlackWhiteDark,
errorContainer = errorContainerBlackWhiteDark,
onErrorContainer = onErrorContainerBlackWhiteDark,
background = backgroundBlackWhiteDark,
onBackground = onBackgroundBlackWhiteDark,
surface = surfaceBlackWhiteDark,
onSurface = onSurfaceBlackWhiteDark,
surfaceVariant = surfaceVariantBlackWhiteDark,
onSurfaceVariant = onSurfaceVariantBlackWhiteDark,
outline = outlineBlackWhiteDark,
outlineVariant = outlineVariantBlackWhiteDark,
scrim = scrimBlackWhiteDark,
inverseSurface = inverseSurfaceBlackWhiteDark,
inverseOnSurface = inverseOnSurfaceBlackWhiteDark,
inversePrimary = inversePrimaryBlackWhiteDark,
surfaceDim = surfaceDimBlackWhiteDark,
surfaceBright = surfaceBrightBlackWhiteDark,
surfaceContainerLowest = surfaceContainerLowestBlackWhiteDark,
surfaceContainerLow = surfaceContainerLowBlackWhiteDark,
surfaceContainer = surfaceContainerBlackWhiteDark,
surfaceContainerHigh = surfaceContainerHighBlackWhiteDark,
surfaceContainerHighest = surfaceContainerHighestBlackWhiteDark,
)

@Composable
fun ReadropsTheme(
useDarkTheme: Boolean = isSystemInDarkTheme(),
themeColorScheme: String = "readrops",
content: @Composable () -> Unit
) {
val colors = if (!useDarkTheme) {
lightScheme
} else {
darkScheme


val colors = when(themeColorScheme) {
"blackwhite" -> {
if (!useDarkTheme) {
BlackWhiteLightScheme
} else {
BlackWhiteDarkScheme
}
}
"material3" -> {
if (!useDarkTheme) {
dynamicLightColorScheme(LocalContext.current)
} else {
dynamicDarkColorScheme(LocalContext.current)
}
} else -> {
if (!useDarkTheme) {
lightScheme
} else {
darkScheme
}
}
}

MaterialTheme(
colorScheme = colors,
content = content
)
}
}
6 changes: 5 additions & 1 deletion app/src/main/res/values-de/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,11 @@
<string name="new_feed">Neuer Feed</string>
<string name="dark">Dunkel</string>
<string name="light">Hell</string>
<string name="theme">Farbschema</string>
<string name="theme">Thema</string>
<string name="theme_color_scheme">Farbschema</string>
<string name="theme_readrops">Readrops</string>
<string name="theme_blackwhite">BlackWhite</string>
<string name="theme_material3">Material You</string>
<string name="share_image">Bild teilen</string>
<string name="download_image">Bild herunterladen</string>
<string name="image_options">Bildoptionen</string>
Expand Down
4 changes: 4 additions & 0 deletions app/src/main/res/values-es/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,10 @@
<string name="download_image">Descargar imagen</string>
<string name="share_image">Compartir imagen</string>
<string name="theme">Tema</string>
<string name="theme_color_scheme">Bandera</string>
<string name="theme_readrops">Readrops</string>
<string name="theme_blackwhite">Blanco y Negro</string>
<string name="theme_material3">Material You</string>
<string name="hour_1">1 hora</string>
<string name="hour_6">6 horas</string>
<string name="enable_auto_synchro_text">Para que se muestren, las notificaciones necesitan que la sincronización en segundo plano esté activada.
Expand Down
4 changes: 4 additions & 0 deletions app/src/main/res/values-fr/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,10 @@
<string name="download_image">Télécharger l\'image</string>
<string name="share_image">Partager l\'image</string>
<string name="theme">Thème</string>
<string name="theme_color_scheme">Schéma de couleurs</string>
<string name="theme_readrops">Readrops</string>
<string name="theme_blackwhite">BlackWhite</string>
<string name="theme_material3">Material You</string>
<string name="light">Clair</string>
<string name="dark">Sombre</string>
<string name="new_feed">Nouveau flux</string>
Expand Down
6 changes: 5 additions & 1 deletion app/src/main/res/values-in/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,10 @@
<string name="download_image">Unduh gambar</string>
<string name="share_image">Bagikan gambar</string>
<string name="theme">Tema</string>
<string name="theme_color_scheme">Skema Warna</string>
<string name="theme_readrops">Readrops</string>
<string name="theme_blackwhite">BlackWhite</string>
<string name="theme_material3">Material You</string>
<string name="light">Terang</string>
<string name="dark">Gelap</string>
<string name="new_feed">Feed baru</string>
Expand All @@ -91,4 +95,4 @@
<string name="synchronize">Sinkronkan</string>
<string name="navigator_view">Navigator view</string>
<string name="favorites">Favorit</string>
</resources>
</resources>
6 changes: 5 additions & 1 deletion app/src/main/res/values-it/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@
<string name="dark">Scuro</string>
<string name="light">Chiaro</string>
<string name="theme">Tema</string>
<string name="theme_color_scheme">Combinazione di colori</string>
<string name="theme_readrops">Readrops</string>
<string name="theme_blackwhite">BlackWhite</string>
<string name="theme_material3">Material You</string>
<string name="share_image">Condividi l\'immagine</string>
<string name="download_image">Scarica l\'immagine</string>
<string name="image_options">Opzioni dell\'immagine</string>
Expand Down Expand Up @@ -90,4 +94,4 @@
<string name="add_feed_title">Aggiungi un flusso</string>
<string name="settings">Impostazioni</string>
<string name="add_feed">Aggiungi un flusso</string>
</resources>
</resources>
6 changes: 5 additions & 1 deletion app/src/main/res/values-nb-rNO/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@
<string name="dark">Mørk</string>
<string name="light">Lys</string>
<string name="theme">Drakt</string>
<string name="theme_color_scheme">Fargevalg</string>
<string name="theme_readrops">Readrops</string>
<string name="theme_blackwhite">BlackWhite</string>
<string name="theme_material3">Material You</string>
<string name="share_image">Del bilde</string>
<string name="download_image">Last ned bilde</string>
<string name="image_options">Bildevalg</string>
Expand Down Expand Up @@ -91,4 +95,4 @@
<string name="app_licence">Lisensiert GPLv3+</string>
<string name="external_navigator">Ekstern nettleser</string>
<string name="opml_import_export">OPML-import/-eksport</string>
</resources>
</resources>
Loading