From 1178357b4a3ff0107c636d7f14fab74d53e45e8d Mon Sep 17 00:00:00 2001 From: Dimo Karaivanov Date: Mon, 20 Feb 2023 12:51:42 +0200 Subject: [PATCH] Settings Reorganization All categories are now on separate screens Added a 'Clear Unselected' dictionary option The 'auto space' setting is now on by default Reorganized the emoji and added 4 new ones --- build.gradle | 1 - docs/user-manual.md | 15 ++- res/values-bg/strings.xml | 4 +- res/values-de/strings.xml | 2 - res/values-es/strings.xml | 2 - res/values-fr/strings.xml | 4 +- res/values-it/strings.xml | 2 - res/values-nl/strings.xml | 2 - res/values-ru/strings.xml | 4 +- res/values-uk/strings.xml | 4 +- res/values/strings.xml | 6 +- res/xml/prefs.xml | 104 +++--------------- res/xml/prefs_screen_appearance.xml | 16 +++ res/xml/prefs_screen_dictionaries.xml | 24 ++++ res/xml/prefs_screen_keypad.xml | 48 ++++++++ .../github/sspanak/tt9/db/DictionaryDb.java | 13 ++- src/io/github/sspanak/tt9/db/WordsDao.java | 4 + .../sspanak/tt9/languages/Characters.java | 12 +- .../tt9/preferences/PreferencesActivity.java | 87 ++++++++++----- .../tt9/preferences/SettingsStore.java | 2 +- ...teDictionary.java => ItemTruncateAll.java} | 6 +- .../items/ItemTruncateUnselected.java | 64 +++++++++++ .../preferences/screens/AppearanceScreen.java | 18 +++ .../screens/DictionariesScreen.java | 51 +++++++++ .../preferences/screens/HotkeysScreen.java | 27 +---- .../tt9/preferences/screens/KeyPadScreen.java | 18 +++ .../screens/MainSettingsScreen.java | 71 +----------- 27 files changed, 378 insertions(+), 233 deletions(-) create mode 100644 res/xml/prefs_screen_appearance.xml create mode 100644 res/xml/prefs_screen_dictionaries.xml create mode 100644 res/xml/prefs_screen_keypad.xml rename src/io/github/sspanak/tt9/preferences/items/{ItemTruncateDictionary.java => ItemTruncateAll.java} (81%) create mode 100644 src/io/github/sspanak/tt9/preferences/items/ItemTruncateUnselected.java create mode 100644 src/io/github/sspanak/tt9/preferences/screens/AppearanceScreen.java create mode 100644 src/io/github/sspanak/tt9/preferences/screens/DictionariesScreen.java create mode 100644 src/io/github/sspanak/tt9/preferences/screens/KeyPadScreen.java diff --git a/build.gradle b/build.gradle index 83c70769..3d2907a2 100644 --- a/build.gradle +++ b/build.gradle @@ -56,7 +56,6 @@ def getVersionName = { -> // minor version String commitsSinceLastTag = "0" if (versionTagsCount > 1) { - println "VERSION TAG: " + versionTagsCount String lastVersionTag = execThing('git describe --match v[0-9]* --tags --abbrev=0') String gitLogResult = execThing("git log $lastVersionTag..HEAD --oneline") commitsSinceLastTag = gitLogResult == '' ? "0" : gitLogResult.split('\n').size() diff --git a/docs/user-manual.md b/docs/user-manual.md index 7431760c..79780938 100644 --- a/docs/user-manual.md +++ b/docs/user-manual.md @@ -20,13 +20,23 @@ With the default settings, it is only possible to type in 123 and ABC modes. In _If you don't do the above, there will be no suggestions when typing in Predictive mode._ -#### Dictionary Tips -Once a dictionary is loaded, it will stay there until you use the Clear option. This means you can enable and disable languages without reloading their dictionaries every time. Just do it once, only the first time. +### Dictionary Tips + +#### Loading a Dictionary +Once a dictionary is loaded, it will stay there until you use one of the "clear" options. This means you can enable and disable languages without reloading their dictionaries every time. Just do it once, only the first time. It also means that if you need to start using language X, you can safely disable all other languages, load only dictionary X (and save time!), then re-enable all languages you used before. Have in mind reloading a dictionary will reset the suggestion popularity to the factory defaults _(your custom added words will not be affected)_. However, there should be nothing to worry about. For the most part, you will see little to no difference in the suggestion order, unless you oftenly use uncommon words. +#### Clearing a Dictionary + +If you have stopped using languages X or Y, you could disable them and also use "Clear Unselected", to delete their dictionaries and free some memory. + +To delete everything, regardless of the selection, use "Clear All". + +In all cases, clearing a dictionary deletes both all factory and all custom added words. + ## Hotkeys #### D-pad Up (↑): @@ -117,4 +127,3 @@ On the Settings screen, you can choose languages for typing, configure the keypa - Select "Traditional T9". _The actual menu names may vary depending on your phone, Android version and language._ - diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index dbbb4281..06b74947 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -13,9 +13,8 @@ Помощ Тъмен облик Езици - Изтрий речник + Изтрий всички - Речници Отмени зареждането Неуспешно зареждане. Невалидна дума „%1$s“ на ред %2$d за език „%3$s“. Несупешно зареждане на речник за език „%1$s“ (%2$s). @@ -52,4 +51,5 @@ Напишете дума… Бутони в обратен ред Включете настройката, ако на първият ред са 7–8–9, вместо 1–2–3. + Изтрий неизбраните diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 8fed747a..ae0e73bb 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -12,9 +12,7 @@ Hilfe Dunkles Thema Sprachen - Wörterbuch löschen - Wörterbücher Lade Wörterbuch (%1$s)… Wörterbuch laden Wird nicht geladen. Wörterbuch für \"%1$s\" nicht gefunden. diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 420dfae7..f8171c2f 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -9,7 +9,6 @@ La palabra \"%1$s\" ya esta en el diccionario. Agregar palabra Apariencia - Diccionarios Teclas de acceso rápido Texto predictivo Teclado @@ -21,7 +20,6 @@ Cargando diccionario Cargando diccionario (%1$s)… Sobre esta aplicación - Eliminar el diccionario Diccionario eliminado con éxito. Cancelar la carga Mayúsculas automáticas diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index f841a162..079ee378 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -14,9 +14,8 @@ Aide Thème sombre Langues - Vider le dictionaire + Vider tous - Dictionnaires Annuler le chargement Echec du chargement de dictionnaire pour langue «%1$s» (%2$s). Chargement du dictionnaire terminé. @@ -43,4 +42,5 @@ Tapez un mot… Inverser l\'ordre des clés Activez le paramètre s\'il y a 7–8–9 sur le premier rang, au lieu de 1–2–3. + Vider les non sélectionnés diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index db8b574d..a5ba8f8c 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -13,9 +13,7 @@ Aiuto Tema scuro Lingue - Eliminare il dizionario - Dizionari Annullare il caricamento Caricamento del dizionario terminato. Caricamento del dizionario (%1$s)… diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index 38e0d548..7e15deb8 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -11,8 +11,6 @@ Helpen Donker thema Talen - Woordenboek wissen - Woordenboeken Woordenboek laden (%1$s)… Woordenboek laden Laden mislukt. Woordenboek voor %1$s niet gevonden. diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 0dbb7d23..9bd236b8 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -13,9 +13,8 @@ Помощь Темная тема Языки - Очистить словарь + Очистить все - Словари Отменить загрузку Ошибка загрузки словаря для языка «%1$s» (%2$s). Загрузка словаря завершена. @@ -52,4 +51,5 @@ Введите слово… Перевернутая клавиатура Используйте настройку, если в первом ряду 7–8–9 вместо 1–2–3. + Очистить невыбранные diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index 9399cb6e..117a5e66 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -13,9 +13,8 @@ Допомога Темна тема Мови - Очистити словник + Очистіть усі - Словники Скасувати завантаження Помилка завантаження словника для мови «%1$s» (%2$s). Завантаження словника завершено. @@ -52,4 +51,5 @@ Введіть слово… Зворотна клавіатура Використовуйте налаштування, якщо 7–8–9 у першому рядку замість 1–2–3. + Очистіть невибрані diff --git a/res/values/strings.xml b/res/values/strings.xml index f17a3be8..27217498 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -15,7 +15,6 @@ About Appearance - Dictionaries Predictive Mode Select Hotkeys Keypad @@ -39,10 +38,11 @@ Dictionary load completed. Loading dictionary (%1$s)… Loading dictionary - Load dictionary + Load Dictionary No dictionary for language \"%1$s\". Go to Settings to load it. Loading failed. Dictionary for \"%1$s\" not found. - Clear dictionary + Clear All + Clear Unselected Dictionary successfully cleared. Add Word key diff --git a/res/xml/prefs.xml b/res/xml/prefs.xml index 3ceb77c0..f0b41c7a 100644 --- a/res/xml/prefs.xml +++ b/res/xml/prefs.xml @@ -4,7 +4,6 @@ app:layout="@layout/pref_text" app:orderingFromXml="true"> - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + diff --git a/res/xml/prefs_screen_appearance.xml b/res/xml/prefs_screen_appearance.xml new file mode 100644 index 00000000..a0ed1282 --- /dev/null +++ b/res/xml/prefs_screen_appearance.xml @@ -0,0 +1,16 @@ + + + + + + + + diff --git a/res/xml/prefs_screen_dictionaries.xml b/res/xml/prefs_screen_dictionaries.xml new file mode 100644 index 00000000..923db205 --- /dev/null +++ b/res/xml/prefs_screen_dictionaries.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + diff --git a/res/xml/prefs_screen_keypad.xml b/res/xml/prefs_screen_keypad.xml new file mode 100644 index 00000000..8a75f2a1 --- /dev/null +++ b/res/xml/prefs_screen_keypad.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/io/github/sspanak/tt9/db/DictionaryDb.java b/src/io/github/sspanak/tt9/db/DictionaryDb.java index 8659e72d..a344dd50 100644 --- a/src/io/github/sspanak/tt9/db/DictionaryDb.java +++ b/src/io/github/sspanak/tt9/db/DictionaryDb.java @@ -106,11 +106,20 @@ public class DictionaryDb { } - public static void truncateWords(Handler handler) { + public static void deleteWords(Handler handler) { + deleteWords(handler, null); + } + + + public static void deleteWords(Handler handler, ArrayList languageIds) { new Thread() { @Override public void run() { - getInstance().clearAllTables(); + if (languageIds == null) { + getInstance().clearAllTables(); + } else if (languageIds.size() > 0) { + getInstance().wordsDao().deleteByLanguage(languageIds); + } handler.sendEmptyMessage(0); } }.start(); diff --git a/src/io/github/sspanak/tt9/db/WordsDao.java b/src/io/github/sspanak/tt9/db/WordsDao.java index aaf5a2b0..59364ed5 100644 --- a/src/io/github/sspanak/tt9/db/WordsDao.java +++ b/src/io/github/sspanak/tt9/db/WordsDao.java @@ -5,6 +5,7 @@ import androidx.room.Insert; import androidx.room.OnConflictStrategy; import androidx.room.Query; +import java.util.ArrayList; import java.util.List; @Dao @@ -12,6 +13,9 @@ interface WordsDao { @Query("SELECT COUNT(id) FROM words WHERE :langId < 0 OR lang = :langId") int count(int langId); + @Query("DELETE FROM words WHERE LANG IN(:langIds)") + int deleteByLanguage(ArrayList langIds); + @Query("SELECT COUNT(id) FROM words WHERE lang = :langId AND word = :word") int doesWordExist(int langId, String word); diff --git a/src/io/github/sspanak/tt9/languages/Characters.java b/src/io/github/sspanak/tt9/languages/Characters.java index 553322aa..d20f2c1b 100644 --- a/src/io/github/sspanak/tt9/languages/Characters.java +++ b/src/io/github/sspanak/tt9/languages/Characters.java @@ -20,17 +20,21 @@ public class Characters { )); final private static ArrayList> Emoji = new ArrayList<>(Arrays.asList( - // smile -> frown + // positive new ArrayList<>(Arrays.asList( - "🙂", "😀", "🤣", "😉", "😛", "😳", "😲", "😱", "😭", "😢", "🙁" + "🙂", "😀", "🤣", "🤓", "😎", "😛", "😉" + )), + // negative + new ArrayList<>(Arrays.asList( + "🙁", "😢", "😭", "😱", "😲", "😳", "😐", "😠" )), // hands new ArrayList<>(Arrays.asList( - "👍", "👋", "✌️", "👏", "🤝", "💪", "🤘", "🖖", "👎" + "👍", "👋", "✌️", "👏", "🖖", "🤘", "🤝", "💪", "👎" )), // emotions new ArrayList<>(Arrays.asList( - "❤", "🤗", "😍", "😘", "😇", "😈", "🎉", "🤓", "😎", "🤔", "🥶", "😬" + "❤", "🤗", "😍", "😘", "😇", "😈", "🍺", "🎉", "🥱", "🤔", "🥶", "😬" )) )); diff --git a/src/io/github/sspanak/tt9/preferences/PreferencesActivity.java b/src/io/github/sspanak/tt9/preferences/PreferencesActivity.java index 26d3e698..a2be40c7 100644 --- a/src/io/github/sspanak/tt9/preferences/PreferencesActivity.java +++ b/src/io/github/sspanak/tt9/preferences/PreferencesActivity.java @@ -7,14 +7,18 @@ import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatDelegate; import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentTransaction; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.db.DictionaryDb; import io.github.sspanak.tt9.db.DictionaryLoader; -import io.github.sspanak.tt9.preferences.screens.MainSettingsScreen; +import io.github.sspanak.tt9.preferences.screens.AppearanceScreen; +import io.github.sspanak.tt9.preferences.screens.DictionariesScreen; import io.github.sspanak.tt9.preferences.screens.HotkeysScreen; +import io.github.sspanak.tt9.preferences.screens.KeyPadScreen; +import io.github.sspanak.tt9.preferences.screens.MainSettingsScreen; import io.github.sspanak.tt9.ui.DictionaryLoadingBar; public class PreferencesActivity extends AppCompatActivity implements PreferenceFragmentCompat.OnPreferenceStartFragmentCallback { @@ -31,39 +35,68 @@ public class PreferencesActivity extends AppCompatActivity implements Preference super.onCreate(savedInstanceState); validateFunctionKeys(); - buildScreen(); + buildLayout(); } @Override public boolean onPreferenceStartFragment(@NonNull PreferenceFragmentCompat caller, @NonNull Preference pref) { - // instantiate the new Fragment - Fragment fragment; - if (pref.getFragment() != null && pref.getFragment().contains("Hotkeys")) { - fragment = new HotkeysScreen(this); - } else { - fragment = new MainSettingsScreen(this); - } + Fragment fragment = getScreen((getScreenName(pref))); fragment.setArguments(pref.getExtras()); - - // replace the existing Fragment with the new Fragment - getSupportFragmentManager().beginTransaction() - .replace(R.id.preferences_container, fragment) - .addToBackStack(null) - .commit(); - + displayScreen(fragment, true); return true; } - private void applyTheme() { - AppCompatDelegate.setDefaultNightMode( - settings.getDarkTheme() ? AppCompatDelegate.MODE_NIGHT_YES : AppCompatDelegate.MODE_NIGHT_NO - ); + /** + * getScreenName + * Determines the name of the screen for the given preference, as defined in the preference's "fragment" attribute. + * Expected format: "current.package.name.screens.SomeNameScreen" + */ + private String getScreenName(@NonNull Preference pref) { + String screenClassName = pref.getFragment(); + return screenClassName != null ? screenClassName.replaceFirst("^.+?([^.]+)Screen$", "$1") : ""; } - private void buildScreen() { + /** + * getScreen + * Finds a screen fragment by name. If there is no fragment with such name, the main screen + * fragment will be returned. + */ + private Fragment getScreen(String name) { + switch (name) { + case "Appearance": + return new AppearanceScreen(this); + case "Dictionaries": + return new DictionariesScreen(this); + case "Hotkeys": + return new HotkeysScreen(this); + case "KeyPad": + return new KeyPadScreen(this); + default: + return new MainSettingsScreen(this); + } + } + + + /** + * displayScreen + * Replaces the currently displayed screen fragment with a new one. + */ + private void displayScreen(Fragment screen, boolean addToBackStack) { + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + + transaction.replace(R.id.preferences_container, screen); + if (addToBackStack) { + transaction.addToBackStack(screen.getClass().getSimpleName()); + } + + transaction.commit(); + } + + + private void buildLayout() { ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setDisplayShowHomeEnabled(true); @@ -71,10 +104,7 @@ public class PreferencesActivity extends AppCompatActivity implements Preference } setContentView(R.layout.preferences_container); - getSupportFragmentManager() - .beginTransaction() - .replace(R.id.preferences_container, new MainSettingsScreen(this)) - .commit(); + displayScreen(new MainSettingsScreen(this), false); } @@ -87,6 +117,13 @@ public class PreferencesActivity extends AppCompatActivity implements Preference } + private void applyTheme() { + AppCompatDelegate.setDefaultNightMode( + settings.getDarkTheme() ? AppCompatDelegate.MODE_NIGHT_YES : AppCompatDelegate.MODE_NIGHT_NO + ); + } + + private void validateFunctionKeys() { if (!settings.areFunctionKeysSet()) { settings.setDefaultKeys(); diff --git a/src/io/github/sspanak/tt9/preferences/SettingsStore.java b/src/io/github/sspanak/tt9/preferences/SettingsStore.java index 419c8a9f..6d727653 100644 --- a/src/io/github/sspanak/tt9/preferences/SettingsStore.java +++ b/src/io/github/sspanak/tt9/preferences/SettingsStore.java @@ -207,7 +207,7 @@ public class SettingsStore { /************* typing settings *************/ - public boolean getAutoSpace() { return prefs.getBoolean("auto_space", false); } + 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", "."); diff --git a/src/io/github/sspanak/tt9/preferences/items/ItemTruncateDictionary.java b/src/io/github/sspanak/tt9/preferences/items/ItemTruncateAll.java similarity index 81% rename from src/io/github/sspanak/tt9/preferences/items/ItemTruncateDictionary.java rename to src/io/github/sspanak/tt9/preferences/items/ItemTruncateAll.java index 455a3410..4798cf13 100644 --- a/src/io/github/sspanak/tt9/preferences/items/ItemTruncateDictionary.java +++ b/src/io/github/sspanak/tt9/preferences/items/ItemTruncateAll.java @@ -13,7 +13,7 @@ import io.github.sspanak.tt9.db.DictionaryLoader; import io.github.sspanak.tt9.ui.UI; -public class ItemTruncateDictionary extends ItemClickable { +public class ItemTruncateAll extends ItemClickable { public static final String NAME = "dictionary_truncate"; private final Context context; @@ -21,7 +21,7 @@ public class ItemTruncateDictionary extends ItemClickable { private final ItemLoadDictionary loadItem; - public ItemTruncateDictionary(Preference item, ItemLoadDictionary loadItem, Context context, DictionaryLoader loader) { + public ItemTruncateAll(Preference item, ItemLoadDictionary loadItem, Context context, DictionaryLoader loader) { super(item); this.context = context; this.loadItem = loadItem; @@ -42,7 +42,7 @@ public class ItemTruncateDictionary extends ItemClickable { loadItem.changeToLoadButton(); } - DictionaryDb.truncateWords(onDictionaryTruncated); + DictionaryDb.deleteWords(onDictionaryTruncated); return true; } diff --git a/src/io/github/sspanak/tt9/preferences/items/ItemTruncateUnselected.java b/src/io/github/sspanak/tt9/preferences/items/ItemTruncateUnselected.java new file mode 100644 index 00000000..bbd9f72f --- /dev/null +++ b/src/io/github/sspanak/tt9/preferences/items/ItemTruncateUnselected.java @@ -0,0 +1,64 @@ +package io.github.sspanak.tt9.preferences.items; + +import android.content.Context; +import android.os.Handler; +import android.os.Looper; +import android.os.Message; + +import androidx.preference.Preference; + +import java.util.ArrayList; + +import io.github.sspanak.tt9.R; +import io.github.sspanak.tt9.db.DictionaryDb; +import io.github.sspanak.tt9.db.DictionaryLoader; +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.ui.UI; + + +public class ItemTruncateUnselected extends ItemClickable { + public static final String NAME = "dictionary_truncate_unselected"; + + private final Context context; + private final DictionaryLoader loader; + private final ItemLoadDictionary loadItem; + private final SettingsStore settings; + + + public ItemTruncateUnselected(Preference item, ItemLoadDictionary loadItem, Context context, SettingsStore settings, DictionaryLoader loader) { + super(item); + this.context = context; + this.loadItem = loadItem; + this.settings = settings; + this.loader = loader; + } + + private final Handler onDictionaryTruncated = new Handler(Looper.getMainLooper()) { + @Override + public void handleMessage(Message msg) { + UI.toast(context, R.string.dictionary_truncated); + } + }; + + @Override + protected boolean onClick(Preference p) { + if (loader != null && loader.isRunning()) { + loader.stop(); + loadItem.changeToLoadButton(); + } + + ArrayList unselectedLanguageIds = new ArrayList<>(); + ArrayList selectedLanguageIds = settings.getEnabledLanguageIds(); + for (Language lang : LanguageCollection.getAll(false)) { + if (!selectedLanguageIds.contains(lang.getId())) { + unselectedLanguageIds.add(lang.getId()); + } + } + + DictionaryDb.deleteWords(onDictionaryTruncated, unselectedLanguageIds); + + return true; + } +} diff --git a/src/io/github/sspanak/tt9/preferences/screens/AppearanceScreen.java b/src/io/github/sspanak/tt9/preferences/screens/AppearanceScreen.java new file mode 100644 index 00000000..397fe309 --- /dev/null +++ b/src/io/github/sspanak/tt9/preferences/screens/AppearanceScreen.java @@ -0,0 +1,18 @@ +package io.github.sspanak.tt9.preferences.screens; + +import io.github.sspanak.tt9.R; +import io.github.sspanak.tt9.preferences.PreferencesActivity; +import io.github.sspanak.tt9.preferences.items.ItemToggleDarkTheme; + +public class AppearanceScreen extends BaseScreenFragment { + public AppearanceScreen() { init(); } + public AppearanceScreen(PreferencesActivity activity) { init(activity); } + + @Override protected int getTitle() { return R.string.pref_category_appearance; } + @Override protected int getXml() { return R.xml.prefs_screen_appearance; } + + @Override + protected void onCreate() { + (new ItemToggleDarkTheme(findPreference(ItemToggleDarkTheme.NAME))).enableToggleHandler(); + } +} diff --git a/src/io/github/sspanak/tt9/preferences/screens/DictionariesScreen.java b/src/io/github/sspanak/tt9/preferences/screens/DictionariesScreen.java new file mode 100644 index 00000000..157064c6 --- /dev/null +++ b/src/io/github/sspanak/tt9/preferences/screens/DictionariesScreen.java @@ -0,0 +1,51 @@ +package io.github.sspanak.tt9.preferences.screens; + +import io.github.sspanak.tt9.R; +import io.github.sspanak.tt9.preferences.PreferencesActivity; +import io.github.sspanak.tt9.preferences.items.ItemLoadDictionary; +import io.github.sspanak.tt9.preferences.items.ItemSelectLanguage; +import io.github.sspanak.tt9.preferences.items.ItemTruncateAll; +import io.github.sspanak.tt9.preferences.items.ItemTruncateUnselected; + +public class DictionariesScreen extends BaseScreenFragment { + public DictionariesScreen() { init(); } + public DictionariesScreen(PreferencesActivity activity) { init(activity); } + + @Override protected int getTitle() { return R.string.pref_choose_languages; } + @Override protected int getXml() { return R.xml.prefs_screen_dictionaries; } + + @Override + protected void onCreate() { + ItemSelectLanguage multiSelect = new ItemSelectLanguage( + findPreference(ItemSelectLanguage.NAME), + activity.settings + ); + multiSelect.populate().enableValidation(); + + ItemLoadDictionary loadItem = new ItemLoadDictionary( + findPreference(ItemLoadDictionary.NAME), + activity, + activity.settings, + activity.getDictionaryLoader(), + activity.getDictionaryProgressBar() + ); + loadItem.enableClickHandler(); + + ItemTruncateAll truncateItem = new ItemTruncateAll( + findPreference(ItemTruncateAll.NAME), + loadItem, + activity, + activity.getDictionaryLoader() + ); + truncateItem.enableClickHandler(); + + ItemTruncateUnselected truncateSelectedItem = new ItemTruncateUnselected( + findPreference(ItemTruncateUnselected.NAME), + loadItem, + activity, + activity.settings, + activity.getDictionaryLoader() + ); + truncateSelectedItem.enableClickHandler(); + } +} diff --git a/src/io/github/sspanak/tt9/preferences/screens/HotkeysScreen.java b/src/io/github/sspanak/tt9/preferences/screens/HotkeysScreen.java index f2dcd5b3..25582509 100644 --- a/src/io/github/sspanak/tt9/preferences/screens/HotkeysScreen.java +++ b/src/io/github/sspanak/tt9/preferences/screens/HotkeysScreen.java @@ -10,33 +10,14 @@ import io.github.sspanak.tt9.preferences.PreferencesActivity; import io.github.sspanak.tt9.preferences.items.SectionKeymap; public class HotkeysScreen extends BaseScreenFragment { - public HotkeysScreen() { - init(); - } + public HotkeysScreen() { init(); } + public HotkeysScreen(PreferencesActivity activity) { init(activity); } - public HotkeysScreen(PreferencesActivity activity) { - init(activity); - } - - - @Override - protected int getTitle() { - return R.string.pref_category_function_keys; - } - - - @Override - protected int getXml() { - return R.xml.prefs_screen_hotkeys; - } + @Override protected int getTitle() { return R.string.pref_category_function_keys; } + @Override protected int getXml() { return R.xml.prefs_screen_hotkeys; } @Override public void onCreate() { - createKeymapSection(); - } - - - private void createKeymapSection() { DropDownPreference[] dropDowns = { findPreference(SectionKeymap.ITEM_ADD_WORD), findPreference(SectionKeymap.ITEM_BACKSPACE), diff --git a/src/io/github/sspanak/tt9/preferences/screens/KeyPadScreen.java b/src/io/github/sspanak/tt9/preferences/screens/KeyPadScreen.java new file mode 100644 index 00000000..d714b897 --- /dev/null +++ b/src/io/github/sspanak/tt9/preferences/screens/KeyPadScreen.java @@ -0,0 +1,18 @@ +package io.github.sspanak.tt9.preferences.screens; + +import io.github.sspanak.tt9.R; +import io.github.sspanak.tt9.preferences.PreferencesActivity; +import io.github.sspanak.tt9.preferences.items.ItemSelectZeroKeyCharacter; + +public class KeyPadScreen extends BaseScreenFragment { + public KeyPadScreen() { init(); } + public KeyPadScreen(PreferencesActivity activity) { init(activity); } + + @Override protected int getTitle() { return R.string.pref_category_keypad; } + @Override protected int getXml() { return R.xml.prefs_screen_keypad; } + + @Override + protected void onCreate() { + (new ItemSelectZeroKeyCharacter(findPreference(ItemSelectZeroKeyCharacter.NAME), activity)).populate().activate(); + } +} diff --git a/src/io/github/sspanak/tt9/preferences/screens/MainSettingsScreen.java b/src/io/github/sspanak/tt9/preferences/screens/MainSettingsScreen.java index c2aa87f4..083ae2bc 100644 --- a/src/io/github/sspanak/tt9/preferences/screens/MainSettingsScreen.java +++ b/src/io/github/sspanak/tt9/preferences/screens/MainSettingsScreen.java @@ -10,84 +10,25 @@ import java.util.regex.Pattern; import io.github.sspanak.tt9.BuildConfig; import io.github.sspanak.tt9.Logger; import io.github.sspanak.tt9.R; -import io.github.sspanak.tt9.preferences.items.ItemLoadDictionary; -import io.github.sspanak.tt9.preferences.items.ItemSelectLanguage; -import io.github.sspanak.tt9.preferences.items.ItemSelectZeroKeyCharacter; -import io.github.sspanak.tt9.preferences.items.ItemToggleDarkTheme; -import io.github.sspanak.tt9.preferences.items.ItemTruncateDictionary; import io.github.sspanak.tt9.preferences.PreferencesActivity; public class MainSettingsScreen extends BaseScreenFragment { private final Pattern releaseVersionRegex = Pattern.compile("^\\d+\\.\\d+$"); - public MainSettingsScreen() { - init(); - } - - public MainSettingsScreen(PreferencesActivity activity) { - init(activity); - } - - - @Override - protected int getTitle() { - return R.string.app_settings; - } - - - @Override - protected int getXml() { - return R.xml.prefs; - } + public MainSettingsScreen() { init(); } + public MainSettingsScreen(PreferencesActivity activity) { init(activity); } + @Override protected int getTitle() { return R.string.app_settings;} + @Override protected int getXml() { return R.xml.prefs; } @Override public void onCreate() { + addHelpLink(); createAboutSection(); - createAppearanceSection(); - createDictionarySection(); - createHelpSection(); - createPredictiveModeSection(); } - private void createDictionarySection() { - ItemSelectLanguage multiSelect = new ItemSelectLanguage( - findPreference(ItemSelectLanguage.NAME), - activity.settings - ); - multiSelect.populate().enableValidation(); - - ItemLoadDictionary loadItem = new ItemLoadDictionary( - findPreference(ItemLoadDictionary.NAME), - activity, - activity.settings, - activity.getDictionaryLoader(), - activity.getDictionaryProgressBar() - ); - loadItem.enableClickHandler(); - - ItemTruncateDictionary truncateItem = new ItemTruncateDictionary( - findPreference(ItemTruncateDictionary.NAME), - loadItem, - activity, - activity.getDictionaryLoader() - ); - truncateItem.enableClickHandler(); - } - - - private void createAppearanceSection() { - (new ItemToggleDarkTheme(findPreference(ItemToggleDarkTheme.NAME))).enableToggleHandler(); - } - - - private void createPredictiveModeSection() { - (new ItemSelectZeroKeyCharacter(findPreference(ItemSelectZeroKeyCharacter.NAME), activity)).populate().activate(); - } - - - private void createHelpSection() { + private void addHelpLink() { try { if (!releaseVersionRegex.matcher(BuildConfig.VERSION_NAME).find()) { throw new Exception("VERSION_NAME does not match: \\d+.\\d+");