diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/preferences/AppearanceSettingsFragment.kt b/AnkiDroid/src/main/java/com/ichi2/anki/preferences/AppearanceSettingsFragment.kt index ec8d4161218e..e7ad321b6a14 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/preferences/AppearanceSettingsFragment.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/preferences/AppearanceSettingsFragment.kt @@ -33,6 +33,8 @@ import com.ichi2.anki.deckpicker.BackgroundImage.FileSizeResult import com.ichi2.anki.launchCatchingTask import com.ichi2.anki.settings.Prefs import com.ichi2.anki.settings.enums.AppTheme +import com.ichi2.anki.settings.enums.DayTheme +import com.ichi2.anki.settings.enums.NightTheme import com.ichi2.anki.snackbar.showSnackbar import com.ichi2.anki.ui.internationalization.sentenceCase import com.ichi2.anki.utils.CollectionPreferences @@ -135,15 +137,25 @@ class AppearanceSettingsFragment : SettingsFragment() { val dayThemePref = requirePreference(R.string.day_theme_key) val nightThemePref = requirePreference(R.string.night_theme_key) + dayThemePref.entries = DayTheme.entries.map { it.label(requireContext()) }.toTypedArray() + dayThemePref.entryValues = DayTheme.entries.map { getString(it.entryResId) }.toTypedArray() + nightThemePref.entries = NightTheme.entries.map { it.label(requireContext()) }.toTypedArray() + nightThemePref.entryValues = NightTheme.entries.map { getString(it.entryResId) }.toTypedArray() + + val appThemeEntries = AppTheme.entries.map { it.label(requireContext()) }.toMutableList() + val appThemeValues = AppTheme.entries.map { getString(it.entryResId) }.toMutableList() + // Remove follow system options in android versions which do not have system dark mode // When minSdk reaches 29, the only necessary change is to remove this if-block if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { // Drop "Follow system" option (the first one) - appThemePref.entries = resources.getStringArray(R.array.app_theme_labels).drop(1).toTypedArray() - appThemePref.entryValues = resources.getStringArray(R.array.app_theme_values).drop(1).toTypedArray() - if (appTheme == AppTheme.FOLLOW_SYSTEM) { - appThemePref.value = getString(Themes.currentTheme.entryResId) - } + appThemeEntries.removeAt(0) + appThemeValues.removeAt(0) + } + appThemePref.entries = appThemeEntries.toTypedArray() + appThemePref.entryValues = appThemeValues.toTypedArray() + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q && appTheme == AppTheme.FOLLOW_SYSTEM) { + appThemePref.value = getString(Themes.currentTheme.entryResId) } appThemePref.setOnPreferenceChangeListener { newValue -> diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/settings/enums/AppTheme.kt b/AnkiDroid/src/main/java/com/ichi2/anki/settings/enums/AppTheme.kt index 2a949efd7795..67fd7a7c3a7d 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/settings/enums/AppTheme.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/settings/enums/AppTheme.kt @@ -15,13 +15,18 @@ */ package com.ichi2.anki.settings.enums +import android.content.Context +import com.ichi2.anki.CollectionManager.TR import com.ichi2.anki.R +import com.ichi2.anki.ui.internationalization.sentenceCase -/** [R.array.app_theme_values] */ +/** Values for the `app_theme` [ListPreference][androidx.preference.ListPreference]. */ enum class AppTheme( override val entryResId: Int, + /** The label shown for this option in the preference's list. */ + val label: Context.() -> String, ) : PrefEnum { - FOLLOW_SYSTEM(R.string.theme_follow_system_value), - DAY(R.string.theme_day_scheme_value), - NIGHT(R.string.theme_night_scheme_value), + FOLLOW_SYSTEM(R.string.theme_follow_system_value, { TR.sentenceCase.themeFollowSystem }), + DAY(R.string.theme_day_scheme_value, { getString(R.string.theme_day) }), + NIGHT(R.string.theme_night_scheme_value, { getString(R.string.theme_night) }), } diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/settings/enums/DayTheme.kt b/AnkiDroid/src/main/java/com/ichi2/anki/settings/enums/DayTheme.kt index bc5117eec1f0..77a1efeffe79 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/settings/enums/DayTheme.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/settings/enums/DayTheme.kt @@ -15,7 +15,9 @@ */ package com.ichi2.anki.settings.enums +import android.content.Context import androidx.annotation.StyleRes +import com.ichi2.anki.CollectionManager.TR import com.ichi2.anki.R sealed interface Theme : PrefEnum { @@ -23,11 +25,13 @@ sealed interface Theme : PrefEnum { val styleResId: Int } -/** [R.array.day_theme_values] */ +/** Values for the `day_theme` [ListPreference][androidx.preference.ListPreference]. */ enum class DayTheme( override val entryResId: Int, override val styleResId: Int, + /** The label shown for this option in the preference's list. */ + val label: Context.() -> String, ) : Theme { - LIGHT(R.string.theme_light_value, R.style.Theme_Light), - PLAIN(R.string.theme_plain_value, R.style.Theme_Light_Plain), + LIGHT(R.string.theme_light_value, R.style.Theme_Light, { TR.preferencesThemeLight() }), + PLAIN(R.string.theme_plain_value, R.style.Theme_Light_Plain, { getString(R.string.day_theme_plain) }), } diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/settings/enums/NightTheme.kt b/AnkiDroid/src/main/java/com/ichi2/anki/settings/enums/NightTheme.kt index 0dfbc8451716..b76682a23ed3 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/settings/enums/NightTheme.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/settings/enums/NightTheme.kt @@ -15,13 +15,17 @@ */ package com.ichi2.anki.settings.enums +import android.content.Context +import com.ichi2.anki.CollectionManager.TR import com.ichi2.anki.R -/** [R.array.night_theme_values] */ +/** Values for the `night_theme` [ListPreference][androidx.preference.ListPreference]. */ enum class NightTheme( override val entryResId: Int, override val styleResId: Int, + /** The label shown for this option in the preference's list. */ + val label: Context.() -> String, ) : Theme { - BLACK(R.string.theme_black_value, R.style.Theme_Dark_Black), - DARK(R.string.theme_dark_value, R.style.Theme_Dark), + BLACK(R.string.theme_black_value, R.style.Theme_Dark_Black, { getString(R.string.night_theme_black) }), + DARK(R.string.theme_dark_value, R.style.Theme_Dark, { TR.preferencesThemeDark() }), } diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/ui/internationalization/SentenceCase.kt b/AnkiDroid/src/main/java/com/ichi2/anki/ui/internationalization/SentenceCase.kt index 410f070e90c8..cb51b4491f92 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/ui/internationalization/SentenceCase.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/ui/internationalization/SentenceCase.kt @@ -219,6 +219,9 @@ object SentenceCase { context(_: Context) val browserAppearance get() = TR.browsingBrowserAppearance().toSentenceCase(R.string.sentence_browser_appearance) + context(_: Context) + val themeFollowSystem get() = TR.preferencesThemeFollowSystem().toSentenceCase(R.string.sentence_follow_system) + context(_: Fragment) val browserAppearance get() = TR.browsingBrowserAppearance().toSentenceCase(R.string.sentence_browser_appearance) diff --git a/AnkiDroid/src/main/res/values/11-arrays.xml b/AnkiDroid/src/main/res/values/11-arrays.xml index ba757026a78e..baabdc2962bb 100644 --- a/AnkiDroid/src/main/res/values/11-arrays.xml +++ b/AnkiDroid/src/main/res/values/11-arrays.xml @@ -19,17 +19,14 @@ Decide by note type - Follow system Day Night - - Light + Plain - + Black - Dark xx-small diff --git a/AnkiDroid/src/main/res/values/constants.xml b/AnkiDroid/src/main/res/values/constants.xml index 40c5cc974125..5d839fd0b5c0 100644 --- a/AnkiDroid/src/main/res/values/constants.xml +++ b/AnkiDroid/src/main/res/values/constants.xml @@ -74,14 +74,6 @@ @string/add_to_deck_use_current_deck @string/add_to_deck_decide_by_note_type - - @string/day_theme_light - @string/day_theme_plain - - - @string/night_theme_black - @string/night_theme_dark - @string/html_size_code_xx_small @string/html_size_code_x_small @@ -169,12 +161,6 @@ - - @string/theme_follow_system - @string/theme_day - @string/theme_night - - 0 1 2 @@ -184,20 +170,6 @@ 3 4 - - @string/theme_follow_system_value - @string/theme_day_scheme_value - @string/theme_night_scheme_value - - - @string/theme_light_value - @string/theme_plain_value - - - @string/theme_black_value - @string/theme_dark_value - - @string/sync_media_always @string/sync_media_only_unmetered diff --git a/AnkiDroid/src/main/res/values/sentence-case.xml b/AnkiDroid/src/main/res/values/sentence-case.xml index 6e85bf80fad8..f384fc2e6ebf 100644 --- a/AnkiDroid/src/main/res/values/sentence-case.xml +++ b/AnkiDroid/src/main/res/values/sentence-case.xml @@ -91,4 +91,5 @@ undoActionUndone() Answer again Answer hard Answer good + Follow system \ No newline at end of file diff --git a/AnkiDroid/src/main/res/xml/preferences_appearance.xml b/AnkiDroid/src/main/res/xml/preferences_appearance.xml index 1d58d9cc04de..7e539c44dfaa 100644 --- a/AnkiDroid/src/main/res/xml/preferences_appearance.xml +++ b/AnkiDroid/src/main/res/xml/preferences_appearance.xml @@ -29,16 +29,12 @@