diff --git a/app/src/main/java/io/github/sspanak/tt9/db/WordStore.java b/app/src/main/java/io/github/sspanak/tt9/db/WordStore.java index acf5e231..a44461c5 100644 --- a/app/src/main/java/io/github/sspanak/tt9/db/WordStore.java +++ b/app/src/main/java/io/github/sspanak/tt9/db/WordStore.java @@ -6,6 +6,7 @@ import androidx.annotation.NonNull; import java.util.ArrayList; +import io.github.sspanak.tt9.db.entities.AddWordResult; import io.github.sspanak.tt9.db.entities.NormalizationList; import io.github.sspanak.tt9.db.entities.Word; import io.github.sspanak.tt9.db.entities.WordList; @@ -18,7 +19,6 @@ import io.github.sspanak.tt9.languages.EmojiLanguage; import io.github.sspanak.tt9.languages.Language; import io.github.sspanak.tt9.languages.NullLanguage; import io.github.sspanak.tt9.preferences.settings.SettingsStore; -import io.github.sspanak.tt9.ui.dialogs.AddWordDialog; import io.github.sspanak.tt9.util.Logger; import io.github.sspanak.tt9.util.Text; import io.github.sspanak.tt9.util.Timer; @@ -142,25 +142,24 @@ public class WordStore { } - - public int put(Language language, String word) { + @NonNull public AddWordResult put(Language language, String word) { if (word == null || word.isEmpty()) { - return AddWordDialog.CODE_BLANK_WORD; + return new AddWordResult(AddWordResult.CODE_BLANK_WORD, word); } if (language == null || language instanceof NullLanguage) { - return AddWordDialog.CODE_INVALID_LANGUAGE; + return new AddWordResult(AddWordResult.CODE_INVALID_LANGUAGE, word); } if (!checkOrNotify()) { - return AddWordDialog.CODE_GENERAL_ERROR; + return new AddWordResult(AddWordResult.CODE_GENERAL_ERROR, word); } language = Text.isGraphic(word) ? new EmojiLanguage() : language; try { if (readOps.exists(sqlite.getDb(), language, word)) { - return AddWordDialog.CODE_WORD_EXISTS; + return new AddWordResult(AddWordResult.CODE_WORD_EXISTS, word); } String sequence = language.getDigitSequenceForWord(word); @@ -173,10 +172,10 @@ public class WordStore { } catch (Exception e) { String msg = "Failed inserting word: '" + word + "' for language: " + language.getId() + ". " + e.getMessage(); Logger.e("insertWord", msg); - return AddWordDialog.CODE_GENERAL_ERROR; + return new AddWordResult(AddWordResult.CODE_GENERAL_ERROR, word); } - return AddWordDialog.CODE_SUCCESS; + return new AddWordResult(AddWordResult.CODE_SUCCESS, word); } diff --git a/app/src/main/java/io/github/sspanak/tt9/db/WordStoreAsync.java b/app/src/main/java/io/github/sspanak/tt9/db/WordStoreAsync.java index 37b372df..985ffc2b 100644 --- a/app/src/main/java/io/github/sspanak/tt9/db/WordStoreAsync.java +++ b/app/src/main/java/io/github/sspanak/tt9/db/WordStoreAsync.java @@ -7,8 +7,9 @@ import androidx.annotation.NonNull; import java.util.ArrayList; -import io.github.sspanak.tt9.util.ConsumerCompat; +import io.github.sspanak.tt9.db.entities.AddWordResult; import io.github.sspanak.tt9.languages.Language; +import io.github.sspanak.tt9.util.ConsumerCompat; public class WordStoreAsync { private static WordStore store; @@ -56,7 +57,7 @@ public class WordStoreAsync { } - public static void put(ConsumerCompat statusHandler, Language language, String word) { + public static void put(ConsumerCompat statusHandler, Language language, String word) { new Thread(() -> statusHandler.accept(getStore().put(language, word))).start(); } diff --git a/app/src/main/java/io/github/sspanak/tt9/db/entities/AddWordResult.java b/app/src/main/java/io/github/sspanak/tt9/db/entities/AddWordResult.java new file mode 100644 index 00000000..8774e3c5 --- /dev/null +++ b/app/src/main/java/io/github/sspanak/tt9/db/entities/AddWordResult.java @@ -0,0 +1,67 @@ +package io.github.sspanak.tt9.db.entities; + +import android.content.Context; + +import androidx.annotation.NonNull; + +import io.github.sspanak.tt9.R; +import io.github.sspanak.tt9.languages.Language; + +public class AddWordResult { + public static final int CODE_SUCCESS = 0; + public static final int CODE_BLANK_WORD = 1; + public static final int CODE_INVALID_LANGUAGE = 2; + public static final int CODE_WORD_EXISTS = 3; + public static final int CODE_GENERAL_ERROR = 666; + + private final int statusCode; + private final String word; + + public AddWordResult(int statusCode, String word) { + this.statusCode = statusCode; + this.word = word; + } + + public String toHumanFriendlyString(Context context) { + switch (statusCode) { + case CODE_SUCCESS: + return context.getString(R.string.add_word_success, word); + + case CODE_WORD_EXISTS: + return context.getResources().getString(R.string.add_word_exist, word); + + case CODE_BLANK_WORD: + return context.getString(R.string.add_word_blank); + + case CODE_INVALID_LANGUAGE: + return context.getResources().getString(R.string.add_word_invalid_language); + + default: + return context.getString(R.string.error_unexpected); + } + } + + @NonNull + @Override + public String toString() { + switch (statusCode) { + case CODE_SUCCESS: + return "Success"; + + case CODE_BLANK_WORD: + return "Blank word"; + + case CODE_INVALID_LANGUAGE: + return "Invalid language"; + + case CODE_WORD_EXISTS: + return "Word '" + word + "' exists"; + + case CODE_GENERAL_ERROR: + return "General error"; + + default: + return "Unknown error"; + } + } +} 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 8d1e8b7c..50a826b2 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 @@ -2,6 +2,7 @@ package io.github.sspanak.tt9.ime; import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.db.DictionaryLoader; +import io.github.sspanak.tt9.db.WordStoreAsync; import io.github.sspanak.tt9.ime.modes.InputMode; import io.github.sspanak.tt9.ime.modes.ModeABC; import io.github.sspanak.tt9.languages.LanguageCollection; @@ -93,6 +94,8 @@ abstract public class CommandHandler extends TextEditingHandler { String word = textField.getSurroundingWord(mLanguage); if (word.isEmpty()) { UI.toastLong(this, R.string.add_word_no_selection); + } else if (settings.getAddWordsNoConfirmation()) { + WordStoreAsync.put((res) -> UI.toastLongFromAsync(this, res.toHumanFriendlyString(this)), mLanguage, word); } else { AddWordDialog.show(this, mLanguage.getId(), word); } diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsUI.java b/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsUI.java index 96226729..6b8515d3 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsUI.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsUI.java @@ -22,6 +22,10 @@ public class SettingsUI extends SettingsTyping { SettingsUI(Context context) { super(context); } + public boolean getAddWordsNoConfirmation() { + return prefs.getBoolean("add_word_no_confirmation", false); + } + public boolean isStatusIconEnabled() { return prefs.getBoolean("pref_status_icon", DeviceInfo.isQinF21()); } 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 3f4f87e0..92de92b5 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 @@ -80,6 +80,13 @@ public class UI { Toast.makeText(context, msg, Toast.LENGTH_LONG).show(); } + public static void toastLongFromAsync(Context context, CharSequence msg) { + if (Looper.myLooper() == null) { + Looper.prepare(); + } + toastLong(context, msg); + } + public static void toastShortSingle(@NonNull Context context, @NonNull String uniqueId, @NonNull String message) { Toast toast = singleToasts.get(uniqueId); 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 655f21df..4e14a48f 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 @@ -8,17 +8,12 @@ import androidx.annotation.NonNull; import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.db.WordStoreAsync; +import io.github.sspanak.tt9.db.entities.AddWordResult; 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; - public static final int CODE_BLANK_WORD = 1; - public static final int CODE_INVALID_LANGUAGE = 2; - 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"; @@ -57,31 +52,8 @@ public class AddWordDialog extends PopupDialog { } - private void onAddingFinished(int statusCode) { - String response; - switch (statusCode) { - case CODE_SUCCESS: - response = context.getString(R.string.add_word_success, word); - break; - - case CODE_WORD_EXISTS: - response = context.getResources().getString(R.string.add_word_exist, word); - break; - - case CODE_BLANK_WORD: - response = context.getString(R.string.add_word_blank); - break; - - case CODE_INVALID_LANGUAGE: - response = context.getResources().getString(R.string.add_word_invalid_language); - break; - - default: - response = context.getString(R.string.error_unexpected); - break; - } - - activityFinisher.accept(response); + private void onAddingFinished(AddWordResult addingResult) { + activityFinisher.accept(addingResult.toHumanFriendlyString(context)); } diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 794fe516..b80edc5f 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -153,4 +153,5 @@ Вдясно Избор на клавиатура Гласово въвеждане + Добавяне без потвърждение diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 7821af36..3aceabac 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -142,4 +142,5 @@ Links Rechts Tastaturauswahl + Ohne Bestätigung hinzufügen diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 8cd94b36..7a4301d3 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -151,4 +151,5 @@ A la izquierda A la derecha Cambiar el teclado + Añadir sin confirmación diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 83c44d1e..e1b2f64b 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -149,4 +149,5 @@ À gauche À droite Choisir le clavier + Ajouter sans confirmation diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 749ec4e7..2e494304 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -141,5 +141,6 @@ Al centro A sinistra A destra + Aggiungere senza conferma diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 851cf6d6..1ba5d674 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -154,4 +154,5 @@ שמאלה ימינה בחירת מקלדת + להוסיף ללא אישור diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 61097946..752f5634 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -160,4 +160,5 @@ Kairėje Dešinėje Keisti klaviatūrą + Pridėti be patvirtinimo diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 36fc9d3a..da1b249a 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -140,4 +140,5 @@ Links Rechts Toetsenbordkeuze + Toevoegen zonder bevestiging diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index bed688d5..81d75cd0 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -154,4 +154,5 @@ À esquerda À direita Mude o teclado + Adicionar sem confirmação diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 3aa8da11..ef3f98cd 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -151,4 +151,5 @@ Налево Направо Выбор клавиатуры + Добавить без подтверждения diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 5a5e0ab0..53374418 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -154,4 +154,5 @@ Sola Sağa Klavye Seçimi + Onay olmadan ekle diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 3bbcf931..254a6864 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -162,4 +162,5 @@ Ліворуч Праворуч Змінити клавіатуру + Додати без підтвердження diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 94ab31aa..65ef51d2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -15,6 +15,7 @@ Add Add word \"%1$s\" to %2$s? + Add Without Confirmation Move the cursor inside a word to add it. Blank word not added. Word \"%1$s\" is already in the dictionary. diff --git a/app/src/main/res/xml/prefs_screen_languages.xml b/app/src/main/res/xml/prefs_screen_languages.xml index 7103e5e0..fd963b39 100644 --- a/app/src/main/res/xml/prefs_screen_languages.xml +++ b/app/src/main/res/xml/prefs_screen_languages.xml @@ -32,6 +32,10 @@ app:title="@string/pref_category_custom_words" app:singleLineTitle="true"> + +