added support all ENTER keys (fixes OK not working on Cat S22 and some other phones)
This commit is contained in:
parent
49ecf259fd
commit
b159e552e5
7 changed files with 80 additions and 58 deletions
|
|
@ -7,6 +7,7 @@ import android.view.View;
|
||||||
import android.view.inputmethod.EditorInfo;
|
import android.view.inputmethod.EditorInfo;
|
||||||
import android.view.inputmethod.InputConnection;
|
import android.view.inputmethod.InputConnection;
|
||||||
|
|
||||||
|
import io.github.sspanak.tt9.ime.helpers.Key;
|
||||||
import io.github.sspanak.tt9.preferences.SettingsStore;
|
import io.github.sspanak.tt9.preferences.SettingsStore;
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -160,17 +161,17 @@ abstract class KeyPadHandler extends InputMethodService {
|
||||||
}
|
}
|
||||||
|
|
||||||
// start tracking key hold
|
// start tracking key hold
|
||||||
if (shouldTrackNumPress() || isSpecialFunctionKey(-keyCode)) {
|
if (shouldTrackNumPress() || Key.isHotkey(settings, -keyCode)) {
|
||||||
event.startTracking();
|
event.startTracking();
|
||||||
}
|
}
|
||||||
|
|
||||||
return isSpecialFunctionKey(keyCode) || isSpecialFunctionKey(-keyCode)
|
return Key.isHotkey(settings, keyCode) || Key.isHotkey(settings, -keyCode)
|
||||||
|| keyCode == KeyEvent.KEYCODE_STAR
|
|| keyCode == KeyEvent.KEYCODE_STAR
|
||||||
|| keyCode == KeyEvent.KEYCODE_POUND
|
|| 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_UP || keyCode == KeyEvent.KEYCODE_DPAD_DOWN) && shouldTrackUpDown())
|
||||||
|| ((keyCode == KeyEvent.KEYCODE_DPAD_LEFT || keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) && shouldTrackLeftRight())
|
|| ((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();
|
resetKeyRepeat();
|
||||||
ignoreNextKeyUp = keyCode;
|
ignoreNextKeyUp = keyCode;
|
||||||
|
|
||||||
if (handleSpecialFunctionKey(keyCode, true)) {
|
if (handleHotkey(keyCode, true)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -204,7 +205,7 @@ abstract class KeyPadHandler extends InputMethodService {
|
||||||
case KeyEvent.KEYCODE_7:
|
case KeyEvent.KEYCODE_7:
|
||||||
case KeyEvent.KEYCODE_8:
|
case KeyEvent.KEYCODE_8:
|
||||||
case KeyEvent.KEYCODE_9:
|
case KeyEvent.KEYCODE_9:
|
||||||
return onNumber(keyCodeToKeyNumber(keyCode), true, 0);
|
return onNumber(Key.codeToNumber(keyCode), true, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
ignoreNextKeyUp = 0;
|
ignoreNextKeyUp = 0;
|
||||||
|
|
@ -232,7 +233,7 @@ abstract class KeyPadHandler extends InputMethodService {
|
||||||
keyRepeatCounter = (lastKeyCode == keyCode) ? keyRepeatCounter + 1 : 0;
|
keyRepeatCounter = (lastKeyCode == keyCode) ? keyRepeatCounter + 1 : 0;
|
||||||
lastKeyCode = keyCode;
|
lastKeyCode = keyCode;
|
||||||
|
|
||||||
if (isNumber(keyCode)) {
|
if (Key.isNumber(keyCode)) {
|
||||||
numKeyRepeatCounter = (lastNumKeyCode == keyCode) ? numKeyRepeatCounter + 1 : 0;
|
numKeyRepeatCounter = (lastNumKeyCode == keyCode) ? numKeyRepeatCounter + 1 : 0;
|
||||||
lastNumKeyCode = keyCode;
|
lastNumKeyCode = keyCode;
|
||||||
}
|
}
|
||||||
|
|
@ -249,7 +250,7 @@ abstract class KeyPadHandler extends InputMethodService {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (keyCode == KeyEvent.KEYCODE_0) {
|
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"
|
// 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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (handleSpecialFunctionKey(keyCode, false)) {
|
if (handleHotkey(keyCode, false)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Key.isOK(keyCode)) {
|
||||||
|
return onOK();
|
||||||
|
}
|
||||||
|
|
||||||
switch (keyCode) {
|
switch (keyCode) {
|
||||||
case KeyEvent.KEYCODE_DPAD_CENTER: return onOK();
|
|
||||||
case KeyEvent.KEYCODE_DPAD_UP: return onUp();
|
case KeyEvent.KEYCODE_DPAD_UP: return onUp();
|
||||||
case KeyEvent.KEYCODE_DPAD_DOWN: return onDown();
|
case KeyEvent.KEYCODE_DPAD_DOWN: return onDown();
|
||||||
case KeyEvent.KEYCODE_DPAD_LEFT: return onLeft();
|
case KeyEvent.KEYCODE_DPAD_LEFT: return onLeft();
|
||||||
|
|
@ -277,7 +281,7 @@ abstract class KeyPadHandler extends InputMethodService {
|
||||||
case KeyEvent.KEYCODE_7:
|
case KeyEvent.KEYCODE_7:
|
||||||
case KeyEvent.KEYCODE_8:
|
case KeyEvent.KEYCODE_8:
|
||||||
case KeyEvent.KEYCODE_9:
|
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_STAR: return onStar();
|
||||||
case KeyEvent.KEYCODE_POUND: return onPound();
|
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)) {
|
if (keyCode == settings.getKeyAddWord() * (hold ? -1 : 1)) {
|
||||||
return onKeyAddWord();
|
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() {
|
protected void resetKeyRepeat() {
|
||||||
numKeyRepeatCounter = 0;
|
numKeyRepeatCounter = 0;
|
||||||
keyRepeatCounter = 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
|
// toggle handlers
|
||||||
abstract protected boolean shouldTrackUpDown();
|
abstract protected boolean shouldTrackUpDown();
|
||||||
abstract protected boolean shouldTrackLeftRight();
|
abstract protected boolean shouldTrackLeftRight();
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,9 @@ import java.util.List;
|
||||||
|
|
||||||
import io.github.sspanak.tt9.Logger;
|
import io.github.sspanak.tt9.Logger;
|
||||||
import io.github.sspanak.tt9.db.DictionaryDb;
|
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.ime.modes.InputMode;
|
||||||
import io.github.sspanak.tt9.languages.Language;
|
import io.github.sspanak.tt9.languages.Language;
|
||||||
import io.github.sspanak.tt9.languages.LanguageCollection;
|
import io.github.sspanak.tt9.languages.LanguageCollection;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package io.github.sspanak.tt9.ime;
|
package io.github.sspanak.tt9.ime.helpers;
|
||||||
|
|
||||||
import android.text.InputType;
|
import android.text.InputType;
|
||||||
import android.view.inputmethod.EditorInfo;
|
import android.view.inputmethod.EditorInfo;
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package io.github.sspanak.tt9.ime;
|
package io.github.sspanak.tt9.ime.helpers;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
56
src/io/github/sspanak/tt9/ime/helpers/Key.java
Normal file
56
src/io/github/sspanak/tt9/ime/helpers/Key.java
Normal file
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package io.github.sspanak.tt9.ime;
|
package io.github.sspanak.tt9.ime.helpers;
|
||||||
|
|
||||||
import android.graphics.Typeface;
|
import android.graphics.Typeface;
|
||||||
import android.text.Spannable;
|
import android.text.Spannable;
|
||||||
|
|
@ -12,7 +12,7 @@ import java.util.regex.Pattern;
|
||||||
import io.github.sspanak.tt9.Logger;
|
import io.github.sspanak.tt9.Logger;
|
||||||
import io.github.sspanak.tt9.db.DictionaryDb;
|
import io.github.sspanak.tt9.db.DictionaryDb;
|
||||||
import io.github.sspanak.tt9.ime.EmptyDatabaseWarning;
|
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.Language;
|
||||||
import io.github.sspanak.tt9.languages.Punctuation;
|
import io.github.sspanak.tt9.languages.Punctuation;
|
||||||
import io.github.sspanak.tt9.preferences.SettingsStore;
|
import io.github.sspanak.tt9.preferences.SettingsStore;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue