Add words without confirmation (#583)
This commit is contained in:
parent
ded66244bd
commit
b9c4d71968
21 changed files with 112 additions and 42 deletions
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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<Integer> statusHandler, Language language, String word) {
|
||||
public static void put(ConsumerCompat<AddWordResult> statusHandler, Language language, String word) {
|
||||
new Thread(() -> statusHandler.accept(getStore().put(language, word))).start();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -153,4 +153,5 @@
|
|||
<string name="virtual_numpad_alignment_right">Вдясно</string>
|
||||
<string name="function_select_keyboard">Избор на клавиатура</string>
|
||||
<string name="function_voice_input">Гласово въвеждане</string>
|
||||
<string name="add_word_no_confirmation">Добавяне без потвърждение</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -142,4 +142,5 @@
|
|||
<string name="virtual_numpad_alignment_left">Links</string>
|
||||
<string name="virtual_numpad_alignment_right">Rechts</string>
|
||||
<string name="function_select_keyboard">Tastaturauswahl</string>
|
||||
<string name="add_word_no_confirmation">Ohne Bestätigung hinzufügen</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -151,4 +151,5 @@
|
|||
<string name="virtual_numpad_alignment_left">A la izquierda</string>
|
||||
<string name="virtual_numpad_alignment_right">A la derecha</string>
|
||||
<string name="function_select_keyboard">Cambiar el teclado</string>
|
||||
<string name="add_word_no_confirmation">Añadir sin confirmación</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -149,4 +149,5 @@
|
|||
<string name="virtual_numpad_alignment_left">À gauche</string>
|
||||
<string name="virtual_numpad_alignment_right">À droite</string>
|
||||
<string name="function_select_keyboard">Choisir le clavier</string>
|
||||
<string name="add_word_no_confirmation">Ajouter sans confirmation</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -141,5 +141,6 @@
|
|||
<string name="virtual_numpad_alignment_center">Al centro</string>
|
||||
<string name="virtual_numpad_alignment_left">A sinistra</string>
|
||||
<string name="virtual_numpad_alignment_right">A destra</string>
|
||||
<string name="add_word_no_confirmation">Aggiungere senza conferma</string>
|
||||
</resources>
|
||||
|
||||
|
|
|
|||
|
|
@ -154,4 +154,5 @@
|
|||
<string name="virtual_numpad_alignment_left">שמאלה</string>
|
||||
<string name="virtual_numpad_alignment_right">ימינה</string>
|
||||
<string name="function_select_keyboard">בחירת מקלדת</string>
|
||||
<string name="add_word_no_confirmation">להוסיף ללא אישור</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -160,4 +160,5 @@
|
|||
<string name="virtual_numpad_alignment_left">Kairėje</string>
|
||||
<string name="virtual_numpad_alignment_right">Dešinėje</string>
|
||||
<string name="function_select_keyboard">Keisti klaviatūrą</string>
|
||||
<string name="add_word_no_confirmation">Pridėti be patvirtinimo</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -140,4 +140,5 @@
|
|||
<string name="virtual_numpad_alignment_left">Links</string>
|
||||
<string name="virtual_numpad_alignment_right">Rechts</string>
|
||||
<string name="function_select_keyboard">Toetsenbordkeuze</string>
|
||||
<string name="add_word_no_confirmation">Toevoegen zonder bevestiging</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -154,4 +154,5 @@
|
|||
<string name="virtual_numpad_alignment_left">À esquerda</string>
|
||||
<string name="virtual_numpad_alignment_right">À direita</string>
|
||||
<string name="function_select_keyboard">Mude o teclado</string>
|
||||
<string name="add_word_no_confirmation">Adicionar sem confirmação</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -151,4 +151,5 @@
|
|||
<string name="virtual_numpad_alignment_left">Налево</string>
|
||||
<string name="virtual_numpad_alignment_right">Направо</string>
|
||||
<string name="function_select_keyboard">Выбор клавиатуры</string>
|
||||
<string name="add_word_no_confirmation">Добавить без подтверждения</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -154,4 +154,5 @@
|
|||
<string name="virtual_numpad_alignment_left">Sola</string>
|
||||
<string name="virtual_numpad_alignment_right">Sağa</string>
|
||||
<string name="function_select_keyboard">Klavye Seçimi</string>
|
||||
<string name="add_word_no_confirmation">Onay olmadan ekle</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -162,4 +162,5 @@
|
|||
<string name="virtual_numpad_alignment_left">Ліворуч</string>
|
||||
<string name="virtual_numpad_alignment_right">Праворуч</string>
|
||||
<string name="function_select_keyboard">Змінити клавіатуру</string>
|
||||
<string name="add_word_no_confirmation">Додати без підтвердження</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
|
||||
<string name="add_word_add">Add</string>
|
||||
<string name="add_word_confirm">Add word \"%1$s\" to %2$s?</string>
|
||||
<string name="add_word_no_confirmation">Add Without Confirmation</string>
|
||||
<string name="add_word_no_selection">Move the cursor inside a word to add it.</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>
|
||||
|
|
|
|||
|
|
@ -32,6 +32,10 @@
|
|||
app:title="@string/pref_category_custom_words"
|
||||
app:singleLineTitle="true">
|
||||
|
||||
<SwitchPreferenceCompat
|
||||
app:key="add_word_no_confirmation"
|
||||
app:title="@string/add_word_no_confirmation" />
|
||||
|
||||
<Preference
|
||||
app:key="dictionary_export_custom"
|
||||
app:title="@string/dictionary_export_custom_words" />
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue