From 6edf4e18abb4c241be2ef76856f418f918b20785 Mon Sep 17 00:00:00 2001 From: sspanak Date: Thu, 12 Jun 2025 17:47:50 +0300 Subject: [PATCH] added options to show/hide the Newline and the Tab characters in the 0-key char list --- .../AbstractIncludeCharsSwitch.java | 63 +++++++++++++++++++ .../screens/punctuation/PreferenceChars0.java | 12 +++- .../punctuation/PreferenceIncludeNewline.java | 40 ++++++++++++ .../punctuation/PreferenceIncludeTab.java | 40 ++++++++++++ .../punctuation/PunctuationScreen.java | 17 +++++ .../settings/SettingsPunctuation.java | 23 +++++++ app/src/main/res/values-bg/strings.xml | 4 +- app/src/main/res/values-de/strings.xml | 4 +- app/src/main/res/values-es/strings.xml | 4 +- app/src/main/res/values-fr/strings.xml | 4 +- app/src/main/res/values-it/strings.xml | 4 +- app/src/main/res/values-iw/strings.xml | 4 +- app/src/main/res/values-lt/strings.xml | 4 +- app/src/main/res/values-nl/strings.xml | 4 +- app/src/main/res/values-pt-rBR/strings.xml | 4 +- app/src/main/res/values-ru/strings.xml | 4 +- app/src/main/res/values-tr/strings.xml | 4 +- app/src/main/res/values-uk/strings.xml | 4 +- app/src/main/res/values/strings.xml | 5 +- .../main/res/xml/prefs_screen_punctuation.xml | 9 +++ 20 files changed, 243 insertions(+), 14 deletions(-) create mode 100644 app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/AbstractIncludeCharsSwitch.java create mode 100644 app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/PreferenceIncludeNewline.java create mode 100644 app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/PreferenceIncludeTab.java 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 @@ + + + + +