fixed a potential NullPointerException when trying to type with no language
This commit is contained in:
parent
d1f8a773f8
commit
433d5f401a
19 changed files with 20 additions and 44 deletions
|
|
@ -1,6 +1,7 @@
|
|||
package io.github.sspanak.tt9.ime.modes;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
|
@ -8,6 +9,7 @@ import io.github.sspanak.tt9.hacks.InputType;
|
|||
import io.github.sspanak.tt9.ime.helpers.TextField;
|
||||
import io.github.sspanak.tt9.languages.Language;
|
||||
import io.github.sspanak.tt9.languages.NaturalLanguage;
|
||||
import io.github.sspanak.tt9.languages.NullLanguage;
|
||||
import io.github.sspanak.tt9.preferences.settings.SettingsStore;
|
||||
import io.github.sspanak.tt9.util.Logger;
|
||||
|
||||
|
|
@ -31,9 +33,9 @@ abstract public class InputMode {
|
|||
// data
|
||||
protected int autoAcceptTimeout = -1;
|
||||
@NonNull protected String digitSequence = "";
|
||||
protected Language language;
|
||||
@NonNull protected Language language = new NullLanguage();
|
||||
protected final SettingsStore settings;
|
||||
protected final ArrayList<String> suggestions = new ArrayList<>();
|
||||
@NonNull protected final ArrayList<String> suggestions = new ArrayList<>();
|
||||
@NonNull protected Runnable onSuggestionsUpdated = () -> {};
|
||||
protected int specialCharSelectedGroup = 0;
|
||||
|
||||
|
|
@ -43,7 +45,7 @@ abstract public class InputMode {
|
|||
}
|
||||
|
||||
|
||||
public static InputMode getInstance(SettingsStore settings, Language language, InputType inputType, TextField textField, int mode) {
|
||||
public static InputMode getInstance(SettingsStore settings, @Nullable Language language, InputType inputType, TextField textField, int mode) {
|
||||
switch (mode) {
|
||||
case MODE_PREDICTIVE:
|
||||
return new ModePredictive(settings, inputType, textField, language);
|
||||
|
|
@ -103,10 +105,8 @@ abstract public class InputMode {
|
|||
public int getAutoAcceptTimeout() {
|
||||
return autoAcceptTimeout;
|
||||
}
|
||||
public void changeLanguage(Language newLanguage) {
|
||||
if (newLanguage != null) {
|
||||
language = newLanguage;
|
||||
}
|
||||
public void changeLanguage(@Nullable Language newLanguage) {
|
||||
language = newLanguage != null ? newLanguage : new NullLanguage();
|
||||
}
|
||||
|
||||
// Interaction with the IME. Return "true" if it should perform the respective action.
|
||||
|
|
@ -181,7 +181,7 @@ abstract public class InputMode {
|
|||
|
||||
|
||||
protected boolean loadSpecialCharacters() {
|
||||
if (language == null || digitSequence.isEmpty()) {
|
||||
if (digitSequence.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -208,7 +208,7 @@ abstract public class InputMode {
|
|||
* list of characters, for example in email, numeric or other specialized fields.
|
||||
*/
|
||||
protected ArrayList<String> applyPunctuationOrder(ArrayList<String> unordered, int key) {
|
||||
if (language == null || specialCharSelectedGroup != 0 || key > 1) {
|
||||
if (specialCharSelectedGroup != 0 || key > 1) {
|
||||
return new ArrayList<>(unordered);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package io.github.sspanak.tt9.ime.modes;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
|
@ -85,8 +86,8 @@ public class ModeABC extends InputMode {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void changeLanguage(Language language) {
|
||||
super.changeLanguage(language);
|
||||
public void changeLanguage(@Nullable Language newLanguage) {
|
||||
super.changeLanguage(newLanguage);
|
||||
|
||||
allowedTextCases.clear();
|
||||
allowedTextCases.add(CASE_LOWER);
|
||||
|
|
@ -112,10 +113,6 @@ public class ModeABC extends InputMode {
|
|||
@NonNull
|
||||
@Override
|
||||
public String toString() {
|
||||
if (language == null) {
|
||||
return textCase == CASE_LOWER ? "abc" : "ABC";
|
||||
}
|
||||
|
||||
String modeString = language.getAbcString();
|
||||
|
||||
// There are many languages written using the same alphabet, so if the user has
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package io.github.sspanak.tt9.ime.modes;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
|
@ -107,8 +108,8 @@ public class ModePredictive extends InputMode {
|
|||
|
||||
|
||||
@Override
|
||||
public void changeLanguage(Language language) {
|
||||
super.changeLanguage(language);
|
||||
public void changeLanguage(@Nullable Language newLanguage) {
|
||||
super.changeLanguage(newLanguage);
|
||||
|
||||
autoSpace.setLanguage(language);
|
||||
|
||||
|
|
@ -509,10 +510,6 @@ public class ModePredictive extends InputMode {
|
|||
@NonNull
|
||||
@Override
|
||||
public String toString() {
|
||||
if (language == null) {
|
||||
return "Predictive";
|
||||
}
|
||||
|
||||
String modeString = language.getName();
|
||||
if (textCase == CASE_UPPER) {
|
||||
return modeString.toUpperCase(language.getLocale());
|
||||
|
|
|
|||
|
|
@ -108,8 +108,8 @@ public class Predictions {
|
|||
private void loadWithoutLeadingPunctuation() {
|
||||
DataStore.getWords(
|
||||
(dbWords) -> {
|
||||
char firstChar = inputWord.charAt(0);
|
||||
for (int i = 0; i < dbWords.size(); i++) {
|
||||
char firstChar = inputWord.isEmpty() ? 0 : inputWord.charAt(0);
|
||||
for (int i = 0; firstChar > 0 && i < dbWords.size(); i++) {
|
||||
dbWords.set(i, firstChar + dbWords.get(i));
|
||||
}
|
||||
onDbWords(dbWords, false);
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ public class LanguageCollection {
|
|||
@NonNull public static Language getDefault(Context context) {
|
||||
Language language = getByLocale(context, SystemSettings.getLocale());
|
||||
language = language == null ? getByLocale(context, "en") : language;
|
||||
return language == null ? new NullLanguage(context) : language;
|
||||
return language == null ? new NullLanguage() : language;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
|
|
|||
|
|
@ -1,18 +1,14 @@
|
|||
package io.github.sspanak.tt9.languages;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Locale;
|
||||
|
||||
import io.github.sspanak.tt9.R;
|
||||
|
||||
public class NullLanguage extends Language {
|
||||
public NullLanguage(Context context) {
|
||||
public NullLanguage() {
|
||||
locale = Locale.ROOT;
|
||||
name = context.getString(R.string.no_language);
|
||||
name = "Nulla Lingua";
|
||||
abcString = "ABC";
|
||||
code = "";
|
||||
dictionaryFile = "";
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@
|
|||
<string name="pref_font_size_large">Голям</string>
|
||||
<string name="completed">Завършено</string>
|
||||
<string name="loading">Зареждане…</string>
|
||||
<string name="no_language">Няма език</string>
|
||||
<string name="error_unexpected">Възникна неочаквана грешка.</string>
|
||||
<string name="add_word_add">Добави</string>
|
||||
<string name="add_word_no_selection">Преместете показалеца върху дума, за да я добавите към речника.</string>
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@
|
|||
<resources>
|
||||
<string name="app_settings">TT9 Einstellungen</string>
|
||||
<string name="loading">Laden…</string>
|
||||
<string name="no_language">Keine Sprache</string>
|
||||
<string name="error_unexpected">Unerwarteter Fehler aufgetreten.</string>
|
||||
|
||||
<string name="add_word_add">Hinzufügen</string>
|
||||
|
|
|
|||
|
|
@ -14,7 +14,6 @@
|
|||
<string name="pref_font_size_large">Grande</string>
|
||||
<string name="completed">Terminado</string>
|
||||
<string name="loading">Cargando…</string>
|
||||
<string name="no_language">Sin idioma</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_invalid_language_x">No se puede agregar una palabra. Idioma desconocido: \"%1$d\".</string>
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@
|
|||
<string name="pref_font_size_large">Grande</string>
|
||||
<string name="completed">Fini</string>
|
||||
<string name="loading">Chargement…</string>
|
||||
<string name="no_language">Aucun langue</string>
|
||||
<string name="error_unexpected">Une erreur inattendue s\'est produite.</string>
|
||||
<string name="add_word_add">Ajouter</string>
|
||||
<string name="add_word_no_selection">Déplacez le curseur dans un mot pour l\'ajouter.</string>
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@
|
|||
<string name="pref_font_size_large">Grande</string>
|
||||
<string name="completed">Completato</string>
|
||||
<string name="loading">Caricamento…</string>
|
||||
<string name="no_language">Nessuna lingua</string>
|
||||
<string name="error_unexpected">Si è verificato un errore imprevisto.</string>
|
||||
|
||||
<string name="add_word_add">Aggiungere</string>
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@
|
|||
<string name="pref_font_size_large">גדול</string>
|
||||
<string name="completed">הסתיים</string>
|
||||
<string name="loading">טוען…</string>
|
||||
<string name="no_language">אין שפה</string>
|
||||
<string name="error_unexpected">אירעה שגיאה לא צפויה.</string>
|
||||
|
||||
<string name="add_word_add">הוסף</string>
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@
|
|||
<string name="pref_font_size_large">Didelis</string>
|
||||
<string name="completed">Baigta</string>
|
||||
<string name="loading">Įkeliama…</string>
|
||||
<string name="no_language">Kalbos nėra</string>
|
||||
|
||||
<string name="error_unexpected">Įvyko netikėta klaida.</string>
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@
|
|||
<resources>
|
||||
<string name="app_settings">TT9 Opties</string>
|
||||
<string name="loading">Laden…</string>
|
||||
<string name="no_language">Geen taal</string>
|
||||
<string name="error_unexpected">Er is een onverwachte fout opgetreden.</string>
|
||||
|
||||
<string name="add_word_add">Toevoegen</string>
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@
|
|||
<string name="pref_font_size_large">Grande</string>
|
||||
<string name="completed">Concluído</string>
|
||||
<string name="loading">Carregando…</string>
|
||||
<string name="no_language">Sem idioma</string>
|
||||
<string name="error_unexpected">Um erro inesperado aconteceu.</string>
|
||||
|
||||
<string name="add_word_add">Adicionar</string>
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@
|
|||
<string name="pref_font_size_large">Крупный</string>
|
||||
<string name="completed">Выполнено</string>
|
||||
<string name="loading">Загрузка…</string>
|
||||
<string name="no_language">Нет языка</string>
|
||||
<string name="error_unexpected">Произошла непредвиденная ошибка.</string>
|
||||
<string name="add_word_add">Добавить</string>
|
||||
<string name="add_word_no_selection">Переместите курсор внутрь слова, чтобы добавить его.</string>
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@
|
|||
<resources>
|
||||
<string name="app_settings">TT9 Ayarlar</string>
|
||||
<string name="loading">Yükleniyor…</string>
|
||||
<string name="no_language">Yüklü Dil Yok</string>
|
||||
<string name="error_unexpected">Beklenmeyen bir hata ile karşılaşıldı.</string>
|
||||
|
||||
<string name="add_word_add">Ekle</string>
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@
|
|||
<string name="pref_font_size_large">Великий</string>
|
||||
<string name="completed">Виконано</string>
|
||||
<string name="loading">Завантаження…</string>
|
||||
<string name="no_language">Немає мови</string>
|
||||
|
||||
<string name="error_unexpected">Сталася неочікувана помилка.</string>
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@
|
|||
<string name="completed">Completed</string>
|
||||
<string name="loading">Loading…</string>
|
||||
<string name="language">Language</string>
|
||||
<string name="no_language">No Language</string>
|
||||
<string name="search_results">Search Results</string>
|
||||
<string name="search_results_void">No results.</string>
|
||||
|
||||
|
|
@ -24,7 +23,6 @@
|
|||
<string name="add_word_success">\"%1$s\" added.</string>
|
||||
<string name="add_word_title">Add Word</string>
|
||||
|
||||
|
||||
<string name="commands_select_command">Select a Command</string>
|
||||
|
||||
<string name="pref_category_about">About</string>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue