From b88957ff5f6170a4be90ce1b829f4271e8faa91b Mon Sep 17 00:00:00 2001 From: sspanak Date: Sat, 10 May 2025 13:35:22 +0300 Subject: [PATCH] significantly simplified Add Word dialog (no Activity hack) --- .../sspanak/tt9/ime/CommandHandler.java | 10 +- .../sspanak/tt9/ui/dialogs/AddWordDialog.java | 97 ++++++++++--------- .../sspanak/tt9/ui/dialogs/PopupDialog.java | 12 --- .../tt9/ui/dialogs/PopupDialogActivity.java | 1 - 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-tr/strings.xml | 1 - app/src/main/res/values-uk/strings.xml | 1 - app/src/main/res/values/strings.xml | 1 - 17 files changed, 50 insertions(+), 83 deletions(-) diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/CommandHandler.java b/app/src/main/java/io/github/sspanak/tt9/ime/CommandHandler.java index c178845e..75851cc9 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/CommandHandler.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/CommandHandler.java @@ -3,7 +3,6 @@ package io.github.sspanak.tt9.ime; import android.view.KeyEvent; import io.github.sspanak.tt9.R; -import io.github.sspanak.tt9.db.DataStore; import io.github.sspanak.tt9.db.words.DictionaryLoader; import io.github.sspanak.tt9.ime.modes.InputMode; import io.github.sspanak.tt9.ime.modes.InputModeKind; @@ -112,14 +111,7 @@ abstract public class CommandHandler extends TextEditingHandler { mainView.hideCommandPalette(); resetStatus(); - String word = textField.getSurroundingWord(mLanguage); - if (word.isEmpty()) { - UI.toastLong(this, R.string.add_word_no_selection); - } else if (settings.getAddWordsNoConfirmation()) { - DataStore.put((res) -> UI.toastLongFromAsync(this, res.toHumanFriendlyString(this)), mLanguage, word); - } else { - AddWordDialog.show(this, mLanguage.getId(), word); - } + new AddWordDialog(getFinalContext(), mLanguage, textField.getSurroundingWord(mLanguage)).show(); } 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 a4719d36..5b4614c4 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 @@ -1,80 +1,81 @@ package io.github.sspanak.tt9.ui.dialogs; -import android.content.Context; -import android.content.Intent; -import android.inputmethodservice.InputMethodService; +import android.app.Dialog; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.db.DataStore; -import io.github.sspanak.tt9.db.entities.AddWordResult; +import io.github.sspanak.tt9.ime.TraditionalT9; 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.preferences.settings.SettingsStore; +import io.github.sspanak.tt9.ui.PopupBuilder; +import io.github.sspanak.tt9.ui.UI; +import io.github.sspanak.tt9.ui.main.MainView; public class AddWordDialog extends ThemedPopupDialog { - public static final String TYPE = "tt9.popup_dialog.add_word"; - public static final String PARAMETER_LANGUAGE = "lang"; - public static final String PARAMETER_WORD = "word"; + @Nullable private final MainView mainView; + @NonNull private final Language language; + @NonNull private final SettingsStore settings; + @Nullable private final String word; - private Language language; - private String word; + private Dialog popup; - AddWordDialog(@NonNull Context context, @NonNull Intent intent, ConsumerCompat activityFinisher) { - super(context, activityFinisher, R.style.TTheme_AddWord); - title = context.getResources().getString(R.string.add_word_title); - OKLabel = context.getResources().getString(R.string.add_word_add); - parseIntent(context, intent); + public AddWordDialog(@NonNull TraditionalT9 tt9, @NonNull Language language, @Nullable String word) { + super(tt9, null, R.style.TTheme_AddWord); + mainView = tt9.getMainView(); + + title = tt9.getResources().getString(R.string.add_word_title); + OKLabel = tt9.getResources().getString(R.string.add_word_add); + message = tt9.getString(R.string.add_word_confirm, word, language.getName()); + settings = tt9.getSettings(); + + this.language = language; + this.word = word; } - private void parseIntent(@NonNull Context context, @NonNull Intent intent) { - word = intent.getStringExtra(PARAMETER_WORD); - - int languageId = intent.getIntExtra(PARAMETER_LANGUAGE, -1); - language = LanguageCollection.getLanguage(languageId); - - if (language == null) { - message = context.getString(R.string.add_word_invalid_language_x, languageId); - } else { - message = context.getString(R.string.add_word_confirm, word, language.getName()); + @Override + protected void close() { + if (popup != null) { + popup.dismiss(); + popup = null; } } private void onOK() { - if (language != null) { - DataStore.put(this::onAddingFinished, language, word); - } - } - - - private void onAddingFinished(AddWordResult addingResult) { - activityFinisher.accept(addingResult.toHumanFriendlyString(context)); + close(); + DataStore.put( + (result) -> UI.toastLongFromAsync(context, result.toHumanFriendlyString(context)), + language, + word + ); } @Override - void show() { - if (message == null || word == null || word.isEmpty()) { + public void show() { + if (word == null || word.isEmpty()) { + UI.toastLong(context, R.string.add_word_no_selection); close(); return; } - super.show(this::onOK); - } + if (settings.getAddWordsNoConfirmation()) { + onOK(); + return; + } - - public static void show(InputMethodService ims, int language, String currentWord) { - Intent intent = new Intent(ims, PopupDialogActivity.class); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); - intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); - intent.putExtra(PARAMETER_DIALOG_TYPE, TYPE); - intent.putExtra(PARAMETER_LANGUAGE, language); - intent.putExtra(PARAMETER_WORD, currentWord); - ims.startActivity(intent); + popup = new PopupBuilder(context) + .setCancelable(true) + .setTitle(title) + .setMessage(message) + .setPositiveButton(OKLabel, this::onOK) + .setNegativeButton(true, null) + .setOnKeyListener(this) + .showFromIme(mainView); } } 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 84e6adee..20c1d216 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 @@ -6,7 +6,6 @@ import android.view.KeyEvent; import androidx.annotation.NonNull; -import io.github.sspanak.tt9.ui.PopupBuilder; import io.github.sspanak.tt9.util.ConsumerCompat; abstract public class PopupDialog implements DialogInterface.OnKeyListener { @@ -36,16 +35,5 @@ abstract public class PopupDialog implements DialogInterface.OnKeyListener { return false; } - protected void show(Runnable OKAction) { - new PopupBuilder(context) - .setCancelable(false) - .setTitle(title) - .setMessage(message) - .setPositiveButton(OKLabel, OKAction) - .setNegativeButton(true, () -> activityFinisher.accept("")) - .setOnKeyListener(this) - .show(); - } - abstract void show(); } diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/dialogs/PopupDialogActivity.java b/app/src/main/java/io/github/sspanak/tt9/ui/dialogs/PopupDialogActivity.java index 59f7aa02..dd8450a0 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/dialogs/PopupDialogActivity.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/dialogs/PopupDialogActivity.java @@ -32,7 +32,6 @@ public class PopupDialogActivity extends AppCompatActivity { popupType = popupType != null ? popupType : ""; return switch (popupType) { - case AddWordDialog.TYPE -> new AddWordDialog(this, i, this::onDialogClose); case AutoUpdateMonolog.TYPE -> new AutoUpdateMonolog(this, i, this::onDialogClose); default -> { Logger.w(LOG_TAG, "Unknown popup type: '" + popupType + "'. Not displaying anything."); diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 5598fc01..17a917aa 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -9,7 +9,6 @@ Преместете показалеца върху дума, за да я добавите към речника. Не може да се въведе празна дума. Думата „%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 b49dd4ac..0a18e37b 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -9,7 +9,6 @@ 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 a2cc9644..bb0a875e 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -16,7 +16,6 @@ Cargando… 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 99d96b8e..54cad927 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -9,7 +9,6 @@ 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 Sélectionner une commande diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 1848ec33..a494da79 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -11,7 +11,6 @@ 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 d7c6ee39..af10492b 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -11,7 +11,6 @@ הזיזו את הסמן בתוך מילה כדי להוסיף אותה. מילה ריקה לא נוספה המילה \"%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 5bdfa52a..81d3f629 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -12,7 +12,6 @@ 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 7d3a84eb..98fff4d5 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -9,7 +9,6 @@ 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 Een commando selecteren diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 24316e3a..9b5ee300 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -11,7 +11,6 @@ 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 8e637baf..7904a8a3 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -9,7 +9,6 @@ Переместите курсор внутрь слова, чтобы добавить его. Невозможно добавить слово. Слово «%1$s» уже есть в словаре. - Невозможно добавить слово. Неизвестный язык: \"%1$d\". «%1$s» добавлено Добавить слово Выбрать команду diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 84c06bdf..d39d42c7 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -9,7 +9,6 @@ Ekleme yapmak için imleci eklemek istediğiniz kelimeye götürün. Boşluk eklenemedi. \"%1$s\" kelimesi zaten kelime listesinde mevcut. - Kelime eklenemedi. Bilinmeyen dil: \"%1$d\". \"%1$s\" başarıyla eklendi. Kelime Ekle diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 7b234ddb..5fbc15ae 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -12,7 +12,6 @@ Перемістіть курсор у слово, щоб додати його. Пусте слово не додано. Слово \"%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 38f181ba..e3b68742 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -21,7 +21,6 @@ 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