From 2760a30af2799fd171cb2a51f28ced12e8cf67a9 Mon Sep 17 00:00:00 2001 From: sspanak Date: Thu, 25 Apr 2024 18:41:59 +0300 Subject: [PATCH] added Compatibility sections in each screen and moved each option where it belongs, instead of keeping them all on the Initial Setup screen --- .../tt9/preferences/items/ItemDropDown.java | 4 +- .../screens/appearance/AppearanceScreen.java | 56 ++++++++++--------- .../ItemAlternativeSuggestionScrolling.java | 22 ++++++++ .../appearance/ItemSelectLayoutType.java | 3 +- .../screens/appearance/ItemSelectTheme.java | 2 +- .../ItemKeyPadDebounceTime.java | 13 +++-- .../screens/keypad/KeyPadScreen.java | 17 +++--- .../ItemAlternativeSuggestionScrolling.java | 31 ---------- .../screens/setup/SetupScreen.java | 12 ---- .../main/res/xml/prefs_screen_appearance.xml | 5 ++ app/src/main/res/xml/prefs_screen_keypad.xml | 15 ++--- app/src/main/res/xml/prefs_screen_setup.xml | 13 +---- docs/user-manual.md | 10 +++- 13 files changed, 97 insertions(+), 106 deletions(-) create mode 100644 app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemAlternativeSuggestionScrolling.java rename app/src/main/java/io/github/sspanak/tt9/preferences/screens/{setup => keypad}/ItemKeyPadDebounceTime.java (60%) delete mode 100644 app/src/main/java/io/github/sspanak/tt9/preferences/screens/setup/ItemAlternativeSuggestionScrolling.java diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemDropDown.java b/app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemDropDown.java index 5fec2602..489ac6dd 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemDropDown.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemDropDown.java @@ -8,7 +8,7 @@ import java.util.LinkedHashMap; import io.github.sspanak.tt9.util.Logger; -public class ItemDropDown { +abstract public class ItemDropDown { private final DropDownPreference item; private LinkedHashMap values; @@ -27,6 +27,8 @@ public class ItemDropDown { populate(stringifiedValues); } + abstract public ItemDropDown populate(); + protected void populate(LinkedHashMap values) { if (item == null) { Logger.w("ItemDropDown.populate", "Cannot populate a NULL item. Ignoring."); diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/AppearanceScreen.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/AppearanceScreen.java index ca9ca4dd..b8bb8e07 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/AppearanceScreen.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/AppearanceScreen.java @@ -2,6 +2,8 @@ package io.github.sspanak.tt9.preferences.screens.appearance; import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.preferences.PreferencesActivity; +import io.github.sspanak.tt9.preferences.items.ItemDropDown; +import io.github.sspanak.tt9.preferences.items.ItemSwitch; import io.github.sspanak.tt9.preferences.screens.BaseScreenFragment; public class AppearanceScreen extends BaseScreenFragment { @@ -15,32 +17,34 @@ public class AppearanceScreen extends BaseScreenFragment { @Override protected void onCreate() { - (new ItemSelectTheme(activity, findPreference(ItemSelectTheme.NAME))) - .populate() - .preview() - .enableClickHandler(); - - (new ItemSelectLayoutType(activity, findPreference(ItemSelectLayoutType.NAME))) - .populate() - .preview() - .enableClickHandler(); - - (new ItemStatusIcon(findPreference(ItemStatusIcon.NAME), activity.getSettings())).populate(); - - (new ItemSelectSettingsFontSize(findPreference(ItemSelectSettingsFontSize.NAME), this)) - .populate() - .preview() - .enableClickHandler(); - - (new ItemCandidatesView(findPreference(ItemCandidatesView.NAME), activity.getSettings())) - .populate() - .enableClickHandler(); - - (new ItemClearInsets(findPreference(ItemClearInsets.NAME), activity.getSettings())) - .populate() - .enableClickHandler(); - - + createMainSection(); + createHacksSection(); resetFontSize(true); } + + private void createMainSection() { + (new ItemStatusIcon(findPreference(ItemStatusIcon.NAME), activity.getSettings())).populate(); + + ItemDropDown[] items = { + new ItemSelectTheme(findPreference(ItemSelectTheme.NAME), activity), + new ItemSelectLayoutType(findPreference(ItemSelectLayoutType.NAME), activity), + new ItemSelectSettingsFontSize(findPreference(ItemSelectSettingsFontSize.NAME), this) + }; + + for (ItemDropDown item : items) { + item.populate().preview().enableClickHandler(); + } + } + + private void createHacksSection() { + ItemSwitch[] items = { + new ItemAlternativeSuggestionScrolling(findPreference(ItemAlternativeSuggestionScrolling.NAME), activity.getSettings()), + new ItemCandidatesView(findPreference(ItemCandidatesView.NAME), activity.getSettings()), + new ItemClearInsets(findPreference(ItemClearInsets.NAME), activity.getSettings()) + }; + + for (ItemSwitch item : items) { + item.populate().enableClickHandler(); + } + } } diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemAlternativeSuggestionScrolling.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemAlternativeSuggestionScrolling.java new file mode 100644 index 00000000..3660cbe3 --- /dev/null +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemAlternativeSuggestionScrolling.java @@ -0,0 +1,22 @@ +package io.github.sspanak.tt9.preferences.screens.appearance; + +import androidx.preference.SwitchPreferenceCompat; + +import io.github.sspanak.tt9.preferences.items.ItemSwitch; +import io.github.sspanak.tt9.preferences.settings.SettingsStore; + +public class ItemAlternativeSuggestionScrolling extends ItemSwitch { + public static final String NAME = "pref_alternative_suggestion_scrolling"; + + private final SettingsStore settings; + + public ItemAlternativeSuggestionScrolling(SwitchPreferenceCompat item, SettingsStore settings) { + super(item); + this.settings = settings; + } + + @Override + protected boolean getDefaultValue() { + return settings.getSuggestionScrollingDelay() > 0; + } +} diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemSelectLayoutType.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemSelectLayoutType.java index c5fbea0f..828bedce 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemSelectLayoutType.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemSelectLayoutType.java @@ -14,8 +14,7 @@ public class ItemSelectLayoutType extends ItemDropDown { private final PreferencesActivity activity; - public ItemSelectLayoutType(PreferencesActivity activity, DropDownPreference item) { - + public ItemSelectLayoutType(DropDownPreference item, PreferencesActivity activity) { super(item); this.activity = activity; } diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemSelectTheme.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemSelectTheme.java index c7d3d87f..47102e97 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemSelectTheme.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemSelectTheme.java @@ -16,7 +16,7 @@ class ItemSelectTheme extends ItemDropDown { private final Context context; - ItemSelectTheme(Context context, DropDownPreference item) { + ItemSelectTheme(DropDownPreference item, Context context) { super(item); this.context = context; } diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/setup/ItemKeyPadDebounceTime.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/keypad/ItemKeyPadDebounceTime.java similarity index 60% rename from app/src/main/java/io/github/sspanak/tt9/preferences/screens/setup/ItemKeyPadDebounceTime.java rename to app/src/main/java/io/github/sspanak/tt9/preferences/screens/keypad/ItemKeyPadDebounceTime.java index 1b674cc6..f459e7e9 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/setup/ItemKeyPadDebounceTime.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/keypad/ItemKeyPadDebounceTime.java @@ -1,4 +1,4 @@ -package io.github.sspanak.tt9.preferences.screens.setup; +package io.github.sspanak.tt9.preferences.screens.keypad; import android.content.Context; @@ -7,27 +7,30 @@ import androidx.preference.DropDownPreference; import java.util.LinkedHashMap; import io.github.sspanak.tt9.R; +import io.github.sspanak.tt9.preferences.PreferencesActivity; import io.github.sspanak.tt9.preferences.items.ItemDropDown; class ItemKeyPadDebounceTime extends ItemDropDown { public static final String NAME = "pref_key_pad_debounce_time"; - private final Context context; + private final PreferencesActivity activity; - ItemKeyPadDebounceTime(Context context, DropDownPreference item) { + ItemKeyPadDebounceTime(DropDownPreference item, PreferencesActivity activity) { super(item); - this.context = context; + this.activity = activity; } public ItemDropDown populate() { LinkedHashMap dropDownOptions = new LinkedHashMap<>(); - dropDownOptions.put("0", context.getString(R.string.pref_hack_key_pad_debounce_off)); + dropDownOptions.put("0", activity.getString(R.string.pref_hack_key_pad_debounce_off)); String[] values = new String[] { "20", "30", "50", "75", "100", "150", "250", "350" }; for (String value : values) { dropDownOptions.put(value, value + " ms"); } + super.populate(dropDownOptions); + super.setValue(String.valueOf(activity.getSettings().getKeyPadDebounceTime())); return this; } diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/keypad/KeyPadScreen.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/keypad/KeyPadScreen.java index fdd05cf0..05f8535b 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/keypad/KeyPadScreen.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/keypad/KeyPadScreen.java @@ -2,6 +2,7 @@ package io.github.sspanak.tt9.preferences.screens.keypad; import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.preferences.PreferencesActivity; +import io.github.sspanak.tt9.preferences.items.ItemDropDown; import io.github.sspanak.tt9.preferences.screens.BaseScreenFragment; public class KeyPadScreen extends BaseScreenFragment { @@ -15,15 +16,15 @@ public class KeyPadScreen extends BaseScreenFragment { @Override protected void onCreate() { - (new ItemSelectZeroKeyCharacter(findPreference(ItemSelectZeroKeyCharacter.NAME), activity)) - .populate() - .enableClickHandler() - .preview(); + ItemDropDown[] items = { + new ItemSelectZeroKeyCharacter(findPreference(ItemSelectZeroKeyCharacter.NAME), activity), + new ItemSelectABCAutoAccceptTime(findPreference(ItemSelectABCAutoAccceptTime.NAME), activity), + new ItemKeyPadDebounceTime(findPreference(ItemKeyPadDebounceTime.NAME), activity) + }; - (new ItemSelectABCAutoAccceptTime(findPreference(ItemSelectABCAutoAccceptTime.NAME), activity)) - .populate() - .enableClickHandler() - .preview(); + for (ItemDropDown item : items) { + item.populate().enableClickHandler().preview(); + } resetFontSize(false); } diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/setup/ItemAlternativeSuggestionScrolling.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/setup/ItemAlternativeSuggestionScrolling.java deleted file mode 100644 index 725d62bb..00000000 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/setup/ItemAlternativeSuggestionScrolling.java +++ /dev/null @@ -1,31 +0,0 @@ -package io.github.sspanak.tt9.preferences.screens.setup; - -import androidx.preference.SwitchPreferenceCompat; - -import io.github.sspanak.tt9.preferences.settings.SettingsStore; - -public class ItemAlternativeSuggestionScrolling { - public static final String NAME = "pref_alternative_suggestion_scrolling"; - - private final SwitchPreferenceCompat item; - private final SettingsStore settings; - - public ItemAlternativeSuggestionScrolling(SwitchPreferenceCompat item, SettingsStore settings) { - this.item = item; - this.settings = settings; - } - - public ItemAlternativeSuggestionScrolling populate() { - if (item != null) { - item.setChecked(settings.getSuggestionScrollingDelay() > 0); - } - - return this; - } - - public void setEnabled(boolean yes) { - if (item != null) { - item.setEnabled(yes); - } - } -} diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/setup/SetupScreen.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/setup/SetupScreen.java index 44ca5ad1..8e4acd12 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/setup/SetupScreen.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/setup/SetupScreen.java @@ -48,10 +48,6 @@ public class SetupScreen extends BaseScreenFragment { } private void createHacksSection(boolean isTT9On) { - (new ItemAlternativeSuggestionScrolling(findPreference(ItemAlternativeSuggestionScrolling.NAME), activity.getSettings())) - .populate() - .setEnabled(isTT9On); - Preference hackGoogleChat = findPreference("pref_hack_google_chat"); if (hackGoogleChat != null) { hackGoogleChat.setEnabled(isTT9On); @@ -61,13 +57,5 @@ public class SetupScreen extends BaseScreenFragment { if (hackFBMessenger != null) { hackFBMessenger.setEnabled(isTT9On); } - - ItemKeyPadDebounceTime item = new ItemKeyPadDebounceTime(activity, findPreference(ItemKeyPadDebounceTime.NAME)); - item.populate().preview(); - if (isTT9On) { - item.enable(); - } else { - item.disable(); - } } } diff --git a/app/src/main/res/xml/prefs_screen_appearance.xml b/app/src/main/res/xml/prefs_screen_appearance.xml index 19e0b985..4e1f58a1 100644 --- a/app/src/main/res/xml/prefs_screen_appearance.xml +++ b/app/src/main/res/xml/prefs_screen_appearance.xml @@ -21,6 +21,11 @@ + + diff --git a/app/src/main/res/xml/prefs_screen_keypad.xml b/app/src/main/res/xml/prefs_screen_keypad.xml index b995e341..979828a5 100644 --- a/app/src/main/res/xml/prefs_screen_keypad.xml +++ b/app/src/main/res/xml/prefs_screen_keypad.xml @@ -15,9 +15,7 @@ app:summary="@string/pref_upside_down_keys_summary" app:title="@string/pref_upside_down_keys" /> - + - - + + + + + diff --git a/app/src/main/res/xml/prefs_screen_setup.xml b/app/src/main/res/xml/prefs_screen_setup.xml index 98f7b070..d6fbfa25 100644 --- a/app/src/main/res/xml/prefs_screen_setup.xml +++ b/app/src/main/res/xml/prefs_screen_setup.xml @@ -9,14 +9,7 @@ app:key="global_default_keyboard" app:title="@string/setup_default_keyboard" /> - - - + - - diff --git a/docs/user-manual.md b/docs/user-manual.md index ee851c3a..54fa8a19 100644 --- a/docs/user-manual.md +++ b/docs/user-manual.md @@ -172,16 +172,20 @@ The "Export" option allows you to export all added words, for all languages, inc Using "Delete", you can search for and delete misspelled words or others that you don't want in the dictionary. ### Compatibility Options & Troubleshooting -For several applications or devices, it is possible to enable special options, which will make Traditional T9 work better with them. You can find them in Settings → Initial Setup, under the Compatibility section. +For several applications or devices, it is possible to enable special options, which will make Traditional T9 work better with them. You can find them at the end of each settings screen, under the Compatibility section. #### Alternative suggestion scrolling method On some devices, in Predictive Mode, you may not be able to see all suggestions, or may not be able to scroll the list to the end. The problem occurs sometimes on Android 9 or earlier. Enable the option, if you are experiencing this issue. +_Available in: Settings → Appearance._ + #### Key repeat protection CAT S22 Flip and Qin F21 phones are known for their low-quality keypads, which degrade quickly over time and start registering multiple clicks for a single key press. You may notice this when typing or navigating the phone menus. For CAT phones the recommended setting is 50-75 ms. For Qin F21, try with 20-30 ms. If you are still experiencing the issue, increase the value a bit, but generally try to keep it as low as possible. +_Available in: Settings → Keypad._ + _**Note:** The higher the value you set, the slower you will have to type. TT9 will ignore very quick key presses._ _**Note 2:** Besides the above, Qin phones may also fail to detect long presses. Unfortunately, in this case, nothing can be done._ @@ -189,9 +193,13 @@ _**Note 2:** Besides the above, Qin phones may also fail to detect long presses. #### Send messages with OK in Facebook Messenger Facebook Messenger fails to recognize the OK key on some devices, making it impossible to send messages with it. If you prefer to send messages using OK, instead of Messenger's own send button, enable this option. This ensures sending is possible on any phone. +_Available in: Settings → Initial Setup._ + #### Send messages with OK in Google Chat Similar to the above, but for Google Chat. +_Available in: Settings → Initial Setup._ + _This option is still experimental. It may sometimes fail to detect the "Send" button and click another one. If this starts happening, just close the chat and reopen it._ #### Telegram/Snapchat stickers and emoji panels won't open