when reordering punctuation, mandatory chars of one key are not allowed on the other
This commit is contained in:
parent
31859fbf9d
commit
0e66f82738
16 changed files with 117 additions and 17 deletions
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -182,4 +182,6 @@
|
||||||
<string name="punctuation_order_reset_defaults">Restaurer l’ordre par défaut</string>
|
<string name="punctuation_order_reset_defaults">Restaurer l’ordre par défaut</string>
|
||||||
<string name="language">Langue</string>
|
<string name="language">Langue</string>
|
||||||
<string name="punctuation_order_save">Enregistrer l’ordre</string>
|
<string name="punctuation_order_save">Enregistrer l’ordre</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>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue