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