From 32ac37b0fbe774ff47165b8279cf430163d50d70 Mon Sep 17 00:00:00 2001 From: sspanak Date: Wed, 27 Mar 2024 12:07:27 +0200 Subject: [PATCH] improved error handling in the popup dialogs --- .../github/sspanak/tt9/ime/TraditionalT9.java | 4 +- .../sspanak/tt9/ui/PopupDialogActivity.java | 13 ++---- .../java/io/github/sspanak/tt9/ui/UI.java | 12 +++-- .../sspanak/tt9/ui/dialogs/AddWordDialog.java | 46 +++++++++++++------ .../ConfirmDictionaryUpdateDialog.java | 28 ++++++++--- .../sspanak/tt9/ui/dialogs/PopupDialog.java | 16 +++++-- app/src/main/res/values-bg/strings.xml | 1 + app/src/main/res/values-de/strings.xml | 1 + app/src/main/res/values-es/strings.xml | 1 + app/src/main/res/values-fr/strings.xml | 1 + app/src/main/res/values-it/strings.xml | 1 + app/src/main/res/values-iw/strings.xml | 1 + app/src/main/res/values-lt/strings.xml | 1 + app/src/main/res/values-nl/strings.xml | 1 + app/src/main/res/values-pt-rBR/strings.xml | 1 + app/src/main/res/values-ru/strings.xml | 1 + app/src/main/res/values-uk/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 18 files changed, 90 insertions(+), 41 deletions(-) diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/TraditionalT9.java b/app/src/main/java/io/github/sspanak/tt9/ime/TraditionalT9.java index 3e433429..464879f0 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/TraditionalT9.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/TraditionalT9.java @@ -15,8 +15,8 @@ import io.github.sspanak.tt9.db.DictionaryLoader; import io.github.sspanak.tt9.db.WordStoreAsync; import io.github.sspanak.tt9.ime.modes.ModePassthrough; import io.github.sspanak.tt9.preferences.SettingsStore; -import io.github.sspanak.tt9.ui.PopupDialogActivity; import io.github.sspanak.tt9.ui.UI; +import io.github.sspanak.tt9.ui.dialogs.PopupDialog; import io.github.sspanak.tt9.ui.main.MainView; import io.github.sspanak.tt9.ui.tray.StatusBar; import io.github.sspanak.tt9.util.Logger; @@ -32,7 +32,7 @@ public class TraditionalT9 extends HotkeyHandler { public int onStartCommand(Intent intent, int flags, int startId) { int result = super.onStartCommand(intent, flags, startId); - String message = intent != null ? intent.getStringExtra(PopupDialogActivity.DIALOG_CLOSED_INTENT) : null; + String message = intent != null ? intent.getStringExtra(PopupDialog.INTENT_CLOSE) : null; if (message != null) { forceShowWindowIfHidden(); if (!message.isEmpty()) { diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/PopupDialogActivity.java b/app/src/main/java/io/github/sspanak/tt9/ui/PopupDialogActivity.java index a2f55503..d83622c6 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/PopupDialogActivity.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/PopupDialogActivity.java @@ -5,17 +5,14 @@ import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; -import io.github.sspanak.tt9.util.Logger; import io.github.sspanak.tt9.ime.TraditionalT9; import io.github.sspanak.tt9.ui.dialogs.AddWordDialog; import io.github.sspanak.tt9.ui.dialogs.ConfirmDictionaryUpdateDialog; import io.github.sspanak.tt9.ui.dialogs.PopupDialog; +import io.github.sspanak.tt9.util.Logger; public class PopupDialogActivity extends AppCompatActivity { private static final String LOG_TAG = PopupDialogActivity.class.getSimpleName(); - public static final String DIALOG_ADD_WORD_INTENT = "tt9.popup_dialog.add_word"; - public static final String DIALOG_CONFIRM_WORDS_UPDATE_INTENT = "tt9.popup_dialog.confirm_words_update"; - public static final String DIALOG_CLOSED_INTENT = "tt9.popup_dialog.closed"; @Override @@ -33,13 +30,13 @@ public class PopupDialogActivity extends AppCompatActivity { private PopupDialog getDialog() { Intent i = getIntent(); - String popupType = i != null ? i.getStringExtra("popup_type") : ""; + String popupType = i != null ? i.getStringExtra(PopupDialog.PARAMETER_DIALOG_TYPE) : ""; popupType = popupType != null ? popupType : ""; switch (popupType) { - case DIALOG_ADD_WORD_INTENT: + case AddWordDialog.TYPE: return new AddWordDialog(this, i, this::onDialogClose); - case DIALOG_CONFIRM_WORDS_UPDATE_INTENT: + case ConfirmDictionaryUpdateDialog.TYPE: return new ConfirmDictionaryUpdateDialog(this, i, this::onDialogClose); default: Logger.w(LOG_TAG, "Unknown popup type: '" + popupType + "'. Not displaying anything."); @@ -54,7 +51,7 @@ public class PopupDialogActivity extends AppCompatActivity { private void sendMessageToMain(String message) { Intent intent = new Intent(this, TraditionalT9.class); - intent.putExtra(DIALOG_CLOSED_INTENT, message); + intent.putExtra(PopupDialog.INTENT_CLOSE, message); startService(intent); } } diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/UI.java b/app/src/main/java/io/github/sspanak/tt9/ui/UI.java index f2d7b400..89f6cf7e 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/UI.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/UI.java @@ -12,6 +12,8 @@ import androidx.annotation.NonNull; import io.github.sspanak.tt9.languages.Language; import io.github.sspanak.tt9.preferences.PreferencesActivity; +import io.github.sspanak.tt9.ui.dialogs.AddWordDialog; +import io.github.sspanak.tt9.ui.dialogs.ConfirmDictionaryUpdateDialog; public class UI { private static Toast toastLang = null; @@ -20,9 +22,9 @@ public class UI { Intent intent = new Intent(ims, PopupDialogActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); - intent.putExtra("word", currentWord); - intent.putExtra("lang", language); - intent.putExtra("popup_type", PopupDialogActivity.DIALOG_ADD_WORD_INTENT); + intent.putExtra(AddWordDialog.PARAMETER_DIALOG_TYPE, AddWordDialog.TYPE); + intent.putExtra(AddWordDialog.PARAMETER_LANGUAGE, language); + intent.putExtra(AddWordDialog.PARAMETER_WORD, currentWord); ims.startActivity(intent); } @@ -31,8 +33,8 @@ public class UI { Intent intent = new Intent(ims, PopupDialogActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); - intent.putExtra("lang", language); - intent.putExtra("popup_type", PopupDialogActivity.DIALOG_CONFIRM_WORDS_UPDATE_INTENT); + intent.putExtra(ConfirmDictionaryUpdateDialog.PARAMETER_DIALOG_TYPE, ConfirmDictionaryUpdateDialog.TYPE); + intent.putExtra(ConfirmDictionaryUpdateDialog.PARAMETER_LANGUAGE, language); ims.startActivity(intent); } diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/dialogs/AddWordDialog.java b/app/src/main/java/io/github/sspanak/tt9/ui/dialogs/AddWordDialog.java index c35e4578..65eea3bd 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/dialogs/AddWordDialog.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/dialogs/AddWordDialog.java @@ -5,11 +5,11 @@ import android.content.Intent; import androidx.annotation.NonNull; -import io.github.sspanak.tt9.util.ConsumerCompat; import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.db.WordStoreAsync; import io.github.sspanak.tt9.languages.Language; import io.github.sspanak.tt9.languages.LanguageCollection; +import io.github.sspanak.tt9.util.ConsumerCompat; public class AddWordDialog extends PopupDialog { public static final int CODE_SUCCESS = 0; @@ -18,6 +18,10 @@ public class AddWordDialog extends PopupDialog { public static final int CODE_WORD_EXISTS = 3; public static final int CODE_GENERAL_ERROR = 666; + public static final String TYPE = "tt9.popup_dialog.add_word"; + public static final String PARAMETER_LANGUAGE = "lang"; + public static final String PARAMETER_WORD = "word"; + private Language language; private String word; @@ -27,30 +31,32 @@ public class AddWordDialog extends PopupDialog { title = context.getResources().getString(R.string.add_word_title); OKLabel = context.getResources().getString(R.string.add_word_add); + parseIntent(context, intent); + } + + + protected void parseIntent(@NonNull Context context, @NonNull Intent intent) { + word = intent.getStringExtra(PARAMETER_WORD); + + int languageId = intent.getIntExtra(PARAMETER_LANGUAGE, -1); + language = LanguageCollection.getLanguage(context, languageId); + if (language == null) { - message = context.getString(R.string.add_word_invalid_language); + message = context.getString(R.string.add_word_invalid_language_x, languageId); } else { message = context.getString(R.string.add_word_confirm, word, language.getName()); } } - protected void parseIntent(Context context, Intent intent) { - word = intent.getStringExtra("word"); - language = LanguageCollection.getLanguage(context, intent.getIntExtra("lang", -1)); - } - - public void render() { - if (message == null || word == null || word.isEmpty()) { - if (activityFinisher != null) activityFinisher.accept(""); - return; + private void onOK() { + if (language != null) { + WordStoreAsync.put(this::onAddingFinished, language, word); } - - Runnable OKAction = language == null ? null : () -> WordStoreAsync.put(this::onAddedWord, language, word); - super.render(OKAction); } - private void onAddedWord(int statusCode) { + + private void onAddingFinished(int statusCode) { String response; switch (statusCode) { case CODE_SUCCESS: @@ -76,4 +82,14 @@ public class AddWordDialog extends PopupDialog { activityFinisher.accept(response); } + + + public void render() { + if (message == null || word == null || word.isEmpty()) { + close(); + return; + } + + super.render(this::onOK); + } } diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/dialogs/ConfirmDictionaryUpdateDialog.java b/app/src/main/java/io/github/sspanak/tt9/ui/dialogs/ConfirmDictionaryUpdateDialog.java index 71bc22e9..b6bb71ff 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/dialogs/ConfirmDictionaryUpdateDialog.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/dialogs/ConfirmDictionaryUpdateDialog.java @@ -5,34 +5,48 @@ import android.content.Intent; import androidx.annotation.NonNull; -import io.github.sspanak.tt9.util.ConsumerCompat; import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.db.DictionaryLoader; import io.github.sspanak.tt9.languages.Language; import io.github.sspanak.tt9.languages.LanguageCollection; +import io.github.sspanak.tt9.util.ConsumerCompat; +import io.github.sspanak.tt9.util.Logger; public class ConfirmDictionaryUpdateDialog extends PopupDialog { + public static final String TYPE = "tt9.popup_dialog.confirm_words_update"; + public static final String PARAMETER_LANGUAGE = "lang"; + private Language language; public ConfirmDictionaryUpdateDialog(@NonNull Context context, @NonNull Intent intent, ConsumerCompat activityFinisher) { super(context, intent, activityFinisher); title = context.getString(R.string.app_name); OKLabel = context.getString(R.string.dictionary_update_update); - String langName = language != null ? language.getName() : ""; - message = context.getResources().getString(R.string.dictionary_update_message, langName); + parseIntent(context, intent); } - protected void parseIntent(Context context, Intent intent) { - language = LanguageCollection.getLanguage(context, intent.getIntExtra("lang", -1)); + protected void parseIntent(@NonNull Context context, @NonNull Intent intent) { + int languageId = intent.getIntExtra(PARAMETER_LANGUAGE, -1); + language = LanguageCollection.getLanguage(context, languageId); + + if (language == null) { + Logger.e(getClass().getSimpleName(), "Failed auto-updating the dictionary for language: '" + languageId + "'"); + } else { + message = context.getResources().getString(R.string.dictionary_update_message, language.getName()); + } } @Override public void render() { - super.render(this::loadDictionary); + if (language == null) { + close(); + } else { + super.render(this::loadDictionary); + } } private void loadDictionary() { DictionaryLoader.load(context, language); - activityFinisher.accept(""); + close(); } } diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/dialogs/PopupDialog.java b/app/src/main/java/io/github/sspanak/tt9/ui/dialogs/PopupDialog.java index 4f8f3569..c3c28876 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/dialogs/PopupDialog.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/dialogs/PopupDialog.java @@ -5,10 +5,14 @@ import android.content.Intent; import androidx.annotation.NonNull; -import io.github.sspanak.tt9.util.ConsumerCompat; import io.github.sspanak.tt9.ui.UI; +import io.github.sspanak.tt9.util.ConsumerCompat; abstract public class PopupDialog { + public static final String INTENT_CLOSE = "tt9.popup_dialog.close"; + public static final String PARAMETER_DIALOG_TYPE = "popup_type"; + + protected final Context context; protected final ConsumerCompat activityFinisher; protected String title; @@ -18,13 +22,17 @@ abstract public class PopupDialog { public PopupDialog(@NonNull Context context, @NonNull Intent intent, ConsumerCompat activityFinisher) { this.activityFinisher = activityFinisher; this.context = context; - parseIntent(context, intent); } - abstract protected void parseIntent(Context context, Intent intent); - abstract public void render(); + protected void close() { + if (activityFinisher != null) { + activityFinisher.accept(""); + } + } protected void render(Runnable OKAction) { UI.confirm(context, title, message, OKLabel, OKAction, () -> activityFinisher.accept("")); } + + abstract public void render(); } diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 60d1123f..4a288561 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -9,6 +9,7 @@ Преместете показалеца върху дума, за да я добавите към речника. Не може да се въведе празна дума. Думата „%1$s“ вече съществува в речника. + Не може да се добави дума. Неразпознат език: \"%1$d\". „%1$s“ е добавена. Добавяне на дума За приложението diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index c6492dd1..c69b05fc 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -10,6 +10,7 @@ Bewegen Sie den Cursor innerhalb eines Wortes, um es hinzuzufügen. Leeres Wort nicht hinzugefügt. Das Wort \"%1$s\" ist bereits in Wörterbuch. + Wort kann nicht hinzugefügt werden. Unbekannte Sprache: \"%1$d\". \"%1$s\" hinzugefügt. Wort hinzufügen diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index c208f584..4bbce693 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -11,6 +11,7 @@ Sin idioma Ocurrió un error inesperado. La palabra \"%1$s\" ya esta en el diccionario. + No se puede agregar una palabra. Idioma desconocido: \"%1$d\". \"%1$s\" añadida. Agregar palabra Modo ABC diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index bf3f1016..5b5fc14d 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -9,6 +9,7 @@ Déplacez le curseur dans un mot pour l\'ajouter. Mot vide non ajouté. Le mot «%1$s» est déjà dans le dictionnaire. + Impossible d\'ajouter un mot. Langue inconnue : « %1$d ». « %1$s » est ajouté Ajouter un mot À propos de l\'application diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index c09cc12f..e9d5d4e0 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -11,6 +11,7 @@ Sposta il cursore dentro un parola per aggiungerla. Nessuna parola da aggiungere. Parola “%1$s” già nel dizionario. + Impossibile aggiungere una parola. Lingua sconosciuta: \"%1$d\". \"%1$s\" aggiunta. Aggiungi parola diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 9a961783..e4ab52f3 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -11,6 +11,7 @@ הזיזו את הסמן בתוך מילה כדי להוסיף אותה. מילה ריקה לא נוספה המילה \"%1$s\" כבר קיימת במילון. + לא ניתן להוסיף מילה. שפה לא ידועה: \"%1$d\". %1$s נוסף. הוסף מילה diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index ffdfaa4c..22eb87df 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -13,6 +13,7 @@ Perkelkite žymeklį prie žodžio kurį norite pridėti. Negalima pridėti tuščio žodžio. Žodis \"%1$s\" jau yra žodyne. + Negalima pridėti žodžio. Nežinoma kalba: \"%1$d\". Žodis \"%1$s\" pridėtas. Pridėti žodį diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index f2901328..ec9a6204 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -10,6 +10,7 @@ Verplaats de cursor binnen een woord om het toe te voegen. Leeg woord niet toegevoegd. Woord \"%1$s\" staat al in het woordenboek. + Kan geen woord toevoegen. Onbekende taal: \"%1$d\". \"%1$s\" toegevoegd. Woord toevoegen Over de applicatie diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index c54a7384..e8b28cec 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -11,6 +11,7 @@ Mova o cursor dentro de uma palavra para adicioná-la. Palavra em branco, impossível adicionar. Palavra \"%1$s\" já está registrada. + Não é possível adicionar uma palavra. Idioma desconhecido: \"%1$d\". \"%1$s\" adicionada. Adicionar Palavra diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 6303f067..1d1ba5fa 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -9,6 +9,7 @@ Переместите курсор внутрь слова, чтобы добавить его. Невозможно добавить слово. Слово «%1$s» уже есть в словаре. + Невозможно добавить слово. Неизвестный язык: \"%1$d\". « %1$s » добавлено Добавить слово О приложении diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index e17b46c6..1986ddb0 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -13,6 +13,7 @@ Перемістіть курсор у слово, щоб додати його. Пусте слово не додано. Слово \"%1$s\" вже існує у словнику. + Не вдається додати слово. Невідома мова: \"%1$d\". \"%1$s\" додано. Додати слово diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ac0d79d4..3e617483 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -17,6 +17,7 @@ Blank word not added. Word \"%1$s\" is already in the dictionary. Cannot add a word when no language is selected. + Cannot add a word. Unknown language: \"%1$d\". \"%1$s\" added. Add Word