diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemTextInput.java b/app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemTextInput.java index 381b34ab..067ca9fa 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemTextInput.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemTextInput.java @@ -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 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 63b18299..2cf071bf 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 @@ -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); } 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 358851b1..0c1ab689 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 @@ -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(); } 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 c9c9874c..242b2597 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,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(); } diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/PunctuationScreen.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/PunctuationScreen.java index b599b71e..e2449797 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/PunctuationScreen.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/PunctuationScreen.java @@ -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(); } } diff --git a/app/src/main/java/io/github/sspanak/tt9/util/colors/ErrorSystemColor.java b/app/src/main/java/io/github/sspanak/tt9/util/colors/ErrorSystemColor.java new file mode 100644 index 00000000..30724028 --- /dev/null +++ b/app/src/main/java/io/github/sspanak/tt9/util/colors/ErrorSystemColor.java @@ -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); + } +} diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 1a112c29..30940fe7 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -192,6 +192,7 @@ Интервал и нов ред ще бъдат автоматично добавени в началото на списъка. Липсва задължителен символ:%1$s Липсват задължителни символи:%1$s + Неуспешно запазване на реда на знаците. Ред на символите на клавиш 1 Ред на символите на клавиш 0 Възстанови реда по подразбиране diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index a1ea17d4..845a1331 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -182,6 +182,7 @@ Leer- und Zeilenumbruchzeichen werden automatisch am Anfang der Liste hinzugefügt. Fehlendes erforderliches Zeichen:%1$s Fehlende erforderliche Zeichen:%1$s + Zeichenreihenfolge konnte nicht gespeichert werden. Zeichenreihenfolge der 1-Taste Zeichenreihenfolge der 0-Taste Standardreihenfolge wiederherstellen diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index bc7619b1..49a349f2 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -192,6 +192,7 @@ Los caracteres Espacio y Nueva línea se añadirán automáticamente al principio de la lista. Falta carácter obligatorio:%1$s Faltan caracteres obligatorios:%1$s + Error al guardar el orden de los caracteres. Orden de caracteres de la tecla 1 Orden de caracteres de la tecla 0 Restaurar el orden predeterminado diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 5b0650b0..ecc7101b 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -190,6 +190,7 @@ Les caractères Espace et Retour à la ligne seront automatiquement ajoutés au début de la liste. Caractère obligatoire manquant :%1$s Caractères obligatoires manquants :%1$s + Échec de l’enregistrement de l’ordre des caractères. Ordre des caractères de la touche 1 Ordre des caractères de la touche 0 Restaurer l’ordre par défaut diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 98f17a09..7a9b60ea 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -180,6 +180,7 @@ I caratteri Spazio e Nuova linea verranno automaticamente aggiunti all\'inizio dell\'elenco. Carattere obbligatorio mancante:%1$s Caratteri obbligatori mancanti:%1$s + Salvataggio dell’ordine dei caratteri non riuscito. Ordine dei caratteri del tasto 1 Ordine dei caratteri del tasto 0 Ripristina ordine predefinito diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index eaa57c42..02aa9d37 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -193,6 +193,7 @@ תווי רווח ושורה חדשה יתווספו אוטומטית בתחילת הרשימה. תו חובה חסר: %1$s תווי חובה חסרים:%1$s + שמירת סדר התווים נכשלה. סדר התווים של מקש 1 סדר התווים של מקש 0 שחזר את הסדר המוגדר כברירת מחדל diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index fe9453e5..852a7f19 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -201,6 +201,7 @@ Tarpas ir naujos eilutės simboliai bus automatiškai pridėti sąrašo pradžioje. Trūksta privalomo simbolio:%1$s Trūksta privalomų simbolių:%1$s + Nepavyko išsaugoti simbolių tvarkos. Simbolių tvarka ant klavišo 1 Simbolių tvarka ant klavišo 0 Atkurti numatytąją tvarką diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 34c233e1..5a83a835 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -182,6 +182,7 @@ Spatie- en nieuwe regeltekens worden automatisch aan het begin van de lijst toegevoegd. Ontbrekend verplicht teken:%1$s Ontbrekende verplichte tekens:%1$s + Opslaan van de tekenvolgorde mislukt. Tekenvolgorde van de 1-toets Tekenvolgorde van de 0-toets Standaardvolgorde herstellen diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 392099b5..1827ede6 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -194,6 +194,7 @@ Os caracteres de Espaço e Nova linha serão automaticamente adicionados no início da lista. Caractere obrigatório ausente:%1$s Caracteres obrigatórios ausentes:%1$s + Falha ao salvar a ordem dos caracteres. Ordem de caracteres da tecla 1 Ordem de caracteres da tecla 0 Restaurar ordem padrão diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 0ad94fa7..ea53b41e 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -192,6 +192,7 @@ Пробел и символ новой строки будут автоматически добавлены в начало списка. Отсутствует обязательный символ:%1$s Отсутствуют обязательные символы:%1$s + е удалось сохранить порядок символов. Порядок символов на клавише 1 Порядок символов на клавише 0 Восстановить порядок по умолчанию diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 1ac26cdb..1b90d5c3 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -194,6 +194,7 @@ Boşluk ve Yeni Satır karakterleri listenin başına otomatik olarak eklenecektir. Zorunlu karakter eksik:%1$s Zorunlu karakterler eksik:%1$s + Karakter sırası kaydedilemedi. 1 tuşunun karakter sırası 0 tuşunun karakter sırası Varsayılan sırayı geri yükle diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 06c63ece..f9419c7c 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -203,6 +203,7 @@ Пробіл і символ нового рядка буде автоматично додано на початок списку. Відсутній обов’язковий символ:%1$s Відсутні обов’язкові символи:%1$s + Не вдалося зберегти порядок символів. Порядок символів на клавіші 1 Порядок символів на клавіші 0 Відновити початковий порядок diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2ab64c60..e154cc5f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -191,6 +191,7 @@ Forbidden characters:%1$s Restore Default Order Save Order + Failed saving the character order. 1-key Character Order 0-key Character Order