diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 6105842a..97c20212 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -69,4 +69,7 @@
Усилване на звук
Изтриване…
Грешка
+ Да
+ Не
+ Автоматично
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 67dafde0..dad0558a 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -23,4 +23,7 @@
Neue Zeile
Ersteinrichtung
Fehler
+ Ja
+ Nein
+ Automatisch
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 951edd64..4dc41656 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -69,4 +69,7 @@
Llamar
Bajar volumen
Subir Volumen
+ Sí
+ No
+ Automática
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 97b5f294..3331c04f 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -64,4 +64,7 @@
Pavé numérique à l\'écran
Suppression…
Erreur
+ Oui
+ Non
+ Automatique
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 3f02c29f..47350d46 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -32,5 +32,8 @@
Abilita l\'impostazione se ci sono 7–8–9 sulla prima riga, invece di 1–2–3.
Configurazione iniziale
Errore
+ Si
+ No
+ Automatica
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 03a7c3fd..6305f374 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -55,4 +55,7 @@
שורה חדשה
רווח
טעות
+ כן
+ לא
+ אוטומטי
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index f86ebca5..aadda67d 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -23,4 +23,7 @@
Initiële setup
Verwijderen…
Fout
+ Ja
+ Nee
+ Automatisch
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index 95f729d2..d406c597 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -58,4 +58,7 @@
Inverter Ordem das Teclas
Limpar Não Selecionados
Erro
+ Sim
+ Não
+ Automático
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index af911e78..47d76e9e 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -69,4 +69,7 @@
Увеличить громкости
Удаление…
Ошибка
+ Да
+ Нет
+ Автоматически
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 8ce64ed6..e45b7ad7 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -69,4 +69,7 @@
Зменшення гучності
Видалення…
Помилка
+ Так
+ Ні
+ Автоматично
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4e6258d4..d6b98f98 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -35,6 +35,9 @@
Automatically start sentences with a capital letter.
Languages
Dark Theme
+ Yes
+ No
+ Auto
Character for Double 0-key Press
Show On-Screen Keys
Show On-Screen Numpad
diff --git a/res/xml/prefs_screen_appearance.xml b/res/xml/prefs_screen_appearance.xml
index 70f6df44..6e2d90d9 100644
--- a/res/xml/prefs_screen_appearance.xml
+++ b/res/xml/prefs_screen_appearance.xml
@@ -1,10 +1,11 @@
-
values;
+
+ public ItemDropDown(DropDownPreference item) {
+ this.item = item;
+ }
+
+ protected void populate(LinkedHashMap values) {
+ if (item == null) {
+ Logger.w("tt9/ItemDropDown.populate", "Cannot populate a NULL item. Ignoring.");
+ return;
+ }
+
+ this.values = values != null ? values : new LinkedHashMap<>();
+
+ ArrayList keys = new ArrayList<>();
+ for (int key : this.values.keySet()) {
+ keys.add(String.valueOf(key));
+ }
+
+ item.setEntryValues(keys.toArray(new CharSequence[0]));
+ item.setEntries(this.values.values().toArray(new CharSequence[0]));
+ }
+
+ public ItemDropDown enableClickHandler() {
+ if (item == null) {
+ Logger.w("tt9/SectionKeymap.populateItem", "Cannot set a click listener a NULL item. Ignoring.");
+ return this;
+ }
+
+ item.setOnPreferenceChangeListener(this::onClick);
+ return this;
+ }
+
+ protected boolean onClick(Preference preference, Object newKey) {
+ try {
+ String previewValue = values.get(Integer.parseInt(newKey.toString()));
+ ((DropDownPreference) preference).setValue(newKey.toString());
+ setPreview(previewValue);
+ return true;
+ } catch (NumberFormatException e) {
+ return false;
+ }
+ }
+
+ private void setPreview(String value) {
+ if (item != null) {
+ item.setSummary(value);
+ }
+ }
+
+ public ItemDropDown preview() {
+ try {
+ setPreview(values.get(Integer.parseInt(item.getValue())));
+ } catch (NumberFormatException e) {
+ setPreview("");
+ }
+
+ return this;
+ }
+}
diff --git a/src/io/github/sspanak/tt9/preferences/items/ItemSelectTheme.java b/src/io/github/sspanak/tt9/preferences/items/ItemSelectTheme.java
new file mode 100644
index 00000000..a9b77762
--- /dev/null
+++ b/src/io/github/sspanak/tt9/preferences/items/ItemSelectTheme.java
@@ -0,0 +1,43 @@
+package io.github.sspanak.tt9.preferences.items;
+
+import android.content.Context;
+
+import androidx.appcompat.app.AppCompatDelegate;
+import androidx.preference.DropDownPreference;
+import androidx.preference.Preference;
+
+import java.util.LinkedHashMap;
+
+import io.github.sspanak.tt9.R;
+
+public class ItemSelectTheme extends ItemDropDown {
+ public static final String NAME = "pref_theme";
+
+ private final Context context;
+
+ public ItemSelectTheme(Context context, DropDownPreference item) {
+ super(item);
+ this.context = context;
+ }
+
+ public ItemDropDown populate() {
+ LinkedHashMap themes = new LinkedHashMap<>();
+ themes.put(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM, context.getString(R.string.pref_dark_theme_auto));
+ themes.put(AppCompatDelegate.MODE_NIGHT_NO, context.getString(R.string.pref_dark_theme_no));
+ themes.put(AppCompatDelegate.MODE_NIGHT_YES, context.getString(R.string.pref_dark_theme_yes));
+
+ super.populate(themes);
+
+ return this;
+ }
+
+ @Override
+ protected boolean onClick(Preference preference, Object newKey) {
+ if (super.onClick(preference, newKey)) {
+ AppCompatDelegate.setDefaultNightMode(Integer.parseInt(newKey.toString()));
+ return true;
+ }
+
+ return false;
+ }
+}
diff --git a/src/io/github/sspanak/tt9/preferences/items/ItemToggleDarkTheme.java b/src/io/github/sspanak/tt9/preferences/items/ItemToggleDarkTheme.java
deleted file mode 100644
index c582256c..00000000
--- a/src/io/github/sspanak/tt9/preferences/items/ItemToggleDarkTheme.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package io.github.sspanak.tt9.preferences.items;
-
-import androidx.appcompat.app.AppCompatDelegate;
-import androidx.preference.Preference;
-import androidx.preference.SwitchPreferenceCompat;
-
-public class ItemToggleDarkTheme {
- public static final String NAME = "pref_dark_theme";
-
- private final SwitchPreferenceCompat themeToggle;
-
- public ItemToggleDarkTheme(SwitchPreferenceCompat item) {
- themeToggle = item;
- }
-
- public void enableToggleHandler() {
- themeToggle.setOnPreferenceChangeListener(this::onChange);
- }
-
- private boolean onChange(Preference p, Object newValue) {
- AppCompatDelegate.setDefaultNightMode(
- ((boolean) newValue) ? AppCompatDelegate.MODE_NIGHT_YES : AppCompatDelegate.MODE_NIGHT_NO
- );
-
- return true;
- }
-}
diff --git a/src/io/github/sspanak/tt9/preferences/screens/AppearanceScreen.java b/src/io/github/sspanak/tt9/preferences/screens/AppearanceScreen.java
index 397fe309..abe5c998 100644
--- a/src/io/github/sspanak/tt9/preferences/screens/AppearanceScreen.java
+++ b/src/io/github/sspanak/tt9/preferences/screens/AppearanceScreen.java
@@ -2,7 +2,7 @@ package io.github.sspanak.tt9.preferences.screens;
import io.github.sspanak.tt9.R;
import io.github.sspanak.tt9.preferences.PreferencesActivity;
-import io.github.sspanak.tt9.preferences.items.ItemToggleDarkTheme;
+import io.github.sspanak.tt9.preferences.items.ItemSelectTheme;
public class AppearanceScreen extends BaseScreenFragment {
public AppearanceScreen() { init(); }
@@ -13,6 +13,9 @@ public class AppearanceScreen extends BaseScreenFragment {
@Override
protected void onCreate() {
- (new ItemToggleDarkTheme(findPreference(ItemToggleDarkTheme.NAME))).enableToggleHandler();
+ (new ItemSelectTheme(activity, findPreference(ItemSelectTheme.NAME)))
+ .populate()
+ .enableClickHandler()
+ .preview();
}
}
diff --git a/src/io/github/sspanak/tt9/ui/AddWordAct.java b/src/io/github/sspanak/tt9/ui/AddWordAct.java
index d381701b..386f08be 100644
--- a/src/io/github/sspanak/tt9/ui/AddWordAct.java
+++ b/src/io/github/sspanak/tt9/ui/AddWordAct.java
@@ -27,9 +27,7 @@ public class AddWordAct extends AppCompatActivity {
protected void onCreate(Bundle savedData) {
settings = new SettingsStore(this);
- AppCompatDelegate.setDefaultNightMode(
- settings.getDarkTheme() ? AppCompatDelegate.MODE_NIGHT_YES : AppCompatDelegate.MODE_NIGHT_NO
- );
+ AppCompatDelegate.setDefaultNightMode(settings.getTheme());
super.onCreate(savedData);