diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/AbstractIncludeCharsSwitch.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/AbstractIncludeCharsSwitch.java
new file mode 100644
index 00000000..b0e6d4b1
--- /dev/null
+++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/AbstractIncludeCharsSwitch.java
@@ -0,0 +1,63 @@
+package io.github.sspanak.tt9.preferences.screens.punctuation;
+
+import android.content.Context;
+import android.util.AttributeSet;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.preference.Preference;
+import androidx.preference.SwitchPreferenceCompat;
+
+import io.github.sspanak.tt9.languages.Language;
+import io.github.sspanak.tt9.preferences.settings.SettingsStore;
+
+abstract public class AbstractIncludeCharsSwitch extends SwitchPreferenceCompat {
+ @Nullable private Language language = null;
+ @Nullable private Runnable onChangeListener = null;
+
+ public AbstractIncludeCharsSwitch(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+ setOnPreferenceChangeListener(this::onSave);
+ }
+
+ public AbstractIncludeCharsSwitch(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ setOnPreferenceChangeListener(this::onSave);
+ }
+
+ public AbstractIncludeCharsSwitch(@NonNull Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ setOnPreferenceChangeListener(this::onSave);
+ }
+
+ public AbstractIncludeCharsSwitch(@NonNull Context context) {
+ super(context);
+ setOnPreferenceChangeListener(this::onSave);
+ }
+
+ abstract boolean getChecked(@NonNull SettingsStore settings, @NonNull Language language);
+ abstract void setChecked(@NonNull Language language, boolean checked);
+
+ public void setLanguage(@NonNull SettingsStore settings, @NonNull Language language) {
+ this.language = language;
+ setChecked(getChecked(settings, language));
+ }
+
+ public void setOnChange(Runnable handler) {
+ onChangeListener = handler;
+ }
+
+ private boolean onSave(Preference preference, Object newValue) {
+ if (language == null) {
+ return false;
+ }
+
+ boolean checked = (boolean) newValue;
+ setChecked(language, checked);
+ if (onChangeListener != null) {
+ onChangeListener.run();
+ }
+
+ return true;
+ }
+}
diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/PreferenceChars0.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/PreferenceChars0.java
index f0d02b30..3dd4fe91 100644
--- a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/PreferenceChars0.java
+++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/PreferenceChars0.java
@@ -64,7 +64,17 @@ public class PreferenceChars0 extends AbstractPreferenceCharList {
public void saveCurrentChars() {
StringBuilder all = new StringBuilder();
for (char c : getMandatoryChars()) {
- all.append(c);
+ if (c == '\t') {
+ if (settings.getIncludeTabInChars0(language)) {
+ all.append(c);
+ }
+ } else if (c == '\n') {
+ if (settings.getIncludeNewlineInChars0(language)) {
+ all.append(c);
+ }
+ } else {
+ all.append(c);
+ }
}
all.append(currentChars);
diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/PreferenceIncludeNewline.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/PreferenceIncludeNewline.java
new file mode 100644
index 00000000..adc35364
--- /dev/null
+++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/PreferenceIncludeNewline.java
@@ -0,0 +1,40 @@
+package io.github.sspanak.tt9.preferences.screens.punctuation;
+
+import android.content.Context;
+import android.util.AttributeSet;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import io.github.sspanak.tt9.languages.Language;
+import io.github.sspanak.tt9.preferences.settings.SettingsStore;
+
+public class PreferenceIncludeNewline extends AbstractIncludeCharsSwitch {
+ public static final String NAME = "punctuation_order_include_newline";
+
+ public PreferenceIncludeNewline(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+ }
+
+ public PreferenceIncludeNewline(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ public PreferenceIncludeNewline(@NonNull Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public PreferenceIncludeNewline(@NonNull Context context) {
+ super(context);
+ }
+
+ @Override
+ boolean getChecked(@NonNull SettingsStore settings, @NonNull Language language) {
+ return settings.getIncludeNewlineInChars0(language);
+ }
+
+ @Override
+ void setChecked(@NonNull Language language, boolean checked) {
+ new SettingsStore(getContext()).setIncludeNewlineInChars0(language, checked);
+ }
+}
diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/PreferenceIncludeTab.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/PreferenceIncludeTab.java
new file mode 100644
index 00000000..287652f1
--- /dev/null
+++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/PreferenceIncludeTab.java
@@ -0,0 +1,40 @@
+package io.github.sspanak.tt9.preferences.screens.punctuation;
+
+import android.content.Context;
+import android.util.AttributeSet;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import io.github.sspanak.tt9.languages.Language;
+import io.github.sspanak.tt9.preferences.settings.SettingsStore;
+
+public class PreferenceIncludeTab extends AbstractIncludeCharsSwitch {
+ public static final String NAME = "punctuation_order_include_tab";
+
+ public PreferenceIncludeTab(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+ }
+
+ public PreferenceIncludeTab(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ public PreferenceIncludeTab(@NonNull Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public PreferenceIncludeTab(@NonNull Context context) {
+ super(context);
+ }
+
+ @Override
+ boolean getChecked(@NonNull SettingsStore settings, @NonNull Language language) {
+ return settings.getIncludeTabInChars0(language);
+ }
+
+ @Override
+ void setChecked(@NonNull Language language, boolean checked) {
+ new SettingsStore(getContext()).setIncludeTabInChars0(language, checked);
+ }
+}
diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/PunctuationScreen.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/PunctuationScreen.java
index f57146b5..fc5ce0c4 100644
--- a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/PunctuationScreen.java
+++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/PunctuationScreen.java
@@ -56,6 +56,7 @@ public class PunctuationScreen extends BaseScreenFragment {
Language initalLanguage = LanguageCollection.getLanguage(languageList.getValue());
initResetDefaults(initalLanguage);
initSaveButton(initalLanguage);
+ initIncludeSwitches(initalLanguage);
loadCharLists();
resetFontSize(false);
}
@@ -71,6 +72,21 @@ public class PunctuationScreen extends BaseScreenFragment {
}
+ private void initIncludeSwitches(Language language) {
+ PreferenceIncludeTab includeTab = findPreference(PreferenceIncludeTab.NAME);
+ if (includeTab != null && language != null) {
+ includeTab.setLanguage(activity.getSettings(), language);
+ includeTab.setOnChange(this::onSaveOrdering);
+ }
+
+ PreferenceIncludeNewline includeNewline = findPreference(PreferenceIncludeNewline.NAME);
+ if (includeNewline != null && language != null) {
+ includeNewline.setLanguage(activity.getSettings(), language);
+ includeNewline.setOnChange(this::onSaveOrdering);
+ }
+ }
+
+
private void initSaveButton(Language initialLanguage) {
Preference item = findPreference(ItemPunctuationOrderSave.NAME);
if (item != null) {
@@ -110,6 +126,7 @@ public class PunctuationScreen extends BaseScreenFragment {
private void onLanguageChanged(@Nullable String newLanguageId) {
Language language = LanguageCollection.getLanguage(newLanguageId);
+ initIncludeSwitches(language);
restoreDefaults.setLanguage(language);
saveOrder.setLanguage(language);
diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsPunctuation.java b/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsPunctuation.java
index df486829..d2fac6a2 100644
--- a/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsPunctuation.java
+++ b/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsPunctuation.java
@@ -30,6 +30,11 @@ class SettingsPunctuation extends SettingsInput {
public void setDefaultCharOrder(@NonNull Language language, boolean overwrite) {
+ if (overwrite) {
+ setIncludeNewlineInChars0(language, true);
+ setIncludeTabInChars0(language, true);
+ }
+
if (overwrite || noDefault0Chars(language)) {
String chars = new String(FORBIDDEN_CHARS_0) + String.join("", language.getKeyCharacters(0));
chars = chars.replace(" ", Characters.getSpace(language));
@@ -173,4 +178,22 @@ class SettingsPunctuation extends SettingsInput {
return charsList;
}
+
+ public boolean getIncludeNewlineInChars0(Language language) {
+ return prefs.getBoolean("punctuation_order_include_newline_" + language.getId(), true);
+ }
+
+ public void setIncludeNewlineInChars0(Language language, boolean include) {
+ prefsEditor.putBoolean("punctuation_order_include_newline_" + language.getId(), include);
+ prefsEditor.apply();
+ }
+
+ public boolean getIncludeTabInChars0(Language language) {
+ return prefs.getBoolean("punctuation_order_include_tab_" + language.getId(), true);
+ }
+
+ public void setIncludeTabInChars0(Language language, boolean include) {
+ prefsEditor.putBoolean("punctuation_order_include_tab_" + language.getId(), include);
+ prefsEditor.apply();
+ }
}
diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml
index e5fd39c3..ddc55aa0 100644
--- a/app/src/main/res/values-bg/strings.xml
+++ b/app/src/main/res/values-bg/strings.xml
@@ -198,7 +198,8 @@
Ред на пунктуацията
Изберете език
Списъкът не може да бъде празен.
- Интервал и нов ред ще бъдат автоматично добавени в началото на списъка.
+ Добави табулация
+ Символът за интервал ще бъдe добавен автоматично в началото на списъка.
Липсва задължителен символ:%1$s
Липсват задължителни символи:%1$s
Неуспешно запазване на реда на знаците.
@@ -232,4 +233,5 @@
Колона 1
Начални символи
Групирани символи (по избор)
+ Добави нов ред
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index f61e91ef..d70ff35b 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -186,7 +186,9 @@
Interpunktionsreihenfolge
Sprache auswählen
Die Liste darf nicht leer sein.
- Leer- und Zeilenumbruchzeichen werden automatisch am Anfang der Liste hinzugefügt.
+ Zeilenumbruch einfügen
+ Tabulator einfügen
+ Das Leerzeichen wird automatisch am Anfang der Liste hinzugefügt.
Fehlendes erforderliches Zeichen:%1$s
Fehlende erforderliche Zeichen:%1$s
Zeichenreihenfolge konnte nicht gespeichert werden.
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 8bdb4934..e7d6b854 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -197,7 +197,9 @@
Orden de puntuación
Seleccionar idioma
La lista no puede estar vacía.
- Los caracteres Espacio y Nueva línea se añadirán automáticamente al principio de la lista.
+ Incluir salto de línea
+ Incluir tabulación
+ El carácter de espacio se añadirá automáticamente al principio de la lista.
Falta carácter obligatorio:%1$s
Faltan caracteres obligatorios:%1$s
Error al guardar el orden de los caracteres.
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 9c3ebb63..75706b9c 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -195,7 +195,9 @@
Ordre de ponctuation
Sélectionner la langue
La liste ne peut pas être vide.
- Les caractères Espace et Retour à la ligne seront automatiquement ajoutés au début de la liste.
+ Inclure un saut de ligne
+ Inclure une tabulation
+ Le caractère espace sera automatiquement ajouté au début de la liste.
Caractère obligatoire manquant :%1$s
Caractères obligatoires manquants :%1$s
Échec de l’enregistrement de l’ordre des caractères.
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 141f62fa..773b3af3 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -184,7 +184,9 @@
Ordine di punteggiatura
Seleziona la lingua
L\'elenco non può essere vuoto.
- I caratteri Spazio e Nuova linea verranno automaticamente aggiunti all\'inizio dell\'elenco.
+ Includi a capo
+ Includi tabulazione
+ Il carattere spazio verrà aggiunto automaticamente all’inizio dell’elenco.
Carattere obbligatorio mancante:%1$s
Caratteri obbligatori mancanti:%1$s
Salvataggio dell’ordine dei caratteri non riuscito.
diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml
index fda14d99..52b03003 100644
--- a/app/src/main/res/values-iw/strings.xml
+++ b/app/src/main/res/values-iw/strings.xml
@@ -198,7 +198,9 @@
סדר סימני פיסוק
בחר שפה
הרשימה לא יכולה להיות ריקה.
- תווי רווח ושורה חדשה יתווספו אוטומטית בתחילת הרשימה.
+ כלול שורת חדשה
+ כלול טאב
+ תו הרווח יתווסף אוטומטית בתחילת הרשימה.
תו חובה חסר: %1$s
תווי חובה חסרים:%1$s
שמירת סדר התווים נכשלה.
diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml
index 418c7842..a556180d 100644
--- a/app/src/main/res/values-lt/strings.xml
+++ b/app/src/main/res/values-lt/strings.xml
@@ -206,7 +206,9 @@
Skyrybos ženklų tvarka
Pasirinkite kalbą
Sąrašas negali būti tuščias.
- Tarpas ir naujos eilutės simboliai bus automatiškai pridėti sąrašo pradžioje.
+ Įtraukti naują eilutę
+ Įtraukti tabuliaciją
+ Tarpas bus automatiškai pridėtas sąrašo pradžioje.
Trūksta privalomo simbolio:%1$s
Trūksta privalomų simbolių:%1$s
Nepavyko išsaugoti simbolių tvarkos.
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 447f4ef6..9553b029 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -186,7 +186,9 @@
Interpunctievolgorde
Selecteer taal
De lijst mag niet leeg zijn.
- Spatie- en nieuwe regeltekens worden automatisch aan het begin van de lijst toegevoegd.
+ Nieuwe regel opnemen
+ Tab opnemen
+ Het spatiekarakter wordt automatisch aan het begin van de lijst toegevoegd.
Ontbrekend verplicht teken:%1$s
Ontbrekende verplichte tekens:%1$s
Opslaan van de tekenvolgorde mislukt.
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index f7d246c0..cafbb7e9 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -199,7 +199,9 @@
Ordem de pontuação
Selecione o idioma
A lista não pode estar vazia.
- Os caracteres de Espaço e Nova linha serão automaticamente adicionados no início da lista.
+ Incluir nova linha
+ Incluir tabulação
+ O caractere de espaço será adicionado automaticamente no início da lista.
Caractere obrigatório ausente:%1$s
Caracteres obrigatórios ausentes:%1$s
Falha ao salvar a ordem dos caracteres.
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 8b101f67..57681603 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -197,7 +197,9 @@
Порядок пунктуации
Выберите язык
Список не может быть пустым.
- Пробел и символ новой строки будут автоматически добавлены в начало списка.
+ Вставить перевод строки
+ Вставить табуляцию
+ Символ пробела будет автоматически добавлен в начало списка.
Отсутствует обязательный символ:%1$s
Отсутствуют обязательные символы:%1$s
е удалось сохранить порядок символов.
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 4793e90e..04889a6c 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -199,7 +199,9 @@
Noktalama sırası
Dil Seçin
Liste boş olamaz.
- Boşluk ve Yeni Satır karakterleri listenin başına otomatik olarak eklenecektir.
+ Satır sonu ekle
+ Sekme ekle
+ Boşluk karakteri liste başına otomatik olarak eklenecektir.
Zorunlu karakter eksik:%1$s
Zorunlu karakterler eksik:%1$s
Karakter sırası kaydedilemedi.
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index 034e069b..63afbe78 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -208,7 +208,9 @@
Порядок пунктуації
Виберіть мову
Список не може бути порожнім.
- Пробіл і символ нового рядка буде автоматично додано на початок списку.
+ Вставити новий рядок
+ Вставити табуляцію
+ Символ пробілу буде автоматично додано на початок списку.
Відсутній обов’язковий символ:%1$s
Відсутні обов’язкові символи:%1$s
Не вдалося зберегти порядок символів.
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index b5813c4e..3bf3ad69 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -205,7 +205,10 @@
Select Language
The list can not be empty.
- Space and Newline characters will be automatically added at the beginning of the list.
+ Include Newline
+ Include Tab
+
+ Space character will be automatically added at the beginning of the list.
Missing mandatory character:%1$s
Missing mandatory characters:%1$s
Forbidden character:%1$s
diff --git a/app/src/main/res/xml/prefs_screen_punctuation.xml b/app/src/main/res/xml/prefs_screen_punctuation.xml
index 37d2ff67..354bd4a0 100644
--- a/app/src/main/res/xml/prefs_screen_punctuation.xml
+++ b/app/src/main/res/xml/prefs_screen_punctuation.xml
@@ -23,6 +23,15 @@
+
+
+
+
+