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

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

View file

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

View file

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

View file

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

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