From 88797898d89db784d9876ffd793adbe5c706f09d Mon Sep 17 00:00:00 2001 From: sspanak Date: Mon, 16 Jan 2023 17:39:30 +0200 Subject: [PATCH] added a setting for 0-key double press function --- res/values-bg/strings.xml | 3 + res/values-de/strings.xml | 2 + res/values-fr/strings.xml | 2 + res/values-it/strings.xml | 2 + res/values-nl/strings.xml | 2 + res/values-ru/strings.xml | 2 + res/values-uk/strings.xml | 2 + res/values/strings.xml | 7 +- res/xml/prefs.xml | 7 ++ .../sspanak/tt9/ime/modes/ModePredictive.java | 4 +- .../tt9/preferences/SettingsStore.java | 1 + .../items/ItemSelectZeroKeyCharacter.java | 67 +++++++++++++++++++ .../screens/MainSettingsScreen.java | 11 ++- 13 files changed, 107 insertions(+), 5 deletions(-) create mode 100644 src/io/github/sspanak/tt9/preferences/items/ItemSelectZeroKeyCharacter.java diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index c2238251..ac4e47d7 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -50,4 +50,7 @@ Подсказващ режим Няма речник за език „%1$s“. Заредете го в Настройки. Клавиатура + Символ при двойно натисната \"0\" + Нов ред + Интервал diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index c81ebab6..03c19f34 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -22,4 +22,6 @@ Wird nicht geladen. Wörterbuch für \"%1$s\" nicht gefunden. Lade Wörterbuch Tastenfeld + Leerzeichen + Neue Zeile diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 98a61a60..4979ba1d 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -41,4 +41,6 @@ Pas de dictionnaire pour langue «%1$s». Veuillez le charger à l\'écran Paramètres. Impossible d\'ajouter un mot, si aucune langue n\'est choisie. Clavier + Espace + Nouvelle ligne diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index be4df61f..b966fbc2 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -28,5 +28,7 @@ Caricamento del dizionario Caricamento annullato. Tastiera + Spazio + Nuova riga diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index af560d59..7479416e 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -22,4 +22,6 @@ Woordenboek succesvol gewist. Woordenboek laden Toetsenbord + Spatie + Nieuwe regel diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 5d1fbbef..d9255ea6 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -31,4 +31,6 @@ Загрузка отменена. Режим подсказки Клавиатура + Пробел + Новая строка diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index 6ff1c0e6..45831a2a 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -28,4 +28,6 @@ Завантаження словника Завантаження скасовано. Клавіатура + Пробіл + Новий рядок diff --git a/res/values/strings.xml b/res/values/strings.xml index 669bd31d..234e4d93 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -27,7 +27,8 @@ Automatically start sentences with a capital letter. Languages Dark Theme - Show on-screen keys + Character for 0-key Double Press + Show On-Screen Keys Help Cancel loading @@ -64,4 +65,8 @@ Menu # + + . + New Line + Space diff --git a/res/xml/prefs.xml b/res/xml/prefs.xml index 1e28e887..9ddaa431 100644 --- a/res/xml/prefs.xml +++ b/res/xml/prefs.xml @@ -76,6 +76,13 @@ app:summary="@string/pref_auto_text_case_summary" app:title="@string/pref_auto_text_case" /> + + 0) { - // repeat "0" to type spaces + // repeat "0" is a shortcut for the preferred character (default: space) reset(); - word = " "; + word = settings.getDoubleZeroChar(); } else { // words super.reset(); diff --git a/src/io/github/sspanak/tt9/preferences/SettingsStore.java b/src/io/github/sspanak/tt9/preferences/SettingsStore.java index df0fb0a9..3c50b1f9 100644 --- a/src/io/github/sspanak/tt9/preferences/SettingsStore.java +++ b/src/io/github/sspanak/tt9/preferences/SettingsStore.java @@ -208,6 +208,7 @@ public class SettingsStore { public boolean getAutoSpace() { return prefs.getBoolean("auto_space", false); } public boolean getAutoTextCase() { return prefs.getBoolean("auto_text_case", true); } + public String getDoubleZeroChar() { return prefs.getString("pref_double_zero_char", " "); } /************* internal settings *************/ diff --git a/src/io/github/sspanak/tt9/preferences/items/ItemSelectZeroKeyCharacter.java b/src/io/github/sspanak/tt9/preferences/items/ItemSelectZeroKeyCharacter.java new file mode 100644 index 00000000..5dfb0094 --- /dev/null +++ b/src/io/github/sspanak/tt9/preferences/items/ItemSelectZeroKeyCharacter.java @@ -0,0 +1,67 @@ +package io.github.sspanak.tt9.preferences.items; + +import android.content.Context; +import android.content.res.Resources; + +import androidx.preference.DropDownPreference; + +import java.util.LinkedHashMap; + +import io.github.sspanak.tt9.Logger; +import io.github.sspanak.tt9.R; + +public class ItemSelectZeroKeyCharacter { + public static final String NAME = "pref_double_zero_char"; + + private final DropDownPreference item; + private final LinkedHashMap KEYS = new LinkedHashMap<>(); + + public ItemSelectZeroKeyCharacter(DropDownPreference dropDown, Context context) { + this.item = dropDown; + + Resources resources = context.getResources(); + + KEYS.put(" ", resources.getString(R.string.char_space)); + KEYS.put("\n", resources.getString(R.string.char_newline)); + KEYS.put(".", resources.getString(R.string.char_dot)); + } + + + public ItemSelectZeroKeyCharacter populate() { + if (item == null) { + Logger.w("tt9/ItemSelectZeroKeyChar.populate", "Cannot populate a NULL item. Ignoring."); + return this; + } + + item.setEntries(KEYS.values().toArray(new CharSequence[0])); + item.setEntryValues(KEYS.keySet().toArray(new CharSequence[0])); + previewSelection(item.getValue()); + + return this; + } + + + public ItemSelectZeroKeyCharacter activate() { + if (item == null) { + Logger.w("tt9/ItemSelectZeroKeyChar.activate", "Cannot set a click listener a NULL item. Ignoring."); + return this; + } + + item.setOnPreferenceChangeListener((preference, newChar) -> { + ((DropDownPreference) preference).setValue(newChar.toString()); + previewSelection(newChar.toString()); + return true; + }); + + return this; + } + + + private void previewSelection(String newChar) { + if (item == null) { + return; + } + + item.setSummary(KEYS.get(newChar)); + } +} diff --git a/src/io/github/sspanak/tt9/preferences/screens/MainSettingsScreen.java b/src/io/github/sspanak/tt9/preferences/screens/MainSettingsScreen.java index fdaa6211..31102241 100644 --- a/src/io/github/sspanak/tt9/preferences/screens/MainSettingsScreen.java +++ b/src/io/github/sspanak/tt9/preferences/screens/MainSettingsScreen.java @@ -6,6 +6,7 @@ import io.github.sspanak.tt9.BuildConfig; import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.preferences.items.ItemLoadDictionary; import io.github.sspanak.tt9.preferences.items.ItemSelectLanguage; +import io.github.sspanak.tt9.preferences.items.ItemSelectZeroKeyCharacter; import io.github.sspanak.tt9.preferences.items.ItemToggleDarkTheme; import io.github.sspanak.tt9.preferences.items.ItemTruncateDictionary; import io.github.sspanak.tt9.preferences.PreferencesActivity; @@ -33,9 +34,10 @@ public class MainSettingsScreen extends BaseScreenFragment { @Override public void onCreate() { - createDictionarySection(); - createAppearanceSection(); createAboutSection(); + createAppearanceSection(); + createDictionarySection(); + createPredictiveModeSection(); } @@ -70,6 +72,11 @@ public class MainSettingsScreen extends BaseScreenFragment { } + private void createPredictiveModeSection() { + (new ItemSelectZeroKeyCharacter(findPreference(ItemSelectZeroKeyCharacter.NAME), activity)).populate().activate(); + } + + private void createAboutSection() { Preference vi = findPreference("version_info"); if (vi != null) {