1
0
Fork 0

when reordering punctuation, mandatory chars of one key are not allowed on the other

This commit is contained in:
sspanak 2024-10-01 12:45:24 +03:00 committed by Dimo Karaivanov
parent 31859fbf9d
commit 0e66f82738
16 changed files with 117 additions and 17 deletions

View file

@ -61,6 +61,7 @@ abstract class AbstractPreferenceCharList extends ItemTextInput {
char[] mandatory = getMandatoryChars(); char[] mandatory = getMandatoryChars();
StringBuilder optional = new StringBuilder(); StringBuilder optional = new StringBuilder();
// hide all mandatory characters
for (int i = 0; i < all.length(); i++) { for (int i = 0; i < all.length(); i++) {
char c = all.charAt(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 String getChars();
@NonNull abstract protected char[] getForbiddenChars();
@NonNull abstract protected char[] getMandatoryChars(); @NonNull abstract protected char[] getMandatoryChars();
abstract public boolean validateCurrentChars(); abstract public boolean validateCurrentChars();
abstract public void saveCurrentChars(); abstract public void saveCurrentChars();

View file

@ -6,7 +6,6 @@ import android.util.AttributeSet;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import io.github.sspanak.tt9.R;
import io.github.sspanak.tt9.preferences.settings.SettingsStore; import io.github.sspanak.tt9.preferences.settings.SettingsStore;
public class PreferenceSentencePunctuationList extends AbstractPreferenceCharList { public class PreferenceSentencePunctuationList extends AbstractPreferenceCharList {
@ -23,9 +22,15 @@ public class PreferenceSentencePunctuationList extends AbstractPreferenceCharLis
return getSettings().getPunctuation(language); 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. * Allow the user to rearrange all characters even the mandatory ones. We will verify if they
* We will verify if they are present upon saving. * are present upon saving.
*/ */
@NonNull @NonNull
@Override @Override
@ -33,22 +38,17 @@ public class PreferenceSentencePunctuationList extends AbstractPreferenceCharLis
return new char[0]; return new char[0];
} }
@Override
protected String validateMandatoryChars() {
return super.validateMandatoryChars(SettingsStore.MANDATORY_PUNCTUATION);
}
public boolean validateCurrentChars() { public boolean validateCurrentChars() {
StringBuilder missingCharList = new StringBuilder(); String forbiddenCharsError = validateForbiddenChars();
String mandatoryCharsError = validateMandatoryChars();
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 separator = forbiddenCharsError.isEmpty() || mandatoryCharsError.isEmpty() ? "" : "\n";
String error = forbiddenCharsError + separator + mandatoryCharsError;
setSummary(error); setSummary(error);
return error.isEmpty(); return error.isEmpty();

View file

@ -6,6 +6,7 @@ import android.util.AttributeSet;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import io.github.sspanak.tt9.R;
import io.github.sspanak.tt9.preferences.settings.SettingsStore; import io.github.sspanak.tt9.preferences.settings.SettingsStore;
public class PreferenceSpecialCharList extends AbstractPreferenceCharList { 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, @Nullable AttributeSet attrs) { super(context, attrs); }
public PreferenceSpecialCharList(@NonNull Context context) { super(context); } public PreferenceSpecialCharList(@NonNull Context context) { super(context); }
@Override @Override
@NonNull @NonNull
protected String getChars() { protected String getChars() {
return getSettings().getSpecialChars(language); return getSettings().getSpecialChars(language);
} }
@NonNull
@Override
protected char[] getForbiddenChars() {
return SettingsStore.MANDATORY_PUNCTUATION;
}
@NonNull @NonNull
@Override @Override
protected char[] getMandatoryChars() { protected char[] getMandatoryChars() {
return SettingsStore.MANDATORY_SPECIAL_CHARS; return SettingsStore.MANDATORY_SPECIAL_CHARS;
} }
@Override @Override
public boolean validateCurrentChars() { public boolean validateCurrentChars() {
for (char c : getMandatoryChars()) { for (char c : getMandatoryChars()) {
currentChars = currentChars.replace(String.valueOf(c), ""); 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; return true;
} }
@Override @Override
public void saveCurrentChars() { public void saveCurrentChars() {
StringBuilder all = new StringBuilder(); StringBuilder all = new StringBuilder();

View file

@ -186,4 +186,6 @@
<string name="punctuation_order_reset_defaults">Възстанови реда по подразбиране</string> <string name="punctuation_order_reset_defaults">Възстанови реда по подразбиране</string>
<string name="language">Език</string> <string name="language">Език</string>
<string name="punctuation_order_save">Запази подредбата</string> <string name="punctuation_order_save">Запази подредбата</string>
<string name="punctuation_order_forbidden_char">Забранен символ:%1$s</string>
<string name="punctuation_order_forbidden_chars">Забранени символи:%1$s</string>
</resources> </resources>

View file

@ -174,4 +174,6 @@
<string name="punctuation_order_reset_defaults">Standardreihenfolge wiederherstellen</string> <string name="punctuation_order_reset_defaults">Standardreihenfolge wiederherstellen</string>
<string name="language">Sprache</string> <string name="language">Sprache</string>
<string name="punctuation_order_save">Reihenfolge speichern</string> <string name="punctuation_order_save">Reihenfolge speichern</string>
<string name="punctuation_order_forbidden_char">Verbotenes Zeichen:%1$s</string>
<string name="punctuation_order_forbidden_chars">Verbotene Zeichen:%1$s</string>
</resources> </resources>

View file

@ -184,4 +184,6 @@
<string name="punctuation_order_reset_defaults">Restaurar el orden predeterminado</string> <string name="punctuation_order_reset_defaults">Restaurar el orden predeterminado</string>
<string name="language">Idioma</string> <string name="language">Idioma</string>
<string name="punctuation_order_save">Guardar orden</string> <string name="punctuation_order_save">Guardar orden</string>
<string name="punctuation_order_forbidden_char">Carácter prohibido:%1$s</string>
<string name="punctuation_order_forbidden_chars">Caracteres prohibidos:%1$s</string>
</resources> </resources>

View file

@ -182,4 +182,6 @@
<string name="punctuation_order_reset_defaults">Restaurer lordre par défaut</string> <string name="punctuation_order_reset_defaults">Restaurer lordre par défaut</string>
<string name="language">Langue</string> <string name="language">Langue</string>
<string name="punctuation_order_save">Enregistrer lordre</string> <string name="punctuation_order_save">Enregistrer lordre</string>
<string name="punctuation_order_forbidden_char">Caractère interdit:%1$s</string>
<string name="punctuation_order_forbidden_chars">Caractères interdits:%1$s</string>
</resources> </resources>

View file

@ -174,5 +174,7 @@
<string name="punctuation_order_reset_defaults">Ripristina ordine predefinito</string> <string name="punctuation_order_reset_defaults">Ripristina ordine predefinito</string>
<string name="language">Lingua</string> <string name="language">Lingua</string>
<string name="punctuation_order_save">Salvare l\'ordine</string> <string name="punctuation_order_save">Salvare l\'ordine</string>
<string name="punctuation_order_forbidden_char">Carattere vietato:%1$s</string>
<string name="punctuation_order_forbidden_chars">Caratteri vietati:%1$s</string>
</resources> </resources>

View file

@ -187,4 +187,6 @@
<string name="punctuation_order_reset_defaults">שחזר את הסדר המוגדר כברירת מחדל</string> <string name="punctuation_order_reset_defaults">שחזר את הסדר המוגדר כברירת מחדל</string>
<string name="language">שפה</string> <string name="language">שפה</string>
<string name="punctuation_order_save">שמור את הסדר</string> <string name="punctuation_order_save">שמור את הסדר</string>
<string name="punctuation_order_forbidden_char">תו אסור:%1$s</string>
<string name="punctuation_order_forbidden_chars">תווים אסורים:%1$s</string>
</resources> </resources>

View file

@ -193,4 +193,6 @@
<string name="punctuation_order_reset_defaults">Atkurti numatytąją tvarką</string> <string name="punctuation_order_reset_defaults">Atkurti numatytąją tvarką</string>
<string name="language">Kalba</string> <string name="language">Kalba</string>
<string name="punctuation_order_save">Išsaugoti tvarką</string> <string name="punctuation_order_save">Išsaugoti tvarką</string>
<string name="punctuation_order_forbidden_char">Draudžiamas simbolis:%1$s</string>
<string name="punctuation_order_forbidden_chars">Draudžiami simboliai:%1$s</string>
</resources> </resources>

View file

@ -173,4 +173,6 @@
<string name="punctuation_order_reset_defaults">Standaardvolgorde herstellen</string> <string name="punctuation_order_reset_defaults">Standaardvolgorde herstellen</string>
<string name="language">Taal</string> <string name="language">Taal</string>
<string name="punctuation_order_save">Volgorde opslaan</string> <string name="punctuation_order_save">Volgorde opslaan</string>
<string name="punctuation_order_forbidden_char">Verboden teken:%1$s</string>
<string name="punctuation_order_forbidden_chars">Verboden tekens:%1$s</string>
</resources> </resources>

View file

@ -187,4 +187,6 @@
<string name="punctuation_order_reset_defaults">Restaurar ordem padrão</string> <string name="punctuation_order_reset_defaults">Restaurar ordem padrão</string>
<string name="language">Idioma</string> <string name="language">Idioma</string>
<string name="punctuation_order_save">Salvar ordem</string> <string name="punctuation_order_save">Salvar ordem</string>
<string name="punctuation_order_forbidden_char">Caractere proibido:%1$s</string>
<string name="punctuation_order_forbidden_chars">Caracteres proibidos:%1$s</string>
</resources> </resources>

View file

@ -184,4 +184,6 @@
<string name="punctuation_order_reset_defaults">Восстановить порядок по умолчанию</string> <string name="punctuation_order_reset_defaults">Восстановить порядок по умолчанию</string>
<string name="language">Язык</string> <string name="language">Язык</string>
<string name="punctuation_order_save">Сохранить порядок</string> <string name="punctuation_order_save">Сохранить порядок</string>
<string name="punctuation_order_forbidden_char">Запрещённый символ:%1$s</string>
<string name="punctuation_order_forbidden_chars">Запрещённые символы:%1$s</string>
</resources> </resources>

View file

@ -187,4 +187,6 @@
<string name="punctuation_order_reset_defaults">Varsayılan sırayı geri yükle</string> <string name="punctuation_order_reset_defaults">Varsayılan sırayı geri yükle</string>
<string name="language">Dil</string> <string name="language">Dil</string>
<string name="punctuation_order_save">Sıralamayı kaydet</string> <string name="punctuation_order_save">Sıralamayı kaydet</string>
<string name="punctuation_order_forbidden_char">Yasaklı karakter:%1$s</string>
<string name="punctuation_order_forbidden_chars">Yasaklı karakterler:%1$s</string>
</resources> </resources>

View file

@ -195,4 +195,6 @@
<string name="punctuation_order_reset_defaults">Відновити початковий порядок</string> <string name="punctuation_order_reset_defaults">Відновити початковий порядок</string>
<string name="language">Мова</string> <string name="language">Мова</string>
<string name="punctuation_order_save">Зберегти порядок</string> <string name="punctuation_order_save">Зберегти порядок</string>
<string name="punctuation_order_forbidden_char">Заборонений символ:%1$s</string>
<string name="punctuation_order_forbidden_chars">Заборонені символи:%1$s</string>
</resources> </resources>

View file

@ -171,6 +171,8 @@
<string name="punctuation_order_whitespace_will_be_added_automatically">Space and Newline characters will be automatically added at the beginning of the list.</string> <string name="punctuation_order_whitespace_will_be_added_automatically">Space and Newline characters will be automatically added at the beginning of the list.</string>
<string name="punctuation_order_mandatory_char_missing">Missing mandatory character:%1$s</string> <string name="punctuation_order_mandatory_char_missing">Missing mandatory character:%1$s</string>
<string name="punctuation_order_mandatory_chars_missing">Missing mandatory characters:%1$s</string> <string name="punctuation_order_mandatory_chars_missing">Missing mandatory characters:%1$s</string>
<string name="punctuation_order_forbidden_char">Forbidden character:%1$s</string>
<string name="punctuation_order_forbidden_chars">Forbidden characters:%1$s</string>
<string name="punctuation_order_reset_defaults">Restore Default Order</string> <string name="punctuation_order_reset_defaults">Restore Default Order</string>
<string name="punctuation_order_save">Save Order</string> <string name="punctuation_order_save">Save Order</string>
<string name="punctuation_order_sentence">1-key Character Order</string> <string name="punctuation_order_sentence">1-key Character Order</string>