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
|
||||
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
||||
if (shouldBeOff()) {
|
||||
return super.onKeyDown(keyCode, event);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Logger.d("onKeyDown", "Key: " + event + " repeat?: " + event.getRepeatCount() + " long-time: " + event.isLongPress());
|
||||
|
|
@ -133,26 +133,20 @@ abstract class KeyPadHandler extends InputMethodService {
|
|||
event.startTracking();
|
||||
}
|
||||
|
||||
if (
|
||||
Key.isNumber(keyCode)
|
||||
return Key.isNumber(keyCode)
|
||||
|| Key.isOK(keyCode)
|
||||
|| Key.isHotkey(settings, keyCode) || Key.isHotkey(settings, -keyCode)
|
||||
|| keyCode == KeyEvent.KEYCODE_STAR
|
||||
|| keyCode == KeyEvent.KEYCODE_POUND
|
||||
|| ((keyCode == KeyEvent.KEYCODE_DPAD_UP || keyCode == KeyEvent.KEYCODE_DPAD_DOWN) && shouldTrackUpDown())
|
||||
|| ((keyCode == KeyEvent.KEYCODE_DPAD_LEFT || keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) && shouldTrackLeftRight())
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return super.onKeyDown(keyCode, event);
|
||||
|| ((keyCode == KeyEvent.KEYCODE_DPAD_LEFT || keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) && shouldTrackLeftRight());
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
|
||||
if (shouldBeOff()) {
|
||||
return super.onKeyLongPress(keyCode, event);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Logger.d("onLongPress", "LONG PRESS: " + keyCode);
|
||||
|
|
@ -183,7 +177,7 @@ abstract class KeyPadHandler extends InputMethodService {
|
|||
}
|
||||
|
||||
ignoreNextKeyUp = 0;
|
||||
return super.onKeyLongPress(keyCode, event);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -195,7 +189,7 @@ abstract class KeyPadHandler extends InputMethodService {
|
|||
@Override
|
||||
public boolean onKeyUp(int keyCode, KeyEvent event) {
|
||||
if (shouldBeOff()) {
|
||||
return super.onKeyUp(keyCode, event);
|
||||
return false;
|
||||
}
|
||||
|
||||
// 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_RIGHT: return onRight(keyRepeatCounter > 0);
|
||||
case KeyEvent.KEYCODE_STAR:
|
||||
case KeyEvent.KEYCODE_POUND:
|
||||
if (onOtherKey(keyCode)) {
|
||||
return true;
|
||||
}
|
||||
case KeyEvent.KEYCODE_POUND: return onOtherKey(keyCode);
|
||||
}
|
||||
|
||||
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,
|
||||
// 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)
|
||||
if (mInputMode.isDialer() || !textField.isThereText()) {
|
||||
if (mInputMode.isPassthrough() || !textField.isThereText()) {
|
||||
Logger.d("onBackspace", "backspace ignored");
|
||||
mInputMode.reset();
|
||||
return false;
|
||||
|
|
@ -598,7 +598,7 @@ public class TraditionalT9 extends KeyPadHandler {
|
|||
|
||||
|
||||
private void nextInputMode() {
|
||||
if (mInputMode.isDialer()) {
|
||||
if (mInputMode.isPassthrough()) {
|
||||
return;
|
||||
} else if (allowedInputModes.size() == 1 && allowedInputModes.contains(InputMode.MODE_123)) {
|
||||
mInputMode = !mInputMode.is123() ? InputMode.getInstance(settings, mLanguage, InputMode.MODE_123) : mInputMode;
|
||||
|
|
@ -770,7 +770,7 @@ public class TraditionalT9 extends KeyPadHandler {
|
|||
*/
|
||||
protected void forceShowWindowIfHidden() {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P
|
||||
&& !mInputMode.isDialer()
|
||||
&& !mInputMode.isPassthrough()
|
||||
&& !isInputViewShown()
|
||||
) {
|
||||
requestShowSelf(InputMethodManager.SHOW_IMPLICIT);
|
||||
|
|
@ -780,12 +780,12 @@ public class TraditionalT9 extends KeyPadHandler {
|
|||
|
||||
@Override
|
||||
protected boolean shouldBeVisible() {
|
||||
return !mInputMode.isDialer() && isActive;
|
||||
return !mInputMode.isPassthrough() && isActive;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
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.
|
||||
// It only accepts 0-9, "#" and "*".
|
||||
if (inputType.isDialer()) {
|
||||
allowedModes.add(InputMode.MODE_DIALER);
|
||||
allowedModes.add(InputMode.MODE_PASSTHROUGH);
|
||||
return allowedModes;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ abstract public class InputMode {
|
|||
public static final int MODE_PREDICTIVE = 0;
|
||||
public static final int MODE_ABC = 1;
|
||||
public static final int MODE_123 = 2;
|
||||
public static final int MODE_DIALER = 4;
|
||||
public static final int MODE_PASSTHROUGH = 4;
|
||||
|
||||
// text case
|
||||
public static final int CASE_UNDEFINED = -1;
|
||||
|
|
@ -41,8 +41,8 @@ abstract public class InputMode {
|
|||
return new ModePredictive(settings, language);
|
||||
case MODE_ABC:
|
||||
return new ModeABC(settings, language);
|
||||
case MODE_DIALER:
|
||||
return new ModeDialer();
|
||||
case MODE_PASSTHROUGH:
|
||||
return new ModePassthrough();
|
||||
default:
|
||||
Logger.w("tt9/InputMode", "Defaulting to mode: " + Mode123.class.getName() + " for unknown InputMode: " + mode);
|
||||
case MODE_123:
|
||||
|
|
@ -80,7 +80,7 @@ abstract public class InputMode {
|
|||
// Mode identifiers
|
||||
public boolean isABC() { return false; }
|
||||
public boolean is123() { return false; }
|
||||
public boolean isDialer() { return false; }
|
||||
public boolean isPassthrough() { return false; }
|
||||
public boolean isNumeric() { return false; }
|
||||
|
||||
// Utility
|
||||
|
|
|
|||
|
|
@ -6,12 +6,12 @@ import androidx.annotation.NonNull;
|
|||
|
||||
import io.github.sspanak.tt9.ime.helpers.Key;
|
||||
|
||||
public class Mode123 extends InputMode {
|
||||
public int getId() { return MODE_123; }
|
||||
public class Mode123 extends ModePassthrough {
|
||||
@Override public int getId() { return MODE_123; }
|
||||
@Override @NonNull public String toString() { return "123"; }
|
||||
|
||||
Mode123() {
|
||||
allowedTextCases.add(CASE_LOWER);
|
||||
}
|
||||
@Override public final boolean is123() { return true; }
|
||||
@Override public boolean isPassthrough() { return false; }
|
||||
|
||||
@Override
|
||||
public boolean onNumber(int number, boolean hold, int repeat) {
|
||||
|
|
@ -30,14 +30,4 @@ public class Mode123 extends InputMode {
|
|||
|
||||
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