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