From 3cda6b9bb3d338a4485c9eda3fc30224b60a9b7d Mon Sep 17 00:00:00 2001 From: sspanak Date: Wed, 17 Jul 2024 17:22:11 +0300 Subject: [PATCH] added the TAB key --- .../github/sspanak/tt9/ime/HotkeyHandler.java | 23 +++++++++ .../github/sspanak/tt9/ime/modes/Mode123.java | 9 ++-- .../tt9/preferences/helpers/Hotkeys.java | 3 +- .../screens/hotkeys/HotkeysScreen.java | 1 + .../screens/hotkeys/SectionKeymap.java | 1 + .../preferences/settings/SettingsHotkeys.java | 7 ++- .../tt9/ui/main/keys/SoftKeyAddWord.java | 27 ----------- .../sspanak/tt9/ui/main/keys/SoftKeyLF2.java | 47 +++++++++++++++++++ app/src/main/res/layout/panel_numpad.xml | 6 +-- app/src/main/res/values/strings.xml | 1 + app/src/main/res/xml/prefs_screen_hotkeys.xml | 4 ++ 11 files changed, 92 insertions(+), 37 deletions(-) delete mode 100644 app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyAddWord.java create mode 100644 app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyLF2.java diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/HotkeyHandler.java b/app/src/main/java/io/github/sspanak/tt9/ime/HotkeyHandler.java index 17a2d490..772fe51b 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/HotkeyHandler.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/HotkeyHandler.java @@ -90,6 +90,10 @@ public abstract class HotkeyHandler extends CommandHandler { return onKeyScrollSuggestion(validateOnly, false); } + if (keyCode == settings.getKeyTab()) { + return onTab(validateOnly); + } + return false; } @@ -241,4 +245,23 @@ public abstract class HotkeyHandler extends CommandHandler { return true; } + + + public boolean onTab(boolean validateOnly) { + if (shouldBeOff()) { + return false; + } + + if (validateOnly) { + return true; + } + + if (inputType.isMultilineText()) { + return onText("\t", validateOnly); + } else { + textField.sendDownUpKeyEvents(KeyEvent.KEYCODE_TAB); + } + + return true; + } } diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/modes/Mode123.java b/app/src/main/java/io/github/sspanak/tt9/ime/modes/Mode123.java index 64e2f832..0ab070a5 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/modes/Mode123.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/modes/Mode123.java @@ -102,15 +102,16 @@ public class Mode123 extends ModePassthrough { /** * shouldIgnoreText * Since this is a numeric mode, we allow typing only numbers and: - * 1. In numeric fields, we must allow math chars - * 2. In dialer fields, we must allow various punctuation chars, because they are used as dialing shortcuts - * at least in Japan. - * More info and discussion: issue 241 on Github. + * 1. TAB + * 2. Math chars for numeric fields + * 3. Various punctuation chars for dialer fields, because they are used as dialing shortcuts + * at least in Japan. More info and discussion: issue 241 on Github. */ @Override public boolean shouldIgnoreText(String text) { return text == null || text.length() != 1 + || text.charAt(0) == 9 || !( (text.charAt(0) > 31 && text.charAt(0) < 65) || (text.charAt(0) > 90 && text.charAt(0) < 97) 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 e69eb6b0..857fe413 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 @@ -74,7 +74,8 @@ public class Hotkeys { previousSuggestion, nextSuggestion, KeyEvent.KEYCODE_POUND, - -KeyEvent.KEYCODE_POUND // negative means "hold" + -KeyEvent.KEYCODE_POUND, // negative means "hold" + KeyEvent.KEYCODE_UNKNOWN // unassigned ); } diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/hotkeys/HotkeysScreen.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/hotkeys/HotkeysScreen.java index cbd31140..752c1c81 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/hotkeys/HotkeysScreen.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/hotkeys/HotkeysScreen.java @@ -28,6 +28,7 @@ public class HotkeysScreen extends BaseScreenFragment { findPreference(SectionKeymap.ITEM_NEXT_SUGGESTION), findPreference(SectionKeymap.ITEM_NEXT_INPUT_MODE), findPreference(SectionKeymap.ITEM_NEXT_LANGUAGE), + findPreference(SectionKeymap.ITEM_TAB), }; SectionKeymap section = new SectionKeymap(Arrays.asList(dropDowns), activity); section.populate().activate(); 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 09c4d6b6..364d3536 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 @@ -20,6 +20,7 @@ public class SectionKeymap { public static final String ITEM_NEXT_SUGGESTION = "key_next_suggestion"; public static final String ITEM_NEXT_INPUT_MODE = "key_next_input_mode"; public static final String ITEM_NEXT_LANGUAGE = "key_next_language"; + public static final String ITEM_TAB = "key_tab"; private final Hotkeys hotkeys; private final Collection items; 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 index fbdb0fc5..db03c71b 100644 --- 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 @@ -20,7 +20,8 @@ class SettingsHotkeys extends SettingsHacks { int previousSuggestion, int nextSuggestion, int nextInputMode, - int nextLanguage + int nextLanguage, + int tab ) { prefsEditor .putString(SectionKeymap.ITEM_BACKSPACE, String.valueOf(backspace)) @@ -31,6 +32,7 @@ class SettingsHotkeys extends SettingsHacks { .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_TAB, String.valueOf(tab)) .putBoolean("hotkeys_v2_initialized", true) .apply(); } @@ -65,4 +67,7 @@ class SettingsHotkeys extends SettingsHacks { public int getKeyCommandPalette() { return getFunctionKey(SectionKeymap.ITEM_COMMAND_PALETTE); } + public int getKeyTab() { + return getFunctionKey(SectionKeymap.ITEM_TAB); + } } diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyAddWord.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyAddWord.java deleted file mode 100644 index 7c00517a..00000000 --- a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyAddWord.java +++ /dev/null @@ -1,27 +0,0 @@ -package io.github.sspanak.tt9.ui.main.keys; - -import android.content.Context; -import android.util.AttributeSet; - -public class SoftKeyAddWord extends SoftKey { - public SoftKeyAddWord(Context context) { super(context); } - public SoftKeyAddWord(Context context, AttributeSet attrs) { super(context, attrs); } - public SoftKeyAddWord(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } - - @Override - protected boolean handleRelease() { - if (validateTT9Handler()) { - tt9.addWord(); - return true; - } - return false; - } - - @Override - public void render() { - super.render(); - if (tt9 != null) { - setEnabled(!tt9.isVoiceInputActive()); - } - } -} diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyLF2.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyLF2.java new file mode 100644 index 00000000..462e09b8 --- /dev/null +++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyLF2.java @@ -0,0 +1,47 @@ +package io.github.sspanak.tt9.ui.main.keys; + +import android.content.Context; +import android.util.AttributeSet; + +import io.github.sspanak.tt9.R; +import io.github.sspanak.tt9.ui.Vibration; + +public class SoftKeyLF2 extends SoftKey { + public SoftKeyLF2(Context context) { super(context); } + public SoftKeyLF2(Context context, AttributeSet attrs) { super(context, attrs); } + public SoftKeyLF2(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } + + @Override + protected void handleHold() { + if (!validateTT9Handler()) { + return; + } + + preventRepeat(); + vibrate(Vibration.getHoldVibration()); + tt9.addWord(); + } + + @Override + protected boolean handleRelease() { + return validateTT9Handler() && tt9.onTab(false); + } + + @Override + protected String getTitle() { + return "+"; + } + + @Override + protected String getSubTitle() { + return getContext().getString(R.string.key_tab).toUpperCase(); + } + + @Override + public void render() { + super.render(); + if (tt9 != null) { + setEnabled(!tt9.isVoiceInputActive()); + } + } +} diff --git a/app/src/main/res/layout/panel_numpad.xml b/app/src/main/res/layout/panel_numpad.xml index 7115c23a..12624fd1 100644 --- a/app/src/main/res/layout/panel_numpad.xml +++ b/app/src/main/res/layout/panel_numpad.xml @@ -57,14 +57,12 @@ android:layout_height="@dimen/numpad_key_height" android:layoutDirection="ltr"> - + android:layout_weight="@dimen/numpad_control_key_layout_weight" /> Menu Left Func Right Func + Tab Volume Mute Volume Down Volume Up diff --git a/app/src/main/res/xml/prefs_screen_hotkeys.xml b/app/src/main/res/xml/prefs_screen_hotkeys.xml index 30334b60..1fe8d1cd 100644 --- a/app/src/main/res/xml/prefs_screen_hotkeys.xml +++ b/app/src/main/res/xml/prefs_screen_hotkeys.xml @@ -34,6 +34,10 @@ app:key="key_next_input_mode" app:title="@string/function_next_mode" /> + +