diff --git a/src/io/github/sspanak/tt9/ime/KeyPadHandler.java b/src/io/github/sspanak/tt9/ime/KeyPadHandler.java index dc3f28de..dc590a8f 100644 --- a/src/io/github/sspanak/tt9/ime/KeyPadHandler.java +++ b/src/io/github/sspanak/tt9/ime/KeyPadHandler.java @@ -7,6 +7,7 @@ import android.view.View; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputConnection; +import io.github.sspanak.tt9.ime.helpers.Key; import io.github.sspanak.tt9.preferences.SettingsStore; @@ -160,17 +161,17 @@ abstract class KeyPadHandler extends InputMethodService { } // start tracking key hold - if (shouldTrackNumPress() || isSpecialFunctionKey(-keyCode)) { + if (shouldTrackNumPress() || Key.isHotkey(settings, -keyCode)) { event.startTracking(); } - return isSpecialFunctionKey(keyCode) || isSpecialFunctionKey(-keyCode) + return Key.isHotkey(settings, keyCode) || Key.isHotkey(settings, -keyCode) || keyCode == KeyEvent.KEYCODE_STAR || keyCode == KeyEvent.KEYCODE_POUND - || (isNumber(keyCode) && shouldTrackNumPress()) + || (Key.isNumber(keyCode) && shouldTrackNumPress()) || ((keyCode == KeyEvent.KEYCODE_DPAD_UP || keyCode == KeyEvent.KEYCODE_DPAD_DOWN) && shouldTrackUpDown()) || ((keyCode == KeyEvent.KEYCODE_DPAD_LEFT || keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) && shouldTrackLeftRight()) - || (mEditing != EDITING_NOSHOW && keyCode == KeyEvent.KEYCODE_DPAD_CENTER); + || (mEditing != EDITING_NOSHOW && Key.isOK(keyCode)); } @@ -189,7 +190,7 @@ abstract class KeyPadHandler extends InputMethodService { resetKeyRepeat(); ignoreNextKeyUp = keyCode; - if (handleSpecialFunctionKey(keyCode, true)) { + if (handleHotkey(keyCode, true)) { return true; } @@ -204,7 +205,7 @@ abstract class KeyPadHandler extends InputMethodService { case KeyEvent.KEYCODE_7: case KeyEvent.KEYCODE_8: case KeyEvent.KEYCODE_9: - return onNumber(keyCodeToKeyNumber(keyCode), true, 0); + return onNumber(Key.codeToNumber(keyCode), true, 0); } ignoreNextKeyUp = 0; @@ -232,7 +233,7 @@ abstract class KeyPadHandler extends InputMethodService { keyRepeatCounter = (lastKeyCode == keyCode) ? keyRepeatCounter + 1 : 0; lastKeyCode = keyCode; - if (isNumber(keyCode)) { + if (Key.isNumber(keyCode)) { numKeyRepeatCounter = (lastNumKeyCode == keyCode) ? numKeyRepeatCounter + 1 : 0; lastNumKeyCode = keyCode; } @@ -249,7 +250,7 @@ abstract class KeyPadHandler extends InputMethodService { } if (keyCode == KeyEvent.KEYCODE_0) { - return onNumber(keyCodeToKeyNumber(keyCode), false, numKeyRepeatCounter); + return onNumber(Key.codeToNumber(keyCode), false, numKeyRepeatCounter); } // dialer fields are similar to pure numeric fields, but for user convenience, holding "0" @@ -258,12 +259,15 @@ abstract class KeyPadHandler extends InputMethodService { return false; } - if (handleSpecialFunctionKey(keyCode, false)) { + if (handleHotkey(keyCode, false)) { return true; } - switch(keyCode) { - case KeyEvent.KEYCODE_DPAD_CENTER: return onOK(); + if (Key.isOK(keyCode)) { + return onOK(); + } + + switch (keyCode) { case KeyEvent.KEYCODE_DPAD_UP: return onUp(); case KeyEvent.KEYCODE_DPAD_DOWN: return onDown(); case KeyEvent.KEYCODE_DPAD_LEFT: return onLeft(); @@ -277,7 +281,7 @@ abstract class KeyPadHandler extends InputMethodService { case KeyEvent.KEYCODE_7: case KeyEvent.KEYCODE_8: case KeyEvent.KEYCODE_9: - return onNumber(keyCodeToKeyNumber(keyCode), false, numKeyRepeatCounter); + return onNumber(Key.codeToNumber(keyCode), false, numKeyRepeatCounter); case KeyEvent.KEYCODE_STAR: return onStar(); case KeyEvent.KEYCODE_POUND: return onPound(); } @@ -286,7 +290,7 @@ abstract class KeyPadHandler extends InputMethodService { } - private boolean handleSpecialFunctionKey(int keyCode, boolean hold) { + private boolean handleHotkey(int keyCode, boolean hold) { if (keyCode == settings.getKeyAddWord() * (hold ? -1 : 1)) { return onKeyAddWord(); } @@ -312,20 +316,6 @@ abstract class KeyPadHandler extends InputMethodService { } - private boolean isNumber(int keyCode) { - return keyCode >= KeyEvent.KEYCODE_0 && keyCode <= KeyEvent.KEYCODE_9; - } - - - private boolean isSpecialFunctionKey(int keyCode) { - return keyCode == settings.getKeyAddWord() - || keyCode == settings.getKeyBackspace() - || keyCode == settings.getKeyNextLanguage() - || keyCode == settings.getKeyNextInputMode() - || keyCode == settings.getKeyShowSettings(); - } - - protected void resetKeyRepeat() { numKeyRepeatCounter = 0; keyRepeatCounter = 0; @@ -334,33 +324,6 @@ abstract class KeyPadHandler extends InputMethodService { } - private int keyCodeToKeyNumber(int keyCode) { - switch (keyCode) { - case KeyEvent.KEYCODE_0: - return 0; - case KeyEvent.KEYCODE_1: - return 1; - case KeyEvent.KEYCODE_2: - return 2; - case KeyEvent.KEYCODE_3: - return 3; - case KeyEvent.KEYCODE_4: - return 4; - case KeyEvent.KEYCODE_5: - return 5; - case KeyEvent.KEYCODE_6: - return 6; - case KeyEvent.KEYCODE_7: - return 7; - case KeyEvent.KEYCODE_8: - return 8; - case KeyEvent.KEYCODE_9: - return 9; - default: - return -1; - } - } - // toggle handlers abstract protected boolean shouldTrackUpDown(); abstract protected boolean shouldTrackLeftRight(); diff --git a/src/io/github/sspanak/tt9/ime/TraditionalT9.java b/src/io/github/sspanak/tt9/ime/TraditionalT9.java index 165dacaa..4a005055 100644 --- a/src/io/github/sspanak/tt9/ime/TraditionalT9.java +++ b/src/io/github/sspanak/tt9/ime/TraditionalT9.java @@ -14,6 +14,9 @@ import java.util.List; import io.github.sspanak.tt9.Logger; import io.github.sspanak.tt9.db.DictionaryDb; +import io.github.sspanak.tt9.ime.helpers.InputFieldHelper; +import io.github.sspanak.tt9.ime.helpers.InputModeValidator; +import io.github.sspanak.tt9.ime.helpers.TextHelper; import io.github.sspanak.tt9.ime.modes.InputMode; import io.github.sspanak.tt9.languages.Language; import io.github.sspanak.tt9.languages.LanguageCollection; diff --git a/src/io/github/sspanak/tt9/ime/InputFieldHelper.java b/src/io/github/sspanak/tt9/ime/helpers/InputFieldHelper.java similarity index 99% rename from src/io/github/sspanak/tt9/ime/InputFieldHelper.java rename to src/io/github/sspanak/tt9/ime/helpers/InputFieldHelper.java index fa0a28fc..07b16f6d 100644 --- a/src/io/github/sspanak/tt9/ime/InputFieldHelper.java +++ b/src/io/github/sspanak/tt9/ime/helpers/InputFieldHelper.java @@ -1,4 +1,4 @@ -package io.github.sspanak.tt9.ime; +package io.github.sspanak.tt9.ime.helpers; import android.text.InputType; import android.view.inputmethod.EditorInfo; diff --git a/src/io/github/sspanak/tt9/ime/InputModeValidator.java b/src/io/github/sspanak/tt9/ime/helpers/InputModeValidator.java similarity index 98% rename from src/io/github/sspanak/tt9/ime/InputModeValidator.java rename to src/io/github/sspanak/tt9/ime/helpers/InputModeValidator.java index 5b8ede9e..7f78e77f 100644 --- a/src/io/github/sspanak/tt9/ime/InputModeValidator.java +++ b/src/io/github/sspanak/tt9/ime/helpers/InputModeValidator.java @@ -1,4 +1,4 @@ -package io.github.sspanak.tt9.ime; +package io.github.sspanak.tt9.ime.helpers; import java.util.ArrayList; diff --git a/src/io/github/sspanak/tt9/ime/helpers/Key.java b/src/io/github/sspanak/tt9/ime/helpers/Key.java new file mode 100644 index 00000000..cfe515ad --- /dev/null +++ b/src/io/github/sspanak/tt9/ime/helpers/Key.java @@ -0,0 +1,56 @@ +package io.github.sspanak.tt9.ime.helpers; + +import android.view.KeyEvent; + +import io.github.sspanak.tt9.preferences.SettingsStore; + +public class Key { + public static boolean isNumber(int keyCode) { + return keyCode >= KeyEvent.KEYCODE_0 && keyCode <= KeyEvent.KEYCODE_9; + } + + + public static boolean isHotkey(SettingsStore settings, int keyCode) { + return keyCode == settings.getKeyAddWord() + || keyCode == settings.getKeyBackspace() + || keyCode == settings.getKeyNextLanguage() + || keyCode == settings.getKeyNextInputMode() + || keyCode == settings.getKeyShowSettings(); + } + + + public static boolean isOK(int keyCode) { + return + keyCode == KeyEvent.KEYCODE_DPAD_CENTER + || keyCode == KeyEvent.KEYCODE_ENTER + || keyCode == KeyEvent.KEYCODE_NUMPAD_ENTER; + } + + + public static int codeToNumber(int keyCode) { + switch (keyCode) { + case KeyEvent.KEYCODE_0: + return 0; + case KeyEvent.KEYCODE_1: + return 1; + case KeyEvent.KEYCODE_2: + return 2; + case KeyEvent.KEYCODE_3: + return 3; + case KeyEvent.KEYCODE_4: + return 4; + case KeyEvent.KEYCODE_5: + return 5; + case KeyEvent.KEYCODE_6: + return 6; + case KeyEvent.KEYCODE_7: + return 7; + case KeyEvent.KEYCODE_8: + return 8; + case KeyEvent.KEYCODE_9: + return 9; + default: + return -1; + } + } +} diff --git a/src/io/github/sspanak/tt9/ime/TextHelper.java b/src/io/github/sspanak/tt9/ime/helpers/TextHelper.java similarity index 96% rename from src/io/github/sspanak/tt9/ime/TextHelper.java rename to src/io/github/sspanak/tt9/ime/helpers/TextHelper.java index 821f4da9..f690a594 100644 --- a/src/io/github/sspanak/tt9/ime/TextHelper.java +++ b/src/io/github/sspanak/tt9/ime/helpers/TextHelper.java @@ -1,4 +1,4 @@ -package io.github.sspanak.tt9.ime; +package io.github.sspanak.tt9.ime.helpers; import android.graphics.Typeface; import android.text.Spannable; diff --git a/src/io/github/sspanak/tt9/ime/modes/ModePredictive.java b/src/io/github/sspanak/tt9/ime/modes/ModePredictive.java index af95a1a5..f94e2275 100644 --- a/src/io/github/sspanak/tt9/ime/modes/ModePredictive.java +++ b/src/io/github/sspanak/tt9/ime/modes/ModePredictive.java @@ -12,7 +12,7 @@ import java.util.regex.Pattern; import io.github.sspanak.tt9.Logger; import io.github.sspanak.tt9.db.DictionaryDb; import io.github.sspanak.tt9.ime.EmptyDatabaseWarning; -import io.github.sspanak.tt9.ime.InputFieldHelper; +import io.github.sspanak.tt9.ime.helpers.InputFieldHelper; import io.github.sspanak.tt9.languages.Language; import io.github.sspanak.tt9.languages.Punctuation; import io.github.sspanak.tt9.preferences.SettingsStore;