1
0
Fork 0

significantly simplified Add Word dialog (no Activity hack)

This commit is contained in:
sspanak 2025-05-10 13:35:22 +03:00 committed by Dimo Karaivanov
parent 18c2ab8440
commit b88957ff5f
17 changed files with 50 additions and 83 deletions

View file

@ -3,7 +3,6 @@ package io.github.sspanak.tt9.ime;
import android.view.KeyEvent; import android.view.KeyEvent;
import io.github.sspanak.tt9.R; 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.db.words.DictionaryLoader;
import io.github.sspanak.tt9.ime.modes.InputMode; import io.github.sspanak.tt9.ime.modes.InputMode;
import io.github.sspanak.tt9.ime.modes.InputModeKind; import io.github.sspanak.tt9.ime.modes.InputModeKind;
@ -112,14 +111,7 @@ abstract public class CommandHandler extends TextEditingHandler {
mainView.hideCommandPalette(); mainView.hideCommandPalette();
resetStatus(); resetStatus();
String word = textField.getSurroundingWord(mLanguage); new AddWordDialog(getFinalContext(), mLanguage, textField.getSurroundingWord(mLanguage)).show();
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);
}
} }

View file

@ -1,80 +1,81 @@
package io.github.sspanak.tt9.ui.dialogs; package io.github.sspanak.tt9.ui.dialogs;
import android.content.Context; import android.app.Dialog;
import android.content.Intent;
import android.inputmethodservice.InputMethodService;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.R;
import io.github.sspanak.tt9.db.DataStore; 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.Language;
import io.github.sspanak.tt9.languages.LanguageCollection; import io.github.sspanak.tt9.preferences.settings.SettingsStore;
import io.github.sspanak.tt9.util.ConsumerCompat; 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 class AddWordDialog extends ThemedPopupDialog {
public static final String TYPE = "tt9.popup_dialog.add_word"; @Nullable private final MainView mainView;
public static final String PARAMETER_LANGUAGE = "lang"; @NonNull private final Language language;
public static final String PARAMETER_WORD = "word"; @NonNull private final SettingsStore settings;
@Nullable private final String word;
private Language language; private Dialog popup;
private String word;
AddWordDialog(@NonNull Context context, @NonNull Intent intent, ConsumerCompat<String> activityFinisher) { public AddWordDialog(@NonNull TraditionalT9 tt9, @NonNull Language language, @Nullable String word) {
super(context, activityFinisher, R.style.TTheme_AddWord); super(tt9, null, R.style.TTheme_AddWord);
title = context.getResources().getString(R.string.add_word_title); mainView = tt9.getMainView();
OKLabel = context.getResources().getString(R.string.add_word_add);
parseIntent(context, intent); 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) { @Override
word = intent.getStringExtra(PARAMETER_WORD); protected void close() {
if (popup != null) {
int languageId = intent.getIntExtra(PARAMETER_LANGUAGE, -1); popup.dismiss();
language = LanguageCollection.getLanguage(languageId); popup = null;
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());
} }
} }
private void onOK() { private void onOK() {
if (language != null) { close();
DataStore.put(this::onAddingFinished, language, word); DataStore.put(
} (result) -> UI.toastLongFromAsync(context, result.toHumanFriendlyString(context)),
} language,
word
);
private void onAddingFinished(AddWordResult addingResult) {
activityFinisher.accept(addingResult.toHumanFriendlyString(context));
} }
@Override @Override
void show() { public void show() {
if (message == null || word == null || word.isEmpty()) { if (word == null || word.isEmpty()) {
UI.toastLong(context, R.string.add_word_no_selection);
close(); close();
return; return;
} }
super.show(this::onOK); if (settings.getAddWordsNoConfirmation()) {
} onOK();
return;
}
popup = new PopupBuilder(context)
public static void show(InputMethodService ims, int language, String currentWord) { .setCancelable(true)
Intent intent = new Intent(ims, PopupDialogActivity.class); .setTitle(title)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); .setMessage(message)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); .setPositiveButton(OKLabel, this::onOK)
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); .setNegativeButton(true, null)
intent.putExtra(PARAMETER_DIALOG_TYPE, TYPE); .setOnKeyListener(this)
intent.putExtra(PARAMETER_LANGUAGE, language); .showFromIme(mainView);
intent.putExtra(PARAMETER_WORD, currentWord);
ims.startActivity(intent);
} }
} }

View file

@ -6,7 +6,6 @@ import android.view.KeyEvent;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import io.github.sspanak.tt9.ui.PopupBuilder;
import io.github.sspanak.tt9.util.ConsumerCompat; import io.github.sspanak.tt9.util.ConsumerCompat;
abstract public class PopupDialog implements DialogInterface.OnKeyListener { abstract public class PopupDialog implements DialogInterface.OnKeyListener {
@ -36,16 +35,5 @@ abstract public class PopupDialog implements DialogInterface.OnKeyListener {
return false; 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(); abstract void show();
} }

View file

@ -32,7 +32,6 @@ public class PopupDialogActivity extends AppCompatActivity {
popupType = popupType != null ? popupType : ""; popupType = popupType != null ? popupType : "";
return switch (popupType) { return switch (popupType) {
case AddWordDialog.TYPE -> new AddWordDialog(this, i, this::onDialogClose);
case AutoUpdateMonolog.TYPE -> new AutoUpdateMonolog(this, i, this::onDialogClose); case AutoUpdateMonolog.TYPE -> new AutoUpdateMonolog(this, i, this::onDialogClose);
default -> { default -> {
Logger.w(LOG_TAG, "Unknown popup type: '" + popupType + "'. Not displaying anything."); Logger.w(LOG_TAG, "Unknown popup type: '" + popupType + "'. Not displaying anything.");

View file

@ -9,7 +9,6 @@
<string name="add_word_no_selection">Преместете показалеца върху дума, за да я добавите към речника.</string> <string name="add_word_no_selection">Преместете показалеца върху дума, за да я добавите към речника.</string>
<string name="add_word_blank">Не може да се въведе празна дума.</string> <string name="add_word_blank">Не може да се въведе празна дума.</string>
<string name="add_word_exist">Думата „%1$s“ вече съществува в речника.</string> <string name="add_word_exist">Думата „%1$s“ вече съществува в речника.</string>
<string name="add_word_invalid_language_x">Не може да се добави дума. Неразпознат език: „%1$d“.</string>
<string name="add_word_success">„%1$s“ е добавена.</string> <string name="add_word_success">„%1$s“ е добавена.</string>
<string name="add_word_title">Добавяне на дума</string> <string name="add_word_title">Добавяне на дума</string>
<string name="commands_select_command">Изберете команда</string> <string name="commands_select_command">Изберете команда</string>

View file

@ -9,7 +9,6 @@
<string name="add_word_no_selection">Bewegen Sie den Cursor innerhalb eines Wortes, um es hinzuzufügen.</string> <string name="add_word_no_selection">Bewegen Sie den Cursor innerhalb eines Wortes, um es hinzuzufügen.</string>
<string name="add_word_blank">Leeres Wort nicht hinzugefügt.</string> <string name="add_word_blank">Leeres Wort nicht hinzugefügt.</string>
<string name="add_word_exist">Das Wort \"%1$s\" ist bereits in Wörterbuch.</string> <string name="add_word_exist">Das Wort \"%1$s\" ist bereits in Wörterbuch.</string>
<string name="add_word_invalid_language_x">Wort kann nicht hinzugefügt werden. Unbekannte Sprache: \"%1$d\".</string>
<string name="add_word_success">\"%1$s\" hinzugefügt.</string> <string name="add_word_success">\"%1$s\" hinzugefügt.</string>
<string name="add_word_title">Wort hinzufügen</string> <string name="add_word_title">Wort hinzufügen</string>

View file

@ -16,7 +16,6 @@
<string name="loading">Cargando…</string> <string name="loading">Cargando…</string>
<string name="error_unexpected">Ocurrió un error inesperado.</string> <string name="error_unexpected">Ocurrió un error inesperado.</string>
<string name="add_word_exist">La palabra \"%1$s\" ya esta en el diccionario.</string> <string name="add_word_exist">La palabra \"%1$s\" ya esta en el diccionario.</string>
<string name="add_word_invalid_language_x">No se puede agregar una palabra. Idioma desconocido: \"%1$d\".</string>
<string name="add_word_success">\"%1$s\" añadida.</string> <string name="add_word_success">\"%1$s\" añadida.</string>
<string name="add_word_title">Agregar palabra</string> <string name="add_word_title">Agregar palabra</string>
<string name="pref_category_abc_mode">Modo ABC</string> <string name="pref_category_abc_mode">Modo ABC</string>

View file

@ -9,7 +9,6 @@
<string name="add_word_no_selection">Déplacez le curseur dans un mot pour l\'ajouter.</string> <string name="add_word_no_selection">Déplacez le curseur dans un mot pour l\'ajouter.</string>
<string name="add_word_blank">Mot vide non ajouté.</string> <string name="add_word_blank">Mot vide non ajouté.</string>
<string name="add_word_exist">Le mot «%1$s» est déjà dans le dictionnaire.</string> <string name="add_word_exist">Le mot «%1$s» est déjà dans le dictionnaire.</string>
<string name="add_word_invalid_language_x">Impossible d\'ajouter un mot. Langue inconnue : « %1$d ».</string>
<string name="add_word_success">« %1$s » est ajouté</string> <string name="add_word_success">« %1$s » est ajouté</string>
<string name="add_word_title">Ajouter un mot</string> <string name="add_word_title">Ajouter un mot</string>
<string name="commands_select_command">Sélectionner une commande</string> <string name="commands_select_command">Sélectionner une commande</string>

View file

@ -11,7 +11,6 @@
<string name="add_word_no_selection">Sposta il cursore dentro un parola per aggiungerla.</string> <string name="add_word_no_selection">Sposta il cursore dentro un parola per aggiungerla.</string>
<string name="add_word_blank">Nessuna parola da aggiungere.</string> <string name="add_word_blank">Nessuna parola da aggiungere.</string>
<string name="add_word_exist">Parola “%1$s” già nel dizionario.</string> <string name="add_word_exist">Parola “%1$s” già nel dizionario.</string>
<string name="add_word_invalid_language_x">Impossibile aggiungere una parola. Lingua sconosciuta: \"%1$d\".</string>
<string name="add_word_success">\"%1$s\" aggiunta.</string> <string name="add_word_success">\"%1$s\" aggiunta.</string>
<string name="add_word_title">Aggiungi parola</string> <string name="add_word_title">Aggiungi parola</string>

View file

@ -11,7 +11,6 @@
<string name="add_word_no_selection">הזיזו את הסמן בתוך מילה כדי להוסיף אותה.</string> <string name="add_word_no_selection">הזיזו את הסמן בתוך מילה כדי להוסיף אותה.</string>
<string name="add_word_blank">מילה ריקה לא נוספה</string> <string name="add_word_blank">מילה ריקה לא נוספה</string>
<string name="add_word_exist">המילה \"%1$s\" כבר קיימת במילון.</string> <string name="add_word_exist">המילה \"%1$s\" כבר קיימת במילון.</string>
<string name="add_word_invalid_language_x">לא ניתן להוסיף מילה. שפה לא ידועה: \"%1$d\".</string>
<string name="add_word_success">%1$s נוסף.</string> <string name="add_word_success">%1$s נוסף.</string>
<string name="add_word_title">הוסף מילה</string> <string name="add_word_title">הוסף מילה</string>

View file

@ -12,7 +12,6 @@
<string name="add_word_no_selection">Perkelkite žymeklį prie žodžio kurį norite pridėti.</string> <string name="add_word_no_selection">Perkelkite žymeklį prie žodžio kurį norite pridėti.</string>
<string name="add_word_blank">Negalima pridėti tuščio žodžio.</string> <string name="add_word_blank">Negalima pridėti tuščio žodžio.</string>
<string name="add_word_exist">Žodis \"%1$s\" jau yra žodyne.</string> <string name="add_word_exist">Žodis \"%1$s\" jau yra žodyne.</string>
<string name="add_word_invalid_language_x">Negalima pridėti žodžio. Nežinoma kalba: \"%1$d\".</string>
<string name="add_word_success">Žodis \"%1$s\" pridėtas.</string> <string name="add_word_success">Žodis \"%1$s\" pridėtas.</string>
<string name="add_word_title">Pridėti žodį</string> <string name="add_word_title">Pridėti žodį</string>

View file

@ -9,7 +9,6 @@
<string name="add_word_no_selection">Verplaats de cursor binnen een woord om het toe te voegen.</string> <string name="add_word_no_selection">Verplaats de cursor binnen een woord om het toe te voegen.</string>
<string name="add_word_blank">Leeg woord niet toegevoegd.</string> <string name="add_word_blank">Leeg woord niet toegevoegd.</string>
<string name="add_word_exist">Woord \"%1$s\" staat al in het woordenboek.</string> <string name="add_word_exist">Woord \"%1$s\" staat al in het woordenboek.</string>
<string name="add_word_invalid_language_x">Kan geen woord toevoegen. Onbekende taal: \"%1$d\".</string>
<string name="add_word_success">\"%1$s\" toegevoegd.</string> <string name="add_word_success">\"%1$s\" toegevoegd.</string>
<string name="add_word_title">Woord toevoegen</string> <string name="add_word_title">Woord toevoegen</string>
<string name="commands_select_command">Een commando selecteren</string> <string name="commands_select_command">Een commando selecteren</string>

View file

@ -11,7 +11,6 @@
<string name="add_word_no_selection">Mova o cursor dentro de uma palavra para adicioná-la.</string> <string name="add_word_no_selection">Mova o cursor dentro de uma palavra para adicioná-la.</string>
<string name="add_word_blank">Palavra em branco, impossível adicionar.</string> <string name="add_word_blank">Palavra em branco, impossível adicionar.</string>
<string name="add_word_exist">Palavra \"%1$s\" já está registrada.</string> <string name="add_word_exist">Palavra \"%1$s\" já está registrada.</string>
<string name="add_word_invalid_language_x">Não é possível adicionar uma palavra. Idioma desconhecido: \"%1$d\".</string>
<string name="add_word_success">\"%1$s\" adicionada.</string> <string name="add_word_success">\"%1$s\" adicionada.</string>
<string name="add_word_title">Adicionar Palavra</string> <string name="add_word_title">Adicionar Palavra</string>

View file

@ -9,7 +9,6 @@
<string name="add_word_no_selection">Переместите курсор внутрь слова, чтобы добавить его.</string> <string name="add_word_no_selection">Переместите курсор внутрь слова, чтобы добавить его.</string>
<string name="add_word_blank">Невозможно добавить слово.</string> <string name="add_word_blank">Невозможно добавить слово.</string>
<string name="add_word_exist">Слово «%1$s» уже есть в словаре.</string> <string name="add_word_exist">Слово «%1$s» уже есть в словаре.</string>
<string name="add_word_invalid_language_x">Невозможно добавить слово. Неизвестный язык: \"%1$d\".</string>
<string name="add_word_success">«%1$s» добавлено</string> <string name="add_word_success">«%1$s» добавлено</string>
<string name="add_word_title">Добавить слово</string> <string name="add_word_title">Добавить слово</string>
<string name="commands_select_command">Выбрать команду</string> <string name="commands_select_command">Выбрать команду</string>

View file

@ -9,7 +9,6 @@
<string name="add_word_no_selection">Ekleme yapmak için imleci eklemek istediğiniz kelimeye götürün.</string> <string name="add_word_no_selection">Ekleme yapmak için imleci eklemek istediğiniz kelimeye götürün.</string>
<string name="add_word_blank">Boşluk eklenemedi.</string> <string name="add_word_blank">Boşluk eklenemedi.</string>
<string name="add_word_exist">\"%1$s\" kelimesi zaten kelime listesinde mevcut.</string> <string name="add_word_exist">\"%1$s\" kelimesi zaten kelime listesinde mevcut.</string>
<string name="add_word_invalid_language_x">Kelime eklenemedi. Bilinmeyen dil: \"%1$d\".</string>
<string name="add_word_success">\"%1$s\" başarıyla eklendi.</string> <string name="add_word_success">\"%1$s\" başarıyla eklendi.</string>
<string name="add_word_title">Kelime Ekle</string> <string name="add_word_title">Kelime Ekle</string>

View file

@ -12,7 +12,6 @@
<string name="add_word_no_selection">Перемістіть курсор у слово, щоб додати його.</string> <string name="add_word_no_selection">Перемістіть курсор у слово, щоб додати його.</string>
<string name="add_word_blank">Пусте слово не додано.</string> <string name="add_word_blank">Пусте слово не додано.</string>
<string name="add_word_exist">Слово \"%1$s\" вже існує у словнику.</string> <string name="add_word_exist">Слово \"%1$s\" вже існує у словнику.</string>
<string name="add_word_invalid_language_x">Не вдається додати слово. Невідома мова: \"%1$d\".</string>
<string name="add_word_success">\"%1$s\" додано.</string> <string name="add_word_success">\"%1$s\" додано.</string>
<string name="add_word_title">Додати слово</string> <string name="add_word_title">Додати слово</string>

View file

@ -21,7 +21,6 @@
<string name="add_word_blank">Blank word not added.</string> <string name="add_word_blank">Blank word not added.</string>
<string name="add_word_exist">Word \"%1$s\" is already in the dictionary.</string> <string name="add_word_exist">Word \"%1$s\" is already in the dictionary.</string>
<string name="add_word_invalid_language" translatable="false">Cannot add a word when no language is selected.</string> <string name="add_word_invalid_language" translatable="false">Cannot add a word when no language is selected.</string>
<string name="add_word_invalid_language_x">Cannot add a word. Unknown language: \"%1$d\".</string>
<string name="add_word_success">\"%1$s\" added.</string> <string name="add_word_success">\"%1$s\" added.</string>
<string name="add_word_title">Add Word</string> <string name="add_word_title">Add Word</string>