1
0
Fork 0

added support all ENTER keys (fixes OK not working on Cat S22 and some other phones)

This commit is contained in:
sspanak 2023-02-06 11:38:59 +02:00 committed by Dimo Karaivanov
parent 49ecf259fd
commit b159e552e5
7 changed files with 80 additions and 58 deletions

View file

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

View file

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

View file

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

View file

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

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

View file

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

View file

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