added a better visible error message and text field highlighting when saving the punctuation order fails
This commit is contained in:
parent
533d2a6cde
commit
675c6e9f23
19 changed files with 57 additions and 15 deletions
|
|
@ -1,6 +1,7 @@
|
|||
package io.github.sspanak.tt9.preferences.items;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.PorterDuff;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.util.AttributeSet;
|
||||
|
|
@ -14,6 +15,8 @@ import androidx.preference.PreferenceViewHolder;
|
|||
import io.github.sspanak.tt9.R;
|
||||
import io.github.sspanak.tt9.preferences.custom.ScreenPreference;
|
||||
import io.github.sspanak.tt9.preferences.settings.SettingsStore;
|
||||
import io.github.sspanak.tt9.util.colors.AccentSystemColor;
|
||||
import io.github.sspanak.tt9.util.colors.ErrorSystemColor;
|
||||
|
||||
abstract public class ItemTextInput extends ScreenPreference {
|
||||
@NonNull private final Handler listener = new Handler(Looper.getMainLooper());
|
||||
|
|
@ -55,11 +58,16 @@ abstract public class ItemTextInput extends ScreenPreference {
|
|||
}
|
||||
|
||||
|
||||
protected void setTextField(@NonNull PreferenceViewHolder holder) {
|
||||
EditText editText = holder.itemView.findViewById(R.id.input_text_input_field);
|
||||
if (editText != null) {
|
||||
this.textField = editText;
|
||||
protected void setError(String error) {
|
||||
if (textField == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
final boolean noError = error == null || error.isEmpty();
|
||||
textField.setError(noError ? null : error);
|
||||
|
||||
int color = noError ? new AccentSystemColor(getContext()).get() : new ErrorSystemColor(getContext()).get();
|
||||
textField.getBackground().mutate().setColorFilter(color, PorterDuff.Mode.SRC_ATOP);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -71,6 +79,14 @@ abstract public class ItemTextInput extends ScreenPreference {
|
|||
}
|
||||
|
||||
|
||||
protected void setTextField(@NonNull PreferenceViewHolder holder) {
|
||||
EditText editText = holder.itemView.findViewById(R.id.input_text_input_field);
|
||||
if (editText != null) {
|
||||
this.textField = editText;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Internal text change detector that calls the onTextChange() when needed.
|
||||
* IMPORTANT: do not call this method more than once per instance to avoid creating multiple
|
||||
|
|
|
|||
|
|
@ -78,6 +78,7 @@ abstract class AbstractPreferenceCharList extends ItemTextInput {
|
|||
}
|
||||
}
|
||||
|
||||
setError(null);
|
||||
setText(currentChars = optional.toString());
|
||||
}
|
||||
|
||||
|
|
@ -100,8 +101,8 @@ abstract class AbstractPreferenceCharList extends ItemTextInput {
|
|||
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);
|
||||
int message = chars.length() > 2 ? R.string.punctuation_order_forbidden_chars : R.string.punctuation_order_forbidden_char;
|
||||
return getContext().getString(message, chars);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ public class PreferenceSentencePunctuationList extends AbstractPreferenceCharLis
|
|||
|
||||
String separator = forbiddenCharsError.isEmpty() || mandatoryCharsError.isEmpty() ? "" : "\n";
|
||||
String error = forbiddenCharsError + separator + mandatoryCharsError;
|
||||
setSummary(error);
|
||||
setError(error);
|
||||
|
||||
return error.isEmpty();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 PreferenceSpecialCharList extends AbstractPreferenceCharList {
|
||||
|
|
@ -46,11 +45,9 @@ public class PreferenceSpecialCharList extends AbstractPreferenceCharList {
|
|||
}
|
||||
|
||||
String error = validateForbiddenChars();
|
||||
setSummary(
|
||||
error.isEmpty() ? getContext().getString(R.string.punctuation_order_whitespace_will_be_added_automatically) : error
|
||||
);
|
||||
setError(error);
|
||||
|
||||
return true;
|
||||
return error.isEmpty();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import io.github.sspanak.tt9.languages.Language;
|
|||
import io.github.sspanak.tt9.languages.LanguageCollection;
|
||||
import io.github.sspanak.tt9.preferences.PreferencesActivity;
|
||||
import io.github.sspanak.tt9.preferences.screens.BaseScreenFragment;
|
||||
import io.github.sspanak.tt9.ui.UI;
|
||||
|
||||
public class PunctuationScreen extends BaseScreenFragment {
|
||||
public static final String NAME = "Punctuation";
|
||||
|
|
@ -86,11 +87,10 @@ public class PunctuationScreen extends BaseScreenFragment {
|
|||
|
||||
|
||||
private void onSaveOrdering() {
|
||||
if (specialCharList != null && specialCharList.validateCurrentChars()) {
|
||||
if (specialCharList == null || !specialCharList.validateCurrentChars() || punctuationList == null || !punctuationList.validateCurrentChars()) {
|
||||
UI.toastShortSingle(activity, R.string.punctuation_order_save_error);
|
||||
} else {
|
||||
specialCharList.saveCurrentChars();
|
||||
}
|
||||
|
||||
if (punctuationList != null && punctuationList.validateCurrentChars()) {
|
||||
punctuationList.saveCurrentChars();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,15 @@
|
|||
package io.github.sspanak.tt9.util.colors;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import io.github.sspanak.tt9.preferences.settings.SettingsStore;
|
||||
|
||||
public class ErrorSystemColor extends SystemColor {
|
||||
public ErrorSystemColor(@NonNull Context context) {
|
||||
final boolean isDark = new SettingsStore(context).getDarkTheme();
|
||||
final int colorResource = isDark ? android.R.color.holo_red_dark : android.R.color.holo_red_light;
|
||||
color = context.getResources().getColor(colorResource);
|
||||
}
|
||||
}
|
||||
|
|
@ -192,6 +192,7 @@
|
|||
<string name="punctuation_order_whitespace_will_be_added_automatically">Интервал и нов ред ще бъдат автоматично добавени в началото на списъка.</string>
|
||||
<string name="punctuation_order_mandatory_char_missing">Липсва задължителен символ:%1$s</string>
|
||||
<string name="punctuation_order_mandatory_chars_missing">Липсват задължителни символи:%1$s</string>
|
||||
<string name="punctuation_order_save_error">Неуспешно запазване на реда на знаците.</string>
|
||||
<string name="punctuation_order_sentence">Ред на символите на клавиш 1</string>
|
||||
<string name="punctuation_order_special">Ред на символите на клавиш 0</string>
|
||||
<string name="punctuation_order_reset_defaults">Възстанови реда по подразбиране</string>
|
||||
|
|
|
|||
|
|
@ -182,6 +182,7 @@
|
|||
<string name="punctuation_order_whitespace_will_be_added_automatically">Leer- und Zeilenumbruchzeichen werden automatisch am Anfang der Liste hinzugefügt.</string>
|
||||
<string name="punctuation_order_mandatory_char_missing">Fehlendes erforderliches Zeichen:%1$s</string>
|
||||
<string name="punctuation_order_mandatory_chars_missing">Fehlende erforderliche Zeichen:%1$s</string>
|
||||
<string name="punctuation_order_save_error">Zeichenreihenfolge konnte nicht gespeichert werden.</string>
|
||||
<string name="punctuation_order_sentence">Zeichenreihenfolge der 1-Taste</string>
|
||||
<string name="punctuation_order_special">Zeichenreihenfolge der 0-Taste</string>
|
||||
<string name="punctuation_order_reset_defaults">Standardreihenfolge wiederherstellen</string>
|
||||
|
|
|
|||
|
|
@ -192,6 +192,7 @@
|
|||
<string name="punctuation_order_whitespace_will_be_added_automatically">Los caracteres Espacio y Nueva línea se añadirán automáticamente al principio de la lista.</string>
|
||||
<string name="punctuation_order_mandatory_char_missing">Falta carácter obligatorio:%1$s</string>
|
||||
<string name="punctuation_order_mandatory_chars_missing">Faltan caracteres obligatorios:%1$s</string>
|
||||
<string name="punctuation_order_save_error">Error al guardar el orden de los caracteres.</string>
|
||||
<string name="punctuation_order_sentence">Orden de caracteres de la tecla 1</string>
|
||||
<string name="punctuation_order_special">Orden de caracteres de la tecla 0</string>
|
||||
<string name="punctuation_order_reset_defaults">Restaurar el orden predeterminado</string>
|
||||
|
|
|
|||
|
|
@ -190,6 +190,7 @@
|
|||
<string name="punctuation_order_whitespace_will_be_added_automatically">Les caractères Espace et Retour à la ligne seront automatiquement ajoutés au début de la liste.</string>
|
||||
<string name="punctuation_order_mandatory_char_missing">Caractère obligatoire manquant :%1$s</string>
|
||||
<string name="punctuation_order_mandatory_chars_missing">Caractères obligatoires manquants :%1$s</string>
|
||||
<string name="punctuation_order_save_error">Échec de l’enregistrement de l’ordre des caractères.</string>
|
||||
<string name="punctuation_order_sentence">Ordre des caractères de la touche 1</string>
|
||||
<string name="punctuation_order_special">Ordre des caractères de la touche 0</string>
|
||||
<string name="punctuation_order_reset_defaults">Restaurer l’ordre par défaut</string>
|
||||
|
|
|
|||
|
|
@ -180,6 +180,7 @@
|
|||
<string name="punctuation_order_whitespace_will_be_added_automatically">I caratteri Spazio e Nuova linea verranno automaticamente aggiunti all\'inizio dell\'elenco.</string>
|
||||
<string name="punctuation_order_mandatory_char_missing">Carattere obbligatorio mancante:%1$s</string>
|
||||
<string name="punctuation_order_mandatory_chars_missing">Caratteri obbligatori mancanti:%1$s</string>
|
||||
<string name="punctuation_order_save_error">Salvataggio dell’ordine dei caratteri non riuscito.</string>
|
||||
<string name="punctuation_order_sentence">Ordine dei caratteri del tasto 1</string>
|
||||
<string name="punctuation_order_special">Ordine dei caratteri del tasto 0</string>
|
||||
<string name="punctuation_order_reset_defaults">Ripristina ordine predefinito</string>
|
||||
|
|
|
|||
|
|
@ -193,6 +193,7 @@
|
|||
<string name="punctuation_order_whitespace_will_be_added_automatically">תווי רווח ושורה חדשה יתווספו אוטומטית בתחילת הרשימה.</string>
|
||||
<string name="punctuation_order_mandatory_char_missing">תו חובה חסר: %1$s</string>
|
||||
<string name="punctuation_order_mandatory_chars_missing">תווי חובה חסרים:%1$s</string>
|
||||
<string name="punctuation_order_save_error">שמירת סדר התווים נכשלה.</string>
|
||||
<string name="punctuation_order_sentence">סדר התווים של מקש 1</string>
|
||||
<string name="punctuation_order_special">סדר התווים של מקש 0</string>
|
||||
<string name="punctuation_order_reset_defaults">שחזר את הסדר המוגדר כברירת מחדל</string>
|
||||
|
|
|
|||
|
|
@ -201,6 +201,7 @@
|
|||
<string name="punctuation_order_whitespace_will_be_added_automatically">Tarpas ir naujos eilutės simboliai bus automatiškai pridėti sąrašo pradžioje.</string>
|
||||
<string name="punctuation_order_mandatory_char_missing">Trūksta privalomo simbolio:%1$s</string>
|
||||
<string name="punctuation_order_mandatory_chars_missing">Trūksta privalomų simbolių:%1$s</string>
|
||||
<string name="punctuation_order_save_error">Nepavyko išsaugoti simbolių tvarkos.</string>
|
||||
<string name="punctuation_order_sentence">Simbolių tvarka ant klavišo 1</string>
|
||||
<string name="punctuation_order_special">Simbolių tvarka ant klavišo 0</string>
|
||||
<string name="punctuation_order_reset_defaults">Atkurti numatytąją tvarką</string>
|
||||
|
|
|
|||
|
|
@ -182,6 +182,7 @@
|
|||
<string name="punctuation_order_whitespace_will_be_added_automatically">Spatie- en nieuwe regeltekens worden automatisch aan het begin van de lijst toegevoegd.</string>
|
||||
<string name="punctuation_order_mandatory_char_missing">Ontbrekend verplicht teken:%1$s</string>
|
||||
<string name="punctuation_order_mandatory_chars_missing">Ontbrekende verplichte tekens:%1$s</string>
|
||||
<string name="punctuation_order_save_error">Opslaan van de tekenvolgorde mislukt.</string>
|
||||
<string name="punctuation_order_sentence">Tekenvolgorde van de 1-toets</string>
|
||||
<string name="punctuation_order_special">Tekenvolgorde van de 0-toets</string>
|
||||
<string name="punctuation_order_reset_defaults">Standaardvolgorde herstellen</string>
|
||||
|
|
|
|||
|
|
@ -194,6 +194,7 @@
|
|||
<string name="punctuation_order_whitespace_will_be_added_automatically">Os caracteres de Espaço e Nova linha serão automaticamente adicionados no início da lista.</string>
|
||||
<string name="punctuation_order_mandatory_char_missing">Caractere obrigatório ausente:%1$s</string>
|
||||
<string name="punctuation_order_mandatory_chars_missing">Caracteres obrigatórios ausentes:%1$s</string>
|
||||
<string name="punctuation_order_save_error">Falha ao salvar a ordem dos caracteres.</string>
|
||||
<string name="punctuation_order_sentence">Ordem de caracteres da tecla 1</string>
|
||||
<string name="punctuation_order_special">Ordem de caracteres da tecla 0</string>
|
||||
<string name="punctuation_order_reset_defaults">Restaurar ordem padrão</string>
|
||||
|
|
|
|||
|
|
@ -192,6 +192,7 @@
|
|||
<string name="punctuation_order_whitespace_will_be_added_automatically">Пробел и символ новой строки будут автоматически добавлены в начало списка.</string>
|
||||
<string name="punctuation_order_mandatory_char_missing">Отсутствует обязательный символ:%1$s</string>
|
||||
<string name="punctuation_order_mandatory_chars_missing">Отсутствуют обязательные символы:%1$s</string>
|
||||
<string name="punctuation_order_save_error">е удалось сохранить порядок символов.</string>
|
||||
<string name="punctuation_order_sentence">Порядок символов на клавише 1</string>
|
||||
<string name="punctuation_order_special">Порядок символов на клавише 0</string>
|
||||
<string name="punctuation_order_reset_defaults">Восстановить порядок по умолчанию</string>
|
||||
|
|
|
|||
|
|
@ -194,6 +194,7 @@
|
|||
<string name="punctuation_order_whitespace_will_be_added_automatically">Boşluk ve Yeni Satır karakterleri listenin başına otomatik olarak eklenecektir.</string>
|
||||
<string name="punctuation_order_mandatory_char_missing">Zorunlu karakter eksik:%1$s</string>
|
||||
<string name="punctuation_order_mandatory_chars_missing">Zorunlu karakterler eksik:%1$s</string>
|
||||
<string name="punctuation_order_save_error">Karakter sırası kaydedilemedi.</string>
|
||||
<string name="punctuation_order_sentence">1 tuşunun karakter sırası</string>
|
||||
<string name="punctuation_order_special">0 tuşunun karakter sırası</string>
|
||||
<string name="punctuation_order_reset_defaults">Varsayılan sırayı geri yükle</string>
|
||||
|
|
|
|||
|
|
@ -203,6 +203,7 @@
|
|||
<string name="punctuation_order_whitespace_will_be_added_automatically">Пробіл і символ нового рядка буде автоматично додано на початок списку.</string>
|
||||
<string name="punctuation_order_mandatory_char_missing">Відсутній обов’язковий символ:%1$s</string>
|
||||
<string name="punctuation_order_mandatory_chars_missing">Відсутні обов’язкові символи:%1$s</string>
|
||||
<string name="punctuation_order_save_error">Не вдалося зберегти порядок символів.</string>
|
||||
<string name="punctuation_order_sentence">Порядок символів на клавіші 1</string>
|
||||
<string name="punctuation_order_special">Порядок символів на клавіші 0</string>
|
||||
<string name="punctuation_order_reset_defaults">Відновити початковий порядок</string>
|
||||
|
|
|
|||
|
|
@ -191,6 +191,7 @@
|
|||
<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_save">Save Order</string>
|
||||
<string name="punctuation_order_save_error">Failed saving the character order.</string>
|
||||
<string name="punctuation_order_sentence">1-key Character Order</string>
|
||||
<string name="punctuation_order_special">0-key Character Order</string>
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue