From 0e66f82738ebb0c25c0666df7f705da1e4bf960e Mon Sep 17 00:00:00 2001 From: sspanak Date: Tue, 1 Oct 2024 12:45:24 +0300 Subject: [PATCH] when reordering punctuation, mandatory chars of one key are not allowed on the other --- .../AbstractPreferenceCharList.java | 57 +++++++++++++++++++ .../PreferenceSentencePunctuationList.java | 34 +++++------ .../PreferenceSpecialCharList.java | 17 ++++++ app/src/main/res/values-bg/strings.xml | 2 + app/src/main/res/values-de/strings.xml | 2 + app/src/main/res/values-es/strings.xml | 2 + app/src/main/res/values-fr/strings.xml | 2 + app/src/main/res/values-it/strings.xml | 2 + app/src/main/res/values-iw/strings.xml | 2 + app/src/main/res/values-lt/strings.xml | 2 + app/src/main/res/values-nl/strings.xml | 2 + app/src/main/res/values-pt-rBR/strings.xml | 2 + app/src/main/res/values-ru/strings.xml | 2 + app/src/main/res/values-tr/strings.xml | 2 + app/src/main/res/values-uk/strings.xml | 2 + app/src/main/res/values/strings.xml | 2 + 16 files changed, 117 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/AbstractPreferenceCharList.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/AbstractPreferenceCharList.java index 19d944a7..f5ba2678 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/AbstractPreferenceCharList.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/AbstractPreferenceCharList.java @@ -61,6 +61,7 @@ abstract class AbstractPreferenceCharList extends ItemTextInput { char[] mandatory = getMandatoryChars(); StringBuilder optional = new StringBuilder(); + // hide all mandatory characters for (int i = 0; i < all.length(); i++) { char c = all.charAt(i); @@ -86,7 +87,63 @@ abstract class AbstractPreferenceCharList extends ItemTextInput { } + protected String validateForbiddenChars() { + StringBuilder forbiddenCharList = new StringBuilder(); + + for (char c : getForbiddenChars()) { + if (currentChars.indexOf(c) != -1) { + forbiddenCharList.append(" ").append(getCharName(c)).append(","); + } + } + + if (forbiddenCharList.length() == 0) { + return ""; + } + + int message = forbiddenCharList.length() == 3 ? R.string.punctuation_order_forbidden_chars : R.string.punctuation_order_forbidden_char; + String chars = forbiddenCharList.substring(0, forbiddenCharList.length() - 1); + return getContext().getString(message, chars); + } + + + protected String validateMandatoryChars() { + return validateMandatoryChars(getMandatoryChars()); + } + + + protected String validateMandatoryChars(char[] mandatoryChars) { + StringBuilder missingCharList = new StringBuilder(); + + for (char c : mandatoryChars) { + if (currentChars.indexOf(c) == -1) { + missingCharList.append(" ").append(getCharName(c)).append(","); + } + } + + if (missingCharList.length() == 0) { + return ""; + } + + int message = missingCharList.length() == 3 ? R.string.punctuation_order_mandatory_char_missing : R.string.punctuation_order_mandatory_chars_missing; + String chars = missingCharList.substring(0, missingCharList.length() - 1); + return getContext().getString(message, chars); + } + + + private String getCharName(char c) { + switch (c) { + case '\n': + return getContext().getString(R.string.char_newline); + case ' ': + return getContext().getString(R.string.char_space); + default: + return String.valueOf(c); + } + } + + @NonNull abstract protected String getChars(); + @NonNull abstract protected char[] getForbiddenChars(); @NonNull abstract protected char[] getMandatoryChars(); abstract public boolean validateCurrentChars(); abstract public void saveCurrentChars(); diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/PreferenceSentencePunctuationList.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/PreferenceSentencePunctuationList.java index 522e1818..358851b1 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/PreferenceSentencePunctuationList.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/PreferenceSentencePunctuationList.java @@ -6,7 +6,6 @@ import android.util.AttributeSet; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.preferences.settings.SettingsStore; public class PreferenceSentencePunctuationList extends AbstractPreferenceCharList { @@ -23,9 +22,15 @@ public class PreferenceSentencePunctuationList extends AbstractPreferenceCharLis return getSettings().getPunctuation(language); } + @NonNull + @Override + protected char[] getForbiddenChars() { + return SettingsStore.MANDATORY_SPECIAL_CHARS; + } + /** - * We want to all the user to rearrange all characters even the mandatory ones. - * We will verify if they are present upon saving. + * Allow the user to rearrange all characters even the mandatory ones. We will verify if they + * are present upon saving. */ @NonNull @Override @@ -33,22 +38,17 @@ public class PreferenceSentencePunctuationList extends AbstractPreferenceCharLis return new char[0]; } + @Override + protected String validateMandatoryChars() { + return super.validateMandatoryChars(SettingsStore.MANDATORY_PUNCTUATION); + } + public boolean validateCurrentChars() { - StringBuilder missingCharList = new StringBuilder(); - - for (char c : SettingsStore.MANDATORY_PUNCTUATION) { - if (currentChars.indexOf(c) == -1) { - missingCharList.append(" ").append(c).append(","); - } - } - - String error = ""; - if (missingCharList.length() > 0) { - int message = missingCharList.length() == 3 ? R.string.punctuation_order_mandatory_char_missing : R.string.punctuation_order_mandatory_chars_missing; - String missingChars = missingCharList.substring(0, missingCharList.length() - 1); - error = getContext().getString(message, missingChars); - } + String forbiddenCharsError = validateForbiddenChars(); + String mandatoryCharsError = validateMandatoryChars(); + String separator = forbiddenCharsError.isEmpty() || mandatoryCharsError.isEmpty() ? "" : "\n"; + String error = forbiddenCharsError + separator + mandatoryCharsError; setSummary(error); return error.isEmpty(); diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/PreferenceSpecialCharList.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/PreferenceSpecialCharList.java index d7bb96e2..c9c9874c 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/PreferenceSpecialCharList.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/PreferenceSpecialCharList.java @@ -6,6 +6,7 @@ import android.util.AttributeSet; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.preferences.settings.SettingsStore; public class PreferenceSpecialCharList extends AbstractPreferenceCharList { @@ -16,27 +17,43 @@ public class PreferenceSpecialCharList extends AbstractPreferenceCharList { public PreferenceSpecialCharList(@NonNull Context context, @Nullable AttributeSet attrs) { super(context, attrs); } public PreferenceSpecialCharList(@NonNull Context context) { super(context); } + @Override @NonNull protected String getChars() { return getSettings().getSpecialChars(language); } + + @NonNull + @Override + protected char[] getForbiddenChars() { + return SettingsStore.MANDATORY_PUNCTUATION; + } + + @NonNull @Override protected char[] getMandatoryChars() { return SettingsStore.MANDATORY_SPECIAL_CHARS; } + @Override public boolean validateCurrentChars() { for (char c : getMandatoryChars()) { currentChars = currentChars.replace(String.valueOf(c), ""); } + String error = validateForbiddenChars(); + setSummary( + error.isEmpty() ? getContext().getString(R.string.punctuation_order_whitespace_will_be_added_automatically) : error + ); + return true; } + @Override public void saveCurrentChars() { StringBuilder all = new StringBuilder(); diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 308ec60d..eb1c92e7 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -186,4 +186,6 @@ Възстанови реда по подразбиране Език Запази подредбата + Забранен символ:%1$s + Забранени символи:%1$s diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 82dedddb..70f27bbd 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -174,4 +174,6 @@ Standardreihenfolge wiederherstellen Sprache Reihenfolge speichern + Verbotenes Zeichen:%1$s + Verbotene Zeichen:%1$s diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 87ef183c..0ffc9078 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -184,4 +184,6 @@ Restaurar el orden predeterminado Idioma Guardar orden + Carácter prohibido:%1$s + Caracteres prohibidos:%1$s diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 85e1405d..65d40940 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -182,4 +182,6 @@ Restaurer l’ordre par défaut Langue Enregistrer l’ordre + Caractère interdit:%1$s + Caractères interdits:%1$s diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 7d63d80e..f51c9a99 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -174,5 +174,7 @@ Ripristina ordine predefinito Lingua Salvare l\'ordine + Carattere vietato:%1$s + Caratteri vietati:%1$s diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index f64d0b61..96b46571 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -187,4 +187,6 @@ שחזר את הסדר המוגדר כברירת מחדל שפה שמור את הסדר + תו אסור:%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 4739be83..1fcc2f14 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -193,4 +193,6 @@ Atkurti numatytąją tvarką Kalba Išsaugoti tvarką + Draudžiamas simbolis:%1$s + Draudžiami simboliai:%1$s diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 7700f318..f7f306eb 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -173,4 +173,6 @@ Standaardvolgorde herstellen Taal Volgorde opslaan + Verboden teken:%1$s + Verboden tekens:%1$s diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index b4cdc6a6..4c529942 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -187,4 +187,6 @@ Restaurar ordem padrão Idioma Salvar ordem + Caractere proibido:%1$s + Caracteres proibidos:%1$s diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 29934656..dc5d4602 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -184,4 +184,6 @@ Восстановить порядок по умолчанию Язык Сохранить порядок + Запрещённый символ:%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 e096c9a2..f98c82de 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -187,4 +187,6 @@ Varsayılan sırayı geri yükle Dil Sıralamayı kaydet + Yasaklı karakter:%1$s + Yasaklı karakterler:%1$s diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 545a9b53..0b38077e 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -195,4 +195,6 @@ Відновити початковий порядок Мова Зберегти порядок + Заборонений символ:%1$s + Заборонені символи:%1$s diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 21350e97..80c57a66 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -171,6 +171,8 @@ Space and Newline characters will be automatically added at the beginning of the list. Missing mandatory character:%1$s Missing mandatory characters:%1$s + Forbidden character:%1$s + Forbidden characters:%1$s Restore Default Order Save Order 1-key Character Order