1
0
Fork 0

fixed 123 mode not working on some Kyocera and LG phones... hopefully... (#274)

This commit is contained in:
Dimo Karaivanov 2023-06-05 16:22:17 +03:00 committed by GitHub
parent ada5b48b9c
commit db53e740f4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 44 additions and 65 deletions

View file

@ -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;
}

View file

@ -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();
}
}

View file

@ -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;
}

View file

@ -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

View file

@ -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";
}
}

View file

@ -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";
}
}

View 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; }
}