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) {