fixed 123 mode not working on some Kyocera and LG phones... hopefully... (#274)
This commit is contained in:
parent
ada5b48b9c
commit
db53e740f4
7 changed files with 44 additions and 65 deletions
|
|
@ -113,7 +113,7 @@ abstract class KeyPadHandler extends InputMethodService {
|
||||||
@Override
|
@Override
|
||||||
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
||||||
if (shouldBeOff()) {
|
if (shouldBeOff()) {
|
||||||
return super.onKeyDown(keyCode, event);
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Logger.d("onKeyDown", "Key: " + event + " repeat?: " + event.getRepeatCount() + " long-time: " + event.isLongPress());
|
// Logger.d("onKeyDown", "Key: " + event + " repeat?: " + event.getRepeatCount() + " long-time: " + event.isLongPress());
|
||||||
|
|
@ -133,26 +133,20 @@ abstract class KeyPadHandler extends InputMethodService {
|
||||||
event.startTracking();
|
event.startTracking();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (
|
return Key.isNumber(keyCode)
|
||||||
Key.isNumber(keyCode)
|
|
||||||
|| Key.isOK(keyCode)
|
|| Key.isOK(keyCode)
|
||||||
|| Key.isHotkey(settings, keyCode) || Key.isHotkey(settings, -keyCode)
|
|| Key.isHotkey(settings, keyCode) || Key.isHotkey(settings, -keyCode)
|
||||||
|| keyCode == KeyEvent.KEYCODE_STAR
|
|| keyCode == KeyEvent.KEYCODE_STAR
|
||||||
|| keyCode == KeyEvent.KEYCODE_POUND
|
|| keyCode == KeyEvent.KEYCODE_POUND
|
||||||
|| ((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());
|
||||||
) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return super.onKeyDown(keyCode, event);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
|
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
|
||||||
if (shouldBeOff()) {
|
if (shouldBeOff()) {
|
||||||
return super.onKeyLongPress(keyCode, event);
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Logger.d("onLongPress", "LONG PRESS: " + keyCode);
|
// Logger.d("onLongPress", "LONG PRESS: " + keyCode);
|
||||||
|
|
@ -183,7 +177,7 @@ abstract class KeyPadHandler extends InputMethodService {
|
||||||
}
|
}
|
||||||
|
|
||||||
ignoreNextKeyUp = 0;
|
ignoreNextKeyUp = 0;
|
||||||
return super.onKeyLongPress(keyCode, event);
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -195,7 +189,7 @@ abstract class KeyPadHandler extends InputMethodService {
|
||||||
@Override
|
@Override
|
||||||
public boolean onKeyUp(int keyCode, KeyEvent event) {
|
public boolean onKeyUp(int keyCode, KeyEvent event) {
|
||||||
if (shouldBeOff()) {
|
if (shouldBeOff()) {
|
||||||
return super.onKeyUp(keyCode, event);
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Logger.d("onKeyUp", "Key: " + keyCode + " repeat?: " + event.getRepeatCount());
|
// Logger.d("onKeyUp", "Key: " + keyCode + " repeat?: " + event.getRepeatCount());
|
||||||
|
|
@ -238,13 +232,10 @@ abstract class KeyPadHandler extends InputMethodService {
|
||||||
case KeyEvent.KEYCODE_DPAD_LEFT: return onLeft();
|
case KeyEvent.KEYCODE_DPAD_LEFT: return onLeft();
|
||||||
case KeyEvent.KEYCODE_DPAD_RIGHT: return onRight(keyRepeatCounter > 0);
|
case KeyEvent.KEYCODE_DPAD_RIGHT: return onRight(keyRepeatCounter > 0);
|
||||||
case KeyEvent.KEYCODE_STAR:
|
case KeyEvent.KEYCODE_STAR:
|
||||||
case KeyEvent.KEYCODE_POUND:
|
case KeyEvent.KEYCODE_POUND: return onOtherKey(keyCode);
|
||||||
if (onOtherKey(keyCode)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return super.onKeyUp(keyCode, event);
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -213,7 +213,7 @@ public class TraditionalT9 extends KeyPadHandler {
|
||||||
// 1. Dialer fields seem to handle backspace on their own and we must ignore it,
|
// 1. Dialer fields seem to handle backspace on their own and we must ignore it,
|
||||||
// otherwise, keyDown race condition occur for all keys.
|
// otherwise, keyDown race condition occur for all keys.
|
||||||
// 2. Allow the assigned key to function normally, when there is no text (e.g. "Back" navigates back)
|
// 2. Allow the assigned key to function normally, when there is no text (e.g. "Back" navigates back)
|
||||||
if (mInputMode.isDialer() || !textField.isThereText()) {
|
if (mInputMode.isPassthrough() || !textField.isThereText()) {
|
||||||
Logger.d("onBackspace", "backspace ignored");
|
Logger.d("onBackspace", "backspace ignored");
|
||||||
mInputMode.reset();
|
mInputMode.reset();
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -598,7 +598,7 @@ public class TraditionalT9 extends KeyPadHandler {
|
||||||
|
|
||||||
|
|
||||||
private void nextInputMode() {
|
private void nextInputMode() {
|
||||||
if (mInputMode.isDialer()) {
|
if (mInputMode.isPassthrough()) {
|
||||||
return;
|
return;
|
||||||
} else if (allowedInputModes.size() == 1 && allowedInputModes.contains(InputMode.MODE_123)) {
|
} else if (allowedInputModes.size() == 1 && allowedInputModes.contains(InputMode.MODE_123)) {
|
||||||
mInputMode = !mInputMode.is123() ? InputMode.getInstance(settings, mLanguage, InputMode.MODE_123) : mInputMode;
|
mInputMode = !mInputMode.is123() ? InputMode.getInstance(settings, mLanguage, InputMode.MODE_123) : mInputMode;
|
||||||
|
|
@ -770,7 +770,7 @@ public class TraditionalT9 extends KeyPadHandler {
|
||||||
*/
|
*/
|
||||||
protected void forceShowWindowIfHidden() {
|
protected void forceShowWindowIfHidden() {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P
|
||||||
&& !mInputMode.isDialer()
|
&& !mInputMode.isPassthrough()
|
||||||
&& !isInputViewShown()
|
&& !isInputViewShown()
|
||||||
) {
|
) {
|
||||||
requestShowSelf(InputMethodManager.SHOW_IMPLICIT);
|
requestShowSelf(InputMethodManager.SHOW_IMPLICIT);
|
||||||
|
|
@ -780,12 +780,12 @@ public class TraditionalT9 extends KeyPadHandler {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean shouldBeVisible() {
|
protected boolean shouldBeVisible() {
|
||||||
return !mInputMode.isDialer() && isActive;
|
return !mInputMode.isPassthrough() && isActive;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean shouldBeOff() {
|
protected boolean shouldBeOff() {
|
||||||
return currentInputConnection == null || !isActive;
|
return currentInputConnection == null || !isActive || mInputMode.isPassthrough();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -93,7 +93,7 @@ public class TextField {
|
||||||
// Dialer field, not to be confused with Phone text field.
|
// Dialer field, not to be confused with Phone text field.
|
||||||
// It only accepts 0-9, "#" and "*".
|
// It only accepts 0-9, "#" and "*".
|
||||||
if (inputType.isDialer()) {
|
if (inputType.isDialer()) {
|
||||||
allowedModes.add(InputMode.MODE_DIALER);
|
allowedModes.add(InputMode.MODE_PASSTHROUGH);
|
||||||
return allowedModes;
|
return allowedModes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ abstract public class InputMode {
|
||||||
public static final int MODE_PREDICTIVE = 0;
|
public static final int MODE_PREDICTIVE = 0;
|
||||||
public static final int MODE_ABC = 1;
|
public static final int MODE_ABC = 1;
|
||||||
public static final int MODE_123 = 2;
|
public static final int MODE_123 = 2;
|
||||||
public static final int MODE_DIALER = 4;
|
public static final int MODE_PASSTHROUGH = 4;
|
||||||
|
|
||||||
// text case
|
// text case
|
||||||
public static final int CASE_UNDEFINED = -1;
|
public static final int CASE_UNDEFINED = -1;
|
||||||
|
|
@ -41,8 +41,8 @@ abstract public class InputMode {
|
||||||
return new ModePredictive(settings, language);
|
return new ModePredictive(settings, language);
|
||||||
case MODE_ABC:
|
case MODE_ABC:
|
||||||
return new ModeABC(settings, language);
|
return new ModeABC(settings, language);
|
||||||
case MODE_DIALER:
|
case MODE_PASSTHROUGH:
|
||||||
return new ModeDialer();
|
return new ModePassthrough();
|
||||||
default:
|
default:
|
||||||
Logger.w("tt9/InputMode", "Defaulting to mode: " + Mode123.class.getName() + " for unknown InputMode: " + mode);
|
Logger.w("tt9/InputMode", "Defaulting to mode: " + Mode123.class.getName() + " for unknown InputMode: " + mode);
|
||||||
case MODE_123:
|
case MODE_123:
|
||||||
|
|
@ -80,7 +80,7 @@ abstract public class InputMode {
|
||||||
// Mode identifiers
|
// Mode identifiers
|
||||||
public boolean isABC() { return false; }
|
public boolean isABC() { return false; }
|
||||||
public boolean is123() { return false; }
|
public boolean is123() { return false; }
|
||||||
public boolean isDialer() { return false; }
|
public boolean isPassthrough() { return false; }
|
||||||
public boolean isNumeric() { return false; }
|
public boolean isNumeric() { return false; }
|
||||||
|
|
||||||
// Utility
|
// Utility
|
||||||
|
|
|
||||||
|
|
@ -6,12 +6,12 @@ import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import io.github.sspanak.tt9.ime.helpers.Key;
|
import io.github.sspanak.tt9.ime.helpers.Key;
|
||||||
|
|
||||||
public class Mode123 extends InputMode {
|
public class Mode123 extends ModePassthrough {
|
||||||
public int getId() { return MODE_123; }
|
@Override public int getId() { return MODE_123; }
|
||||||
|
@Override @NonNull public String toString() { return "123"; }
|
||||||
|
|
||||||
Mode123() {
|
@Override public final boolean is123() { return true; }
|
||||||
allowedTextCases.add(CASE_LOWER);
|
@Override public boolean isPassthrough() { return false; }
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onNumber(int number, boolean hold, int repeat) {
|
public boolean onNumber(int number, boolean hold, int repeat) {
|
||||||
|
|
@ -30,14 +30,4 @@ public class Mode123 extends InputMode {
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public boolean is123() { return true; }
|
|
||||||
@Override final public boolean isNumeric() { return true; }
|
|
||||||
@Override public int getSequenceLength() { return 0; }
|
|
||||||
|
|
||||||
@NonNull
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "123";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,23 +0,0 @@
|
||||||
package io.github.sspanak.tt9.ime.modes;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
|
|
||||||
import io.github.sspanak.tt9.ime.helpers.Key;
|
|
||||||
|
|
||||||
// see: InputType.isDialer()
|
|
||||||
public class ModeDialer extends Mode123 {
|
|
||||||
@Override public int getId() { return MODE_DIALER; }
|
|
||||||
@Override public boolean is123() { return false; }
|
|
||||||
@Override final public boolean isDialer() { return true; }
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onOtherKey(int key) {
|
|
||||||
return !Key.isDecimalSeparator(key) && super.onOtherKey(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
@NonNull
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "Dialer";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
21
src/io/github/sspanak/tt9/ime/modes/ModePassthrough.java
Normal file
21
src/io/github/sspanak/tt9/ime/modes/ModePassthrough.java
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
package io.github.sspanak.tt9.ime.modes;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
|
// see: InputType.isDialer()
|
||||||
|
public class ModePassthrough extends InputMode {
|
||||||
|
ModePassthrough() {
|
||||||
|
reset();
|
||||||
|
allowedTextCases.add(CASE_LOWER);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override public int getId() { return MODE_PASSTHROUGH; }
|
||||||
|
@Override public int getSequenceLength() { return 0; }
|
||||||
|
@Override @NonNull public String toString() { return "Passthrough"; }
|
||||||
|
|
||||||
|
@Override public boolean isNumeric() { return true; }
|
||||||
|
@Override public boolean isPassthrough() { return true; }
|
||||||
|
|
||||||
|
public boolean onNumber(int number, boolean hold, int repeat) { return false; }
|
||||||
|
public boolean onOtherKey(int key) { return false; }
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue