diff --git a/app/src/main/java/io/github/sspanak/tt9/db/DictionaryLoader.java b/app/src/main/java/io/github/sspanak/tt9/db/DictionaryLoader.java index de4b8238..5c96ddf3 100644 --- a/app/src/main/java/io/github/sspanak/tt9/db/DictionaryLoader.java +++ b/app/src/main/java/io/github/sspanak/tt9/db/DictionaryLoader.java @@ -23,7 +23,7 @@ import io.github.sspanak.tt9.languages.EmojiLanguage; import io.github.sspanak.tt9.languages.Language; import io.github.sspanak.tt9.languages.exceptions.InvalidLanguageCharactersException; import io.github.sspanak.tt9.languages.exceptions.InvalidLanguageException; -import io.github.sspanak.tt9.preferences.SettingsStore; +import io.github.sspanak.tt9.preferences.settings.SettingsStore; import io.github.sspanak.tt9.ui.DictionaryLoadingBar; import io.github.sspanak.tt9.ui.dialogs.ConfirmDictionaryUpdateDialog; import io.github.sspanak.tt9.util.ConsumerCompat; diff --git a/app/src/main/java/io/github/sspanak/tt9/db/SlowQueryStats.java b/app/src/main/java/io/github/sspanak/tt9/db/SlowQueryStats.java index b9e3d5d4..a5878848 100644 --- a/app/src/main/java/io/github/sspanak/tt9/db/SlowQueryStats.java +++ b/app/src/main/java/io/github/sspanak/tt9/db/SlowQueryStats.java @@ -2,10 +2,10 @@ package io.github.sspanak.tt9.db; import java.util.HashMap; -import io.github.sspanak.tt9.util.Logger; import io.github.sspanak.tt9.languages.Language; +import io.github.sspanak.tt9.preferences.settings.SettingsStore; +import io.github.sspanak.tt9.util.Logger; import io.github.sspanak.tt9.util.TextTools; -import io.github.sspanak.tt9.preferences.SettingsStore; public class SlowQueryStats { private static final String LOG_TAG = SlowQueryStats.class.getSimpleName(); 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 6757497f..99fd51b4 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 @@ -16,7 +16,7 @@ import io.github.sspanak.tt9.db.sqlite.UpdateOps; 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.SettingsStore; +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; diff --git a/app/src/main/java/io/github/sspanak/tt9/db/sqlite/UpdateOps.java b/app/src/main/java/io/github/sspanak/tt9/db/sqlite/UpdateOps.java index 39f98548..b84e9966 100644 --- a/app/src/main/java/io/github/sspanak/tt9/db/sqlite/UpdateOps.java +++ b/app/src/main/java/io/github/sspanak/tt9/db/sqlite/UpdateOps.java @@ -5,10 +5,10 @@ import android.database.sqlite.SQLiteStatement; import androidx.annotation.NonNull; -import io.github.sspanak.tt9.util.Logger; import io.github.sspanak.tt9.languages.Language; +import io.github.sspanak.tt9.preferences.settings.SettingsStore; +import io.github.sspanak.tt9.util.Logger; import io.github.sspanak.tt9.util.Text; -import io.github.sspanak.tt9.preferences.SettingsStore; public class UpdateOps { diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/AbstractHandler.java b/app/src/main/java/io/github/sspanak/tt9/ime/AbstractHandler.java index 35ea0e9d..ead380b8 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/AbstractHandler.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/AbstractHandler.java @@ -5,7 +5,7 @@ import android.view.View; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputConnection; -import io.github.sspanak.tt9.preferences.SettingsStore; +import io.github.sspanak.tt9.preferences.settings.SettingsStore; abstract public class AbstractHandler extends InputMethodService { // hardware key handlers diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/KeyPadHandler.java b/app/src/main/java/io/github/sspanak/tt9/ime/KeyPadHandler.java index b69b047e..f97368ea 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/KeyPadHandler.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/KeyPadHandler.java @@ -5,8 +5,8 @@ import android.view.View; import android.view.inputmethod.EditorInfo; import io.github.sspanak.tt9.ime.helpers.Key; -import io.github.sspanak.tt9.preferences.SettingsStore; import io.github.sspanak.tt9.preferences.screens.debug.ItemInputHandlingMode; +import io.github.sspanak.tt9.preferences.settings.SettingsStore; import io.github.sspanak.tt9.util.Logger; import io.github.sspanak.tt9.util.Timer; diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/TraditionalT9.java b/app/src/main/java/io/github/sspanak/tt9/ime/TraditionalT9.java index 464879f0..e91e7624 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/TraditionalT9.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/TraditionalT9.java @@ -14,7 +14,7 @@ import androidx.annotation.NonNull; import io.github.sspanak.tt9.db.DictionaryLoader; import io.github.sspanak.tt9.db.WordStoreAsync; import io.github.sspanak.tt9.ime.modes.ModePassthrough; -import io.github.sspanak.tt9.preferences.SettingsStore; +import io.github.sspanak.tt9.preferences.settings.SettingsStore; import io.github.sspanak.tt9.ui.UI; import io.github.sspanak.tt9.ui.dialogs.PopupDialog; import io.github.sspanak.tt9.ui.main.MainView; diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/helpers/AppHacks.java b/app/src/main/java/io/github/sspanak/tt9/ime/helpers/AppHacks.java index 81bc5c78..9d161996 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/helpers/AppHacks.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/helpers/AppHacks.java @@ -7,7 +7,7 @@ import android.view.inputmethod.InputConnection; import androidx.annotation.NonNull; import io.github.sspanak.tt9.ime.modes.InputMode; -import io.github.sspanak.tt9.preferences.SettingsStore; +import io.github.sspanak.tt9.preferences.settings.SettingsStore; public class AppHacks { private final EditorInfo editorInfo; diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/helpers/Key.java b/app/src/main/java/io/github/sspanak/tt9/ime/helpers/Key.java index db3b24fb..1d84b4c6 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/helpers/Key.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/helpers/Key.java @@ -4,7 +4,7 @@ import android.view.KeyEvent; import java.util.HashMap; -import io.github.sspanak.tt9.preferences.SettingsStore; +import io.github.sspanak.tt9.preferences.settings.SettingsStore; public class Key { private static final HashMap handledKeys = new HashMap<>(); diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/modes/InputMode.java b/app/src/main/java/io/github/sspanak/tt9/ime/modes/InputMode.java index b064d2b3..ce1dec16 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/modes/InputMode.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/modes/InputMode.java @@ -4,12 +4,12 @@ import androidx.annotation.NonNull; import java.util.ArrayList; -import io.github.sspanak.tt9.util.Logger; import io.github.sspanak.tt9.ime.helpers.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.preferences.SettingsStore; +import io.github.sspanak.tt9.preferences.settings.SettingsStore; +import io.github.sspanak.tt9.util.Logger; abstract public class InputMode { // typing mode diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModeABC.java b/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModeABC.java index 2c6f683e..be08f4f0 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModeABC.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModeABC.java @@ -5,7 +5,7 @@ import androidx.annotation.NonNull; import io.github.sspanak.tt9.languages.Language; import io.github.sspanak.tt9.languages.LanguageKind; import io.github.sspanak.tt9.languages.NaturalLanguage; -import io.github.sspanak.tt9.preferences.SettingsStore; +import io.github.sspanak.tt9.preferences.settings.SettingsStore; public class ModeABC extends InputMode { private final SettingsStore settings; diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModePredictive.java b/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModePredictive.java index 328be71b..96e2b48c 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModePredictive.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModePredictive.java @@ -14,7 +14,7 @@ import io.github.sspanak.tt9.languages.EmojiLanguage; import io.github.sspanak.tt9.languages.Language; import io.github.sspanak.tt9.languages.LanguageKind; import io.github.sspanak.tt9.languages.NaturalLanguage; -import io.github.sspanak.tt9.preferences.SettingsStore; +import io.github.sspanak.tt9.preferences.settings.SettingsStore; import io.github.sspanak.tt9.util.Logger; import io.github.sspanak.tt9.util.Text; diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/AutoSpace.java b/app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/AutoSpace.java index 19303610..50258e34 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/AutoSpace.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/AutoSpace.java @@ -2,8 +2,8 @@ package io.github.sspanak.tt9.ime.modes.helpers; import io.github.sspanak.tt9.ime.helpers.InputType; import io.github.sspanak.tt9.ime.helpers.TextField; +import io.github.sspanak.tt9.preferences.settings.SettingsStore; import io.github.sspanak.tt9.util.Text; -import io.github.sspanak.tt9.preferences.SettingsStore; public class AutoSpace { private final SettingsStore settings; diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/AutoTextCase.java b/app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/AutoTextCase.java index 89e25480..5898fc4f 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/AutoTextCase.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/AutoTextCase.java @@ -1,8 +1,8 @@ package io.github.sspanak.tt9.ime.modes.helpers; -import io.github.sspanak.tt9.util.Text; import io.github.sspanak.tt9.ime.modes.InputMode; -import io.github.sspanak.tt9.preferences.SettingsStore; +import io.github.sspanak.tt9.preferences.settings.SettingsStore; +import io.github.sspanak.tt9.util.Text; public class AutoTextCase { private final SettingsStore settings; diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/Predictions.java b/app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/Predictions.java index b3d11a44..119563c2 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/Predictions.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/Predictions.java @@ -5,7 +5,7 @@ import java.util.ArrayList; import io.github.sspanak.tt9.db.WordStoreAsync; import io.github.sspanak.tt9.languages.EmojiLanguage; import io.github.sspanak.tt9.languages.Language; -import io.github.sspanak.tt9.preferences.SettingsStore; +import io.github.sspanak.tt9.preferences.settings.SettingsStore; public class Predictions { diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/PreferencesActivity.java b/app/src/main/java/io/github/sspanak/tt9/preferences/PreferencesActivity.java index 2ddc3379..099bbf8e 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/PreferencesActivity.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/PreferencesActivity.java @@ -13,7 +13,6 @@ import androidx.fragment.app.FragmentTransaction; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; -import io.github.sspanak.tt9.util.Logger; import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.db.LegacyDb; import io.github.sspanak.tt9.db.WordStoreAsync; @@ -30,6 +29,8 @@ import io.github.sspanak.tt9.preferences.screens.hotkeys.HotkeysScreen; import io.github.sspanak.tt9.preferences.screens.keypad.KeyPadScreen; import io.github.sspanak.tt9.preferences.screens.languages.LanguagesScreen; import io.github.sspanak.tt9.preferences.screens.setup.SetupScreen; +import io.github.sspanak.tt9.preferences.settings.SettingsStore; +import io.github.sspanak.tt9.util.Logger; public class PreferencesActivity extends AppCompatActivity implements PreferenceFragmentCompat.OnPreferenceStartFragmentCallback { private SettingsStore settings; diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/SettingsStore.java b/app/src/main/java/io/github/sspanak/tt9/preferences/SettingsStore.java deleted file mode 100644 index 80235a1b..00000000 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/SettingsStore.java +++ /dev/null @@ -1,337 +0,0 @@ -package io.github.sspanak.tt9.preferences; - -import android.content.Context; -import android.content.SharedPreferences; -import android.content.res.Configuration; - -import androidx.appcompat.app.AppCompatDelegate; -import androidx.preference.PreferenceManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; - -import io.github.sspanak.tt9.util.Logger; -import io.github.sspanak.tt9.ime.modes.InputMode; -import io.github.sspanak.tt9.languages.LanguageCollection; -import io.github.sspanak.tt9.preferences.screens.debug.ItemInputHandlingMode; -import io.github.sspanak.tt9.preferences.screens.hotkeys.SectionKeymap; - - -public class SettingsStore { - - private final Context context; - private final SharedPreferences prefs; - private final SharedPreferences.Editor prefsEditor; - - - public SettingsStore(Context context) { - this.context = context; - prefs = PreferenceManager.getDefaultSharedPreferences(context); - prefsEditor = prefs.edit(); - } - - - /************* validators *************/ - - private boolean doesLanguageExist(int langId) { - return LanguageCollection.getLanguage(context, langId) != null; - } - - private boolean validateSavedLanguage(int langId, String logTag) { - if (!doesLanguageExist(langId)) { - Logger.w(logTag, "Not saving invalid language with ID: " + langId); - return false; - } - - return true; - } - - @SuppressWarnings("SameParameterValue") - private boolean isIntInList(int number, ArrayList list, String logTag, String logMsg) { - if (!list.contains(number)) { - Logger.w(logTag, logMsg); - return false; - } - - return true; - } - - - /************* input settings *************/ - - public ArrayList getEnabledLanguageIds() { - Set languagesPref = getEnabledLanguagesIdsAsStrings(); - - ArrayListlanguageIds = new ArrayList<>(); - for (String languageId : languagesPref) { - languageIds.add(Integer.valueOf(languageId)); - } - - return languageIds; - } - - public Set getEnabledLanguagesIdsAsStrings() { - return prefs.getStringSet("pref_languages", new HashSet<>(Collections.singletonList( - String.valueOf(LanguageCollection.getDefault(context).getId()) - ))); - } - - public void saveEnabledLanguageIds(ArrayList languageIds) { - Set idsAsStrings = new HashSet<>(); - for (int langId : languageIds) { - idsAsStrings.add(String.valueOf(langId)); - } - - saveEnabledLanguageIds(idsAsStrings); - } - - public void saveEnabledLanguageIds(Set languageIds) { - Set validLanguageIds = new HashSet<>(); - - for (String langId : languageIds) { - if (!validateSavedLanguage(Integer.parseInt(langId), "saveEnabledLanguageIds")){ - continue; - } - - validLanguageIds.add(langId); - } - - if (validLanguageIds.isEmpty()) { - Logger.w("saveEnabledLanguageIds", "Refusing to save an empty language list"); - return; - } - - prefsEditor.putStringSet("pref_languages", validLanguageIds); - prefsEditor.apply(); - } - - - public int getTextCase() { - return prefs.getInt("pref_text_case", InputMode.CASE_LOWER); - } - - public void saveTextCase(int textCase) { - boolean isTextCaseValid = isIntInList( - textCase, - new ArrayList<>(Arrays.asList(InputMode.CASE_CAPITALIZE, InputMode.CASE_LOWER, InputMode.CASE_UPPER)), - "saveTextCase", - "Not saving invalid text case: " + textCase - ); - - if (isTextCaseValid) { - prefsEditor.putInt("pref_text_case", textCase); - prefsEditor.apply(); - } - } - - - public int getInputLanguage() { - return prefs.getInt("pref_input_language", LanguageCollection.getDefault(context).getId()); - } - - public void saveInputLanguage(int language) { - if (validateSavedLanguage(language, "saveInputLanguage")){ - prefsEditor.putInt("pref_input_language", language); - prefsEditor.apply(); - } - } - - - public int getInputMode() { - return prefs.getInt("pref_input_mode", InputMode.MODE_PREDICTIVE); - } - - public void saveInputMode(int mode) { - boolean isModeValid = isIntInList( - mode, - new ArrayList<>(Arrays.asList(InputMode.MODE_123, InputMode.MODE_PREDICTIVE, InputMode.MODE_ABC)), - "saveInputMode", - "Not saving invalid input mode: " + mode - ); - - if (isModeValid) { - prefsEditor.putInt("pref_input_mode", mode); - prefsEditor.apply(); - } - } - - - /************* function key settings *************/ - - public boolean areHotkeysInitialized() { - return !prefs.getBoolean("hotkeys_initialized", false); - } - - public void setDefaultKeys( - int addWord, - int backspace, - int changeKeyboard, - int filterClear, - int filterSuggestions, - int previousSuggestion, - int nextSuggestion, - int nextInputMode, - int nextLanguage, - int showSettings - ) { - prefsEditor - .putString(SectionKeymap.ITEM_ADD_WORD, String.valueOf(addWord)) - .putString(SectionKeymap.ITEM_BACKSPACE, String.valueOf(backspace)) - .putString(SectionKeymap.ITEM_CHANGE_KEYBOARD, String.valueOf(changeKeyboard)) - .putString(SectionKeymap.ITEM_FILTER_CLEAR, String.valueOf(filterClear)) - .putString(SectionKeymap.ITEM_FILTER_SUGGESTIONS, String.valueOf(filterSuggestions)) - .putString(SectionKeymap.ITEM_PREVIOUS_SUGGESTION, String.valueOf(previousSuggestion)) - .putString(SectionKeymap.ITEM_NEXT_SUGGESTION, String.valueOf(nextSuggestion)) - .putString(SectionKeymap.ITEM_NEXT_INPUT_MODE, String.valueOf(nextInputMode)) - .putString(SectionKeymap.ITEM_NEXT_LANGUAGE, String.valueOf(nextLanguage)) - .putString(SectionKeymap.ITEM_SHOW_SETTINGS, String.valueOf(showSettings)) - .putBoolean("hotkeys_initialized", true) - .apply(); - } - - public int getFunctionKey(String functionName) { - try { - return Integer.parseInt(prefs.getString(functionName, "0")); - } catch (NumberFormatException e) { - return 0; - } - } - - public int getKeyAddWord() { - return getFunctionKey(SectionKeymap.ITEM_ADD_WORD); - } - public int getKeyBackspace() { - return getFunctionKey(SectionKeymap.ITEM_BACKSPACE); - } - public int getKeyChangeKeyboard() { - return getFunctionKey(SectionKeymap.ITEM_CHANGE_KEYBOARD); - } - public int getKeyFilterClear() { - return getFunctionKey(SectionKeymap.ITEM_FILTER_CLEAR); - } - public int getKeyFilterSuggestions() { - return getFunctionKey(SectionKeymap.ITEM_FILTER_SUGGESTIONS); - } - public int getKeyPreviousSuggestion() { - return getFunctionKey(SectionKeymap.ITEM_PREVIOUS_SUGGESTION); - } - public int getKeyNextSuggestion() { - return getFunctionKey(SectionKeymap.ITEM_NEXT_SUGGESTION); - } - public int getKeyNextInputMode() { - return getFunctionKey(SectionKeymap.ITEM_NEXT_INPUT_MODE); - } - public int getKeyNextLanguage() { - return getFunctionKey(SectionKeymap.ITEM_NEXT_LANGUAGE); - } - public int getKeyShowSettings() { - return getFunctionKey(SectionKeymap.ITEM_SHOW_SETTINGS); - } - - - /************* UI settings *************/ - - public boolean getDarkTheme() { - int theme = getTheme(); - if (theme == AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM) { - return (context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES; - } else { - return theme == AppCompatDelegate.MODE_NIGHT_YES; - } - } - - public int getTheme() { - try { - return Integer.parseInt(prefs.getString("pref_theme", String.valueOf(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM))); - } catch (NumberFormatException e) { - return AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM; - } - } - - public boolean getShowSoftKeys() { return prefs.getBoolean("pref_show_soft_keys", true); } - - public boolean getShowSoftNumpad() { return getShowSoftKeys() && prefs.getBoolean("pref_show_soft_numpad", false); } - - /************* typing settings *************/ - - public int getAbcAutoAcceptTimeout() { return prefs.getBoolean("abc_auto_accept", true) ? 800 + getKeyPadDebounceTime() : -1; } - public boolean getAutoSpace() { return prefs.getBoolean("auto_space", true); } - public boolean getAutoTextCase() { return prefs.getBoolean("auto_text_case", true); } - public String getDoubleZeroChar() { - String character = prefs.getString("pref_double_zero_char", "."); - - // SharedPreferences return a corrupted string when using the real "\n"... :( - return character.equals("\\n") ? "\n" : character; - } - public boolean getUpsideDownKeys() { return prefs.getBoolean("pref_upside_down_keys", false); } - - - /************* internal settings *************/ - - public int getLogLevel() { - try { - return Integer.parseInt(prefs.getString("pref_log_level", String.valueOf(Logger.LEVEL))); - } catch (NumberFormatException ignored) { - return Logger.LEVEL; - } - } - - public int getInputHandlingMode() { - try { - return Integer.parseInt(prefs.getString("pref_input_handling_mode", String.valueOf(ItemInputHandlingMode.NORMAL))); - } catch (NumberFormatException ignored) { - return ItemInputHandlingMode.NORMAL; - } - } - - public final static int DELETE_WORDS_SEARCH_DELAY = 500; // ms - public final static int DICTIONARY_AUTO_LOAD_COOLDOWN_TIME = 120000; // ms - public final static int DICTIONARY_IMPORT_BATCH_SIZE = 5000; // words - public final static int DICTIONARY_IMPORT_PROGRESS_UPDATE_TIME = 250; // ms - public final static byte SLOW_QUERY_TIME = 50; // ms - public final static int SOFT_KEY_REPEAT_DELAY = 40; // ms - public final static float SOFT_KEY_COMPLEX_LABEL_TITLE_SIZE = 0.55f; - public final static float SOFT_KEY_COMPLEX_LABEL_ARABIC_TITLE_SIZE = 0.72f; - public final static float SOFT_KEY_COMPLEX_LABEL_SUB_TITLE_SIZE = 0.8f; - public final static int SUGGESTIONS_MAX = 20; - public final static int SUGGESTIONS_MIN = 8; - public final static int SUGGESTIONS_SELECT_ANIMATION_DURATION = 66; - public final static int SUGGESTIONS_TRANSLATE_ANIMATION_DURATION = 0; - public final static int WORD_FREQUENCY_MAX = 25500; - public final static int WORD_FREQUENCY_NORMALIZATION_DIVIDER = 100; // normalized frequency = WORD_FREQUENCY_MAX / WORD_FREQUENCY_NORMALIZATION_DIVIDER - public final static int WORD_NORMALIZATION_DELAY = 120000; // ms - - - /************* hack settings *************/ - - public int getSuggestionScrollingDelay() { - return prefs.getBoolean("pref_alternative_suggestion_scrolling", false) ? 200 : 0; - } - - public boolean getFbMessengerHack() { - return prefs.getBoolean("pref_hack_fb_messenger", false); - } - - public boolean getGoogleChatHack() { - return prefs.getBoolean("pref_hack_google_chat", false); - } - - /** - * Protection against faulty devices, that sometimes send two (or more) click events - * per a single key press, which absolutely undesirable side effects. - * There were reports about this on Kyocera KYF31 - * and on CAT S22. - */ - public final static int PREFERENCES_CLICK_DEBOUNCE_TIME = 250; // ms - - public int getKeyPadDebounceTime() { - try { - return Integer.parseInt(prefs.getString("pref_key_pad_debounce_time", "0")); - } catch (NumberFormatException e) { - return 0; - } - } -} diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/helpers/Hotkeys.java b/app/src/main/java/io/github/sspanak/tt9/preferences/helpers/Hotkeys.java index 20eeb935..6ae3c541 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/helpers/Hotkeys.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/helpers/Hotkeys.java @@ -10,7 +10,7 @@ import java.util.LinkedHashMap; import java.util.Set; import io.github.sspanak.tt9.R; -import io.github.sspanak.tt9.preferences.SettingsStore; +import io.github.sspanak.tt9.preferences.settings.SettingsStore; public class Hotkeys { private final Context context; diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemClickable.java b/app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemClickable.java index c3343d14..2a5e49b6 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemClickable.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemClickable.java @@ -5,8 +5,8 @@ import androidx.preference.Preference; import java.util.ArrayList; +import io.github.sspanak.tt9.preferences.settings.SettingsStore; import io.github.sspanak.tt9.util.Logger; -import io.github.sspanak.tt9.preferences.SettingsStore; abstract public class ItemClickable { private long lastClickTime = 0; diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/debug/ItemInputHandlingMode.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/debug/ItemInputHandlingMode.java index dd53da83..216a7e5e 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/debug/ItemInputHandlingMode.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/debug/ItemInputHandlingMode.java @@ -4,8 +4,8 @@ import androidx.preference.DropDownPreference; import java.util.LinkedHashMap; -import io.github.sspanak.tt9.preferences.SettingsStore; import io.github.sspanak.tt9.preferences.items.ItemDropDown; +import io.github.sspanak.tt9.preferences.settings.SettingsStore; public class ItemInputHandlingMode extends ItemDropDown { public static final int NORMAL = 0; diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/deleteWords/PreferenceDeletableWord.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/deleteWords/PreferenceDeletableWord.java index 0213d710..2f28b6d7 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/deleteWords/PreferenceDeletableWord.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/deleteWords/PreferenceDeletableWord.java @@ -12,7 +12,7 @@ import androidx.preference.PreferenceCategory; import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.db.WordStoreAsync; import io.github.sspanak.tt9.languages.LanguageCollection; -import io.github.sspanak.tt9.preferences.SettingsStore; +import io.github.sspanak.tt9.preferences.settings.SettingsStore; import io.github.sspanak.tt9.ui.UI; public class PreferenceDeletableWord extends Preference { diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/deleteWords/PreferenceSearchWords.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/deleteWords/PreferenceSearchWords.java index 002c295d..8778a004 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/deleteWords/PreferenceSearchWords.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/deleteWords/PreferenceSearchWords.java @@ -11,13 +11,13 @@ import androidx.preference.PreferenceViewHolder; import java.util.ArrayList; -import io.github.sspanak.tt9.util.ConsumerCompat; -import io.github.sspanak.tt9.util.Logger; import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.db.WordStoreAsync; import io.github.sspanak.tt9.languages.Language; import io.github.sspanak.tt9.languages.LanguageCollection; -import io.github.sspanak.tt9.preferences.SettingsStore; +import io.github.sspanak.tt9.preferences.settings.SettingsStore; +import io.github.sspanak.tt9.util.ConsumerCompat; +import io.github.sspanak.tt9.util.Logger; public class PreferenceSearchWords extends Preference { public static final String NAME = "dictionary_delete_words_search"; diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/deleteWords/TextChangeListener.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/deleteWords/TextChangeListener.java index e43b5cd3..22e04459 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/deleteWords/TextChangeListener.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/deleteWords/TextChangeListener.java @@ -7,8 +7,8 @@ import android.text.TextWatcher; import androidx.annotation.NonNull; +import io.github.sspanak.tt9.preferences.settings.SettingsStore; import io.github.sspanak.tt9.util.ConsumerCompat; -import io.github.sspanak.tt9.preferences.SettingsStore; class TextChangeListener implements TextWatcher { private static TextChangeListener self; diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/hotkeys/SectionKeymap.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/hotkeys/SectionKeymap.java index 4c15200e..b09380f8 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/hotkeys/SectionKeymap.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/hotkeys/SectionKeymap.java @@ -6,10 +6,10 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Objects; -import io.github.sspanak.tt9.util.Logger; import io.github.sspanak.tt9.preferences.PreferencesActivity; -import io.github.sspanak.tt9.preferences.SettingsStore; import io.github.sspanak.tt9.preferences.helpers.Hotkeys; +import io.github.sspanak.tt9.preferences.settings.SettingsStore; +import io.github.sspanak.tt9.util.Logger; public class SectionKeymap { public static final String ITEM_ADD_WORD = "key_add_word"; diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/settings/BaseSettings.java b/app/src/main/java/io/github/sspanak/tt9/preferences/settings/BaseSettings.java new file mode 100644 index 00000000..5048de60 --- /dev/null +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/settings/BaseSettings.java @@ -0,0 +1,19 @@ +package io.github.sspanak.tt9.preferences.settings; + +import android.content.Context; +import android.content.SharedPreferences; + +import androidx.preference.PreferenceManager; + +class BaseSettings { + protected final Context context; + protected final SharedPreferences prefs; + protected final SharedPreferences.Editor prefsEditor; + + + BaseSettings(Context context) { + this.context = context; + prefs = PreferenceManager.getDefaultSharedPreferences(context); + prefsEditor = prefs.edit(); + } +} diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsHacks.java b/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsHacks.java new file mode 100644 index 00000000..2849da1e --- /dev/null +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsHacks.java @@ -0,0 +1,58 @@ +package io.github.sspanak.tt9.preferences.settings; + +import android.content.Context; + +import io.github.sspanak.tt9.preferences.screens.debug.ItemInputHandlingMode; +import io.github.sspanak.tt9.util.Logger; + +class SettingsHacks extends BaseSettings { + SettingsHacks(Context context) { super(context); } + + /************* debugging settings *************/ + + public int getLogLevel() { + try { + return Integer.parseInt(prefs.getString("pref_log_level", String.valueOf(Logger.LEVEL))); + } catch (NumberFormatException ignored) { + return Logger.LEVEL; + } + } + + public int getInputHandlingMode() { + try { + return Integer.parseInt(prefs.getString("pref_input_handling_mode", String.valueOf(ItemInputHandlingMode.NORMAL))); + } catch (NumberFormatException ignored) { + return ItemInputHandlingMode.NORMAL; + } + } + + + /************* hack settings *************/ + + public int getSuggestionScrollingDelay() { + return prefs.getBoolean("pref_alternative_suggestion_scrolling", false) ? 200 : 0; + } + + public boolean getFbMessengerHack() { + return prefs.getBoolean("pref_hack_fb_messenger", false); + } + + public boolean getGoogleChatHack() { + return prefs.getBoolean("pref_hack_google_chat", false); + } + + /** + * Protection against faulty devices, that sometimes send two (or more) click events + * per a single key press, which absolutely undesirable side effects. + * There were reports about this on Kyocera KYF31 + * and on CAT S22. + */ + + public int getKeyPadDebounceTime() { + try { + return Integer.parseInt(prefs.getString("pref_key_pad_debounce_time", "0")); + } catch (NumberFormatException e) { + return 0; + } + } +} diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsHotkeys.java b/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsHotkeys.java new file mode 100644 index 00000000..43ef9137 --- /dev/null +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsHotkeys.java @@ -0,0 +1,79 @@ +package io.github.sspanak.tt9.preferences.settings; + +import android.content.Context; + +import io.github.sspanak.tt9.preferences.screens.hotkeys.SectionKeymap; + +class SettingsHotkeys extends SettingsHacks { + SettingsHotkeys(Context context) { super(context); } + + public boolean areHotkeysInitialized() { + return !prefs.getBoolean("hotkeys_initialized", false); + } + + public void setDefaultKeys( + int addWord, + int backspace, + int changeKeyboard, + int filterClear, + int filterSuggestions, + int previousSuggestion, + int nextSuggestion, + int nextInputMode, + int nextLanguage, + int showSettings + ) { + prefsEditor + .putString(SectionKeymap.ITEM_ADD_WORD, String.valueOf(addWord)) + .putString(SectionKeymap.ITEM_BACKSPACE, String.valueOf(backspace)) + .putString(SectionKeymap.ITEM_CHANGE_KEYBOARD, String.valueOf(changeKeyboard)) + .putString(SectionKeymap.ITEM_FILTER_CLEAR, String.valueOf(filterClear)) + .putString(SectionKeymap.ITEM_FILTER_SUGGESTIONS, String.valueOf(filterSuggestions)) + .putString(SectionKeymap.ITEM_PREVIOUS_SUGGESTION, String.valueOf(previousSuggestion)) + .putString(SectionKeymap.ITEM_NEXT_SUGGESTION, String.valueOf(nextSuggestion)) + .putString(SectionKeymap.ITEM_NEXT_INPUT_MODE, String.valueOf(nextInputMode)) + .putString(SectionKeymap.ITEM_NEXT_LANGUAGE, String.valueOf(nextLanguage)) + .putString(SectionKeymap.ITEM_SHOW_SETTINGS, String.valueOf(showSettings)) + .putBoolean("hotkeys_initialized", true) + .apply(); + } + + public int getFunctionKey(String functionName) { + try { + return Integer.parseInt(prefs.getString(functionName, "0")); + } catch (NumberFormatException e) { + return 0; + } + } + + public int getKeyAddWord() { + return getFunctionKey(SectionKeymap.ITEM_ADD_WORD); + } + public int getKeyBackspace() { + return getFunctionKey(SectionKeymap.ITEM_BACKSPACE); + } + public int getKeyChangeKeyboard() { + return getFunctionKey(SectionKeymap.ITEM_CHANGE_KEYBOARD); + } + public int getKeyFilterClear() { + return getFunctionKey(SectionKeymap.ITEM_FILTER_CLEAR); + } + public int getKeyFilterSuggestions() { + return getFunctionKey(SectionKeymap.ITEM_FILTER_SUGGESTIONS); + } + public int getKeyPreviousSuggestion() { + return getFunctionKey(SectionKeymap.ITEM_PREVIOUS_SUGGESTION); + } + public int getKeyNextSuggestion() { + return getFunctionKey(SectionKeymap.ITEM_NEXT_SUGGESTION); + } + public int getKeyNextInputMode() { + return getFunctionKey(SectionKeymap.ITEM_NEXT_INPUT_MODE); + } + public int getKeyNextLanguage() { + return getFunctionKey(SectionKeymap.ITEM_NEXT_LANGUAGE); + } + public int getKeyShowSettings() { + return getFunctionKey(SectionKeymap.ITEM_SHOW_SETTINGS); + } +} diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsInput.java b/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsInput.java new file mode 100644 index 00000000..3b466f1b --- /dev/null +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsInput.java @@ -0,0 +1,119 @@ +package io.github.sspanak.tt9.preferences.settings; + +import android.content.Context; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +import io.github.sspanak.tt9.ime.modes.InputMode; +import io.github.sspanak.tt9.languages.LanguageCollection; +import io.github.sspanak.tt9.util.Logger; + +class SettingsInput extends SettingsHotkeys { + SettingsInput(Context context) { super(context); } + + + public ArrayList getEnabledLanguageIds() { + Set languagesPref = getEnabledLanguagesIdsAsStrings(); + + ArrayListlanguageIds = new ArrayList<>(); + for (String languageId : languagesPref) { + languageIds.add(Integer.valueOf(languageId)); + } + + return languageIds; + } + + + public Set getEnabledLanguagesIdsAsStrings() { + return prefs.getStringSet("pref_languages", new HashSet<>(Collections.singletonList( + String.valueOf(LanguageCollection.getDefault(context).getId()) + ))); + } + + + public void saveEnabledLanguageIds(ArrayList languageIds) { + Set idsAsStrings = new HashSet<>(); + for (int langId : languageIds) { + idsAsStrings.add(String.valueOf(langId)); + } + + saveEnabledLanguageIds(idsAsStrings); + } + + + public void saveEnabledLanguageIds(Set languageIds) { + Set validLanguageIds = new HashSet<>(); + + for (String langId : languageIds) { + if (!Validators.validateSavedLanguage(context, Integer.parseInt(langId), "saveEnabledLanguageIds")){ + continue; + } + + validLanguageIds.add(langId); + } + + if (validLanguageIds.isEmpty()) { + Logger.w("saveEnabledLanguageIds", "Refusing to save an empty language list"); + return; + } + + prefsEditor.putStringSet("pref_languages", validLanguageIds); + prefsEditor.apply(); + } + + + public int getTextCase() { + return prefs.getInt("pref_text_case", InputMode.CASE_LOWER); + } + + public void saveTextCase(int textCase) { + boolean isTextCaseValid = Validators.isIntInList( + textCase, + new ArrayList<>(Arrays.asList(InputMode.CASE_CAPITALIZE, InputMode.CASE_LOWER, InputMode.CASE_UPPER)), + "saveTextCase", + "Not saving invalid text case: " + textCase + ); + + if (isTextCaseValid) { + prefsEditor.putInt("pref_text_case", textCase); + prefsEditor.apply(); + } + } + + + public int getInputLanguage() { + return prefs.getInt("pref_input_language", LanguageCollection.getDefault(context).getId()); + } + + + public void saveInputLanguage(int language) { + if (Validators.validateSavedLanguage(context, language, "saveInputLanguage")){ + prefsEditor.putInt("pref_input_language", language); + prefsEditor.apply(); + } + } + + + public int getInputMode() { + return prefs.getInt("pref_input_mode", InputMode.MODE_PREDICTIVE); + } + + + public void saveInputMode(int mode) { + boolean isModeValid = Validators.isIntInList( + mode, + new ArrayList<>(Arrays.asList(InputMode.MODE_123, InputMode.MODE_PREDICTIVE, InputMode.MODE_ABC)), + "saveInputMode", + "Not saving invalid input mode: " + mode + ); + + if (isModeValid) { + prefsEditor.putInt("pref_input_mode", mode); + prefsEditor.apply(); + } + } +} diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsStore.java b/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsStore.java new file mode 100644 index 00000000..c8779602 --- /dev/null +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsStore.java @@ -0,0 +1,29 @@ +package io.github.sspanak.tt9.preferences.settings; + +import android.content.Context; + + +public class SettingsStore extends SettingsUI { + public SettingsStore(Context context) { super(context); } + + /************* internal settings *************/ + public final static int DELETE_WORDS_SEARCH_DELAY = 500; // ms + public final static int DICTIONARY_AUTO_LOAD_COOLDOWN_TIME = 120000; // ms + public final static int DICTIONARY_IMPORT_BATCH_SIZE = 5000; // words + public final static int DICTIONARY_IMPORT_PROGRESS_UPDATE_TIME = 250; // ms + public final static byte SLOW_QUERY_TIME = 50; // ms + public final static int SOFT_KEY_REPEAT_DELAY = 40; // ms + public final static float SOFT_KEY_COMPLEX_LABEL_TITLE_SIZE = 0.55f; + public final static float SOFT_KEY_COMPLEX_LABEL_ARABIC_TITLE_SIZE = 0.72f; + public final static float SOFT_KEY_COMPLEX_LABEL_SUB_TITLE_SIZE = 0.8f; + public final static int SUGGESTIONS_MAX = 20; + public final static int SUGGESTIONS_MIN = 8; + public final static int SUGGESTIONS_SELECT_ANIMATION_DURATION = 66; + public final static int SUGGESTIONS_TRANSLATE_ANIMATION_DURATION = 0; + public final static int WORD_FREQUENCY_MAX = 25500; + public final static int WORD_FREQUENCY_NORMALIZATION_DIVIDER = 100; // normalized frequency = WORD_FREQUENCY_MAX / WORD_FREQUENCY_NORMALIZATION_DIVIDER + public final static int WORD_NORMALIZATION_DELAY = 120000; // ms + + /************* hacks *************/ + public final static int PREFERENCES_CLICK_DEBOUNCE_TIME = 250; // ms +} diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsTyping.java b/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsTyping.java new file mode 100644 index 00000000..d085f4dd --- /dev/null +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsTyping.java @@ -0,0 +1,18 @@ +package io.github.sspanak.tt9.preferences.settings; + +import android.content.Context; + +class SettingsTyping extends SettingsInput { + SettingsTyping(Context context) { super(context); } + + public int getAbcAutoAcceptTimeout() { return prefs.getBoolean("abc_auto_accept", true) ? 800 + getKeyPadDebounceTime() : -1; } + public boolean getAutoSpace() { return prefs.getBoolean("auto_space", true); } + public boolean getAutoTextCase() { return prefs.getBoolean("auto_text_case", true); } + public String getDoubleZeroChar() { + String character = prefs.getString("pref_double_zero_char", "."); + + // SharedPreferences return a corrupted string when using the real "\n"... :( + return character.equals("\\n") ? "\n" : character; + } + public boolean getUpsideDownKeys() { return prefs.getBoolean("pref_upside_down_keys", false); } +} 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 new file mode 100644 index 00000000..feb31143 --- /dev/null +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsUI.java @@ -0,0 +1,31 @@ +package io.github.sspanak.tt9.preferences.settings; + +import android.content.Context; +import android.content.res.Configuration; + +import androidx.appcompat.app.AppCompatDelegate; + +class SettingsUI extends SettingsTyping { + SettingsUI(Context context) { super(context); } + + public boolean getDarkTheme() { + int theme = getTheme(); + if (theme == AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM) { + return (context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES; + } else { + return theme == AppCompatDelegate.MODE_NIGHT_YES; + } + } + + public int getTheme() { + try { + return Integer.parseInt(prefs.getString("pref_theme", String.valueOf(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM))); + } catch (NumberFormatException e) { + return AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM; + } + } + + public boolean getShowSoftKeys() { return prefs.getBoolean("pref_show_soft_keys", true); } + + public boolean getShowSoftNumpad() { return getShowSoftKeys() && prefs.getBoolean("pref_show_soft_numpad", false); } +} diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/settings/Validators.java b/app/src/main/java/io/github/sspanak/tt9/preferences/settings/Validators.java new file mode 100644 index 00000000..ee77a23e --- /dev/null +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/settings/Validators.java @@ -0,0 +1,33 @@ +package io.github.sspanak.tt9.preferences.settings; + +import android.content.Context; + +import java.util.ArrayList; + +import io.github.sspanak.tt9.languages.LanguageCollection; +import io.github.sspanak.tt9.util.Logger; + +class Validators { + static boolean doesLanguageExist(Context context, int langId) { + return LanguageCollection.getLanguage(context, langId) != null; + } + + static boolean validateSavedLanguage(Context context, int langId, String logTag) { + if (!doesLanguageExist(context, langId)) { + Logger.w(logTag, "Not saving invalid language with ID: " + langId); + return false; + } + + return true; + } + + @SuppressWarnings("SameParameterValue") + static boolean isIntInList(int number, ArrayList list, String logTag, String logMsg) { + if (!list.contains(number)) { + Logger.w(logTag, logMsg); + return false; + } + + return true; + } +} diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKey.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKey.java index a6d1b6a2..9e6420bc 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKey.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKey.java @@ -19,7 +19,7 @@ import io.github.sspanak.tt9.R; 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.preferences.SettingsStore; +import io.github.sspanak.tt9.preferences.settings.SettingsStore; import io.github.sspanak.tt9.util.Logger; public class SoftKey extends androidx.appcompat.widget.AppCompatButton implements View.OnTouchListener, View.OnLongClickListener { diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftNumberKey.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftNumberKey.java index 42847980..ed03cb1a 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftNumberKey.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftNumberKey.java @@ -11,7 +11,7 @@ import io.github.sspanak.tt9.ime.helpers.Key; import io.github.sspanak.tt9.ime.modes.InputMode; import io.github.sspanak.tt9.languages.Language; import io.github.sspanak.tt9.languages.LanguageKind; -import io.github.sspanak.tt9.preferences.SettingsStore; +import io.github.sspanak.tt9.preferences.settings.SettingsStore; import io.github.sspanak.tt9.util.Logger; public class SoftNumberKey extends SoftKey { diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/tray/SuggestionsBar.java b/app/src/main/java/io/github/sspanak/tt9/ui/tray/SuggestionsBar.java index 75943fcf..bfba566f 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/tray/SuggestionsBar.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/tray/SuggestionsBar.java @@ -19,7 +19,7 @@ import java.util.List; import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.ime.AbstractHandler; -import io.github.sspanak.tt9.preferences.SettingsStore; +import io.github.sspanak.tt9.preferences.settings.SettingsStore; public class SuggestionsBar { private final List suggestions = new ArrayList<>();