mirror of
https://github.com/Helium314/HeliBoard.git
synced 2025-04-22 23:29:10 +00:00
Implemented "SlidingKeyInput" to Numpad (#101)
This commit is contained in:
parent
ebd7e3fa24
commit
43fc92d974
2 changed files with 68 additions and 7 deletions
|
@ -26,6 +26,7 @@ import java.util.Arrays;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
import static org.dslul.openboard.inputmethod.keyboard.internal.KeyboardIconsSet.ICON_UNDEFINED;
|
import static org.dslul.openboard.inputmethod.keyboard.internal.KeyboardIconsSet.ICON_UNDEFINED;
|
||||||
|
import static org.dslul.openboard.inputmethod.latin.common.Constants.CODE_ALPHA_FROM_NUMPAD;
|
||||||
import static org.dslul.openboard.inputmethod.latin.common.Constants.CODE_OUTPUT_TEXT;
|
import static org.dslul.openboard.inputmethod.latin.common.Constants.CODE_OUTPUT_TEXT;
|
||||||
import static org.dslul.openboard.inputmethod.latin.common.Constants.CODE_SHIFT;
|
import static org.dslul.openboard.inputmethod.latin.common.Constants.CODE_SHIFT;
|
||||||
import static org.dslul.openboard.inputmethod.latin.common.Constants.CODE_SWITCH_ALPHA_SYMBOL;
|
import static org.dslul.openboard.inputmethod.latin.common.Constants.CODE_SWITCH_ALPHA_SYMBOL;
|
||||||
|
@ -518,7 +519,7 @@ public class Key implements Comparable<Key> {
|
||||||
}
|
}
|
||||||
|
|
||||||
public final boolean isModifier() {
|
public final boolean isModifier() {
|
||||||
return mCode == CODE_SHIFT || mCode == CODE_SWITCH_ALPHA_SYMBOL;
|
return mCode == CODE_SHIFT || mCode == CODE_SWITCH_ALPHA_SYMBOL || mCode == CODE_ALPHA_FROM_NUMPAD;
|
||||||
}
|
}
|
||||||
|
|
||||||
public final boolean isRepeatable() {
|
public final boolean isRepeatable() {
|
||||||
|
|
|
@ -65,8 +65,9 @@ public final class KeyboardState {
|
||||||
|
|
||||||
private final SwitchActions mSwitchActions;
|
private final SwitchActions mSwitchActions;
|
||||||
|
|
||||||
private final ShiftKeyState mShiftKeyState = new ShiftKeyState("Shift");
|
private ShiftKeyState mShiftKeyState = new ShiftKeyState("Shift");
|
||||||
private final ModifierKeyState mSymbolKeyState = new ModifierKeyState("Symbol");
|
private ModifierKeyState mSymbolKeyState = new ModifierKeyState("Symbol");
|
||||||
|
private ModifierKeyState mAlphaNumpadKeyState = new ModifierKeyState("AlphaNumpad");
|
||||||
private final AlphabetShiftState mAlphabetShiftState = new AlphabetShiftState();
|
private final AlphabetShiftState mAlphabetShiftState = new AlphabetShiftState();
|
||||||
|
|
||||||
// TODO: Merge {@link #mSwitchState}, {@link #mIsAlphabetMode}, {@link #mAlphabetShiftState},
|
// TODO: Merge {@link #mSwitchState}, {@link #mIsAlphabetMode}, {@link #mAlphabetShiftState},
|
||||||
|
@ -79,6 +80,8 @@ public final class KeyboardState {
|
||||||
private static final int SWITCH_STATE_MOMENTARY_SYMBOL_AND_MORE = 4;
|
private static final int SWITCH_STATE_MOMENTARY_SYMBOL_AND_MORE = 4;
|
||||||
private static final int SWITCH_STATE_MOMENTARY_ALPHA_SHIFT = 5;
|
private static final int SWITCH_STATE_MOMENTARY_ALPHA_SHIFT = 5;
|
||||||
private int mSwitchState = SWITCH_STATE_ALPHA;
|
private int mSwitchState = SWITCH_STATE_ALPHA;
|
||||||
|
private static final int SWITCH_STATE_NUMPAD = 6;
|
||||||
|
private static final int SWITCH_STATE_MOMENTARY_NUMPAD_AND_ALPHA = 7;
|
||||||
|
|
||||||
private static final int MODE_ALPHABET = 0;
|
private static final int MODE_ALPHABET = 0;
|
||||||
private static final int MODE_SYMBOLS = 1;
|
private static final int MODE_SYMBOLS = 1;
|
||||||
|
@ -287,6 +290,23 @@ public final class KeyboardState {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void toggleNumpadAndAlphabet(final int autoCapsFlags, final int recapitalizeMode) {
|
||||||
|
if (DEBUG_INTERNAL_ACTION) {
|
||||||
|
Log.d(TAG, "toggleNumpadAndAlphabet: "
|
||||||
|
+ stateToString(autoCapsFlags, recapitalizeMode));
|
||||||
|
}
|
||||||
|
if (mMode == MODE_NUMPAD) {
|
||||||
|
mPrevMainKeyboardWasShiftLocked = mAlphabetShiftState.isShiftLocked();
|
||||||
|
setAlphabetKeyboard(autoCapsFlags, recapitalizeMode);
|
||||||
|
if (mPrevMainKeyboardWasShiftLocked) {
|
||||||
|
setShiftLocked(true);
|
||||||
|
}
|
||||||
|
mPrevMainKeyboardWasShiftLocked = false;
|
||||||
|
} else {
|
||||||
|
setNumpadKeyboard();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: Remove this method. Come up with a more comprehensive way to reset the keyboard layout
|
// TODO: Remove this method. Come up with a more comprehensive way to reset the keyboard layout
|
||||||
// when a keyboard layout set doesn't get reloaded in LatinIME.onStartInputViewInternal().
|
// when a keyboard layout set doesn't get reloaded in LatinIME.onStartInputViewInternal().
|
||||||
private void resetKeyboardStateToAlphabet(final int autoCapsFlags, final int recapitalizeMode) {
|
private void resetKeyboardStateToAlphabet(final int autoCapsFlags, final int recapitalizeMode) {
|
||||||
|
@ -385,7 +405,7 @@ public final class KeyboardState {
|
||||||
mPrevMainKeyboardWasShiftLocked = mAlphabetShiftState.isShiftLocked();
|
mPrevMainKeyboardWasShiftLocked = mAlphabetShiftState.isShiftLocked();
|
||||||
mAlphabetShiftState.setShiftLocked(false);
|
mAlphabetShiftState.setShiftLocked(false);
|
||||||
mSwitchActions.setNumpadKeyboard();
|
mSwitchActions.setNumpadKeyboard();
|
||||||
|
mSwitchState = SWITCH_STATE_NUMPAD;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setOneHandedModeEnabled(boolean enabled) {
|
private void setOneHandedModeEnabled(boolean enabled) {
|
||||||
|
@ -420,6 +440,8 @@ public final class KeyboardState {
|
||||||
// Nothing to do here. See {@link #onReleaseKey(int,boolean)}.
|
// Nothing to do here. See {@link #onReleaseKey(int,boolean)}.
|
||||||
} else if (code == Constants.CODE_SWITCH_ALPHA_SYMBOL) {
|
} else if (code == Constants.CODE_SWITCH_ALPHA_SYMBOL) {
|
||||||
onPressSymbol(autoCapsFlags, recapitalizeMode);
|
onPressSymbol(autoCapsFlags, recapitalizeMode);
|
||||||
|
} else if (code == Constants.CODE_ALPHA_FROM_NUMPAD) {
|
||||||
|
onPressAlphaNumpad(autoCapsFlags, recapitalizeMode);
|
||||||
} else {
|
} else {
|
||||||
mShiftKeyState.onOtherKeyPressed();
|
mShiftKeyState.onOtherKeyPressed();
|
||||||
mSymbolKeyState.onOtherKeyPressed();
|
mSymbolKeyState.onOtherKeyPressed();
|
||||||
|
@ -455,6 +477,8 @@ public final class KeyboardState {
|
||||||
setShiftLocked(!mAlphabetShiftState.isShiftLocked());
|
setShiftLocked(!mAlphabetShiftState.isShiftLocked());
|
||||||
} else if (code == Constants.CODE_SWITCH_ALPHA_SYMBOL) {
|
} else if (code == Constants.CODE_SWITCH_ALPHA_SYMBOL) {
|
||||||
onReleaseSymbol(withSliding, autoCapsFlags, recapitalizeMode);
|
onReleaseSymbol(withSliding, autoCapsFlags, recapitalizeMode);
|
||||||
|
} else if (code == Constants.CODE_ALPHA_FROM_NUMPAD) {
|
||||||
|
onReleaseAlphaNumpad(withSliding, autoCapsFlags, recapitalizeMode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -480,6 +504,29 @@ public final class KeyboardState {
|
||||||
mSymbolKeyState.onRelease();
|
mSymbolKeyState.onRelease();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void onPressAlphaNumpad(final int autoCapsFlags,
|
||||||
|
final int recapitalizeMode) {
|
||||||
|
toggleNumpadAndAlphabet(autoCapsFlags, recapitalizeMode);
|
||||||
|
mAlphaNumpadKeyState.onPress();
|
||||||
|
mSwitchState = SWITCH_STATE_MOMENTARY_NUMPAD_AND_ALPHA;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onReleaseAlphaNumpad(final boolean withSliding, final int autoCapsFlags,
|
||||||
|
final int recapitalizeMode) {
|
||||||
|
if (mAlphaNumpadKeyState.isChording()) {
|
||||||
|
// Switch back to the previous keyboard mode if the user chords the mode change key and
|
||||||
|
// another key, then releases the mode change key.
|
||||||
|
toggleNumpadAndAlphabet(autoCapsFlags, recapitalizeMode);
|
||||||
|
} else if (!withSliding) {
|
||||||
|
// If the mode change key is being released without sliding, we should remember
|
||||||
|
// caps lock mode and reset alphabet shift state.
|
||||||
|
mPrevMainKeyboardWasShiftLocked = mAlphabetShiftState.isShiftLocked();
|
||||||
|
mAlphabetShiftState.setShiftLocked(false);
|
||||||
|
|
||||||
|
}
|
||||||
|
mAlphaNumpadKeyState.onRelease();
|
||||||
|
}
|
||||||
|
|
||||||
public void onUpdateShiftState(final int autoCapsFlags, final int recapitalizeMode) {
|
public void onUpdateShiftState(final int autoCapsFlags, final int recapitalizeMode) {
|
||||||
if (DEBUG_EVENT) {
|
if (DEBUG_EVENT) {
|
||||||
Log.d(TAG, "onUpdateShiftState: " + stateToString(autoCapsFlags, recapitalizeMode));
|
Log.d(TAG, "onUpdateShiftState: " + stateToString(autoCapsFlags, recapitalizeMode));
|
||||||
|
@ -663,6 +710,9 @@ public final class KeyboardState {
|
||||||
case SWITCH_STATE_MOMENTARY_ALPHA_SHIFT:
|
case SWITCH_STATE_MOMENTARY_ALPHA_SHIFT:
|
||||||
setAlphabetKeyboard(autoCapsFlags, recapitalizeMode);
|
setAlphabetKeyboard(autoCapsFlags, recapitalizeMode);
|
||||||
break;
|
break;
|
||||||
|
case SWITCH_STATE_MOMENTARY_NUMPAD_AND_ALPHA:
|
||||||
|
toggleNumpadAndAlphabet(autoCapsFlags, recapitalizeMode);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -688,6 +738,16 @@ public final class KeyboardState {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case SWITCH_STATE_MOMENTARY_NUMPAD_AND_ALPHA:
|
||||||
|
if (code == Constants.CODE_ALPHA_FROM_NUMPAD) {
|
||||||
|
// Detected only the mode change key has been pressed, and then released.
|
||||||
|
if (mMode == MODE_NUMPAD) {
|
||||||
|
mSwitchState = SWITCH_STATE_NUMPAD;
|
||||||
|
} else {
|
||||||
|
mSwitchState = SWITCH_STATE_ALPHA;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
case SWITCH_STATE_MOMENTARY_SYMBOL_AND_MORE:
|
case SWITCH_STATE_MOMENTARY_SYMBOL_AND_MORE:
|
||||||
if (code == Constants.CODE_SHIFT) {
|
if (code == Constants.CODE_SHIFT) {
|
||||||
// Detected only the shift key has been pressed on symbol layout, and then
|
// Detected only the shift key has been pressed on symbol layout, and then
|
||||||
|
@ -702,7 +762,7 @@ public final class KeyboardState {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SWITCH_STATE_SYMBOL_BEGIN:
|
case SWITCH_STATE_SYMBOL_BEGIN:
|
||||||
if (mMode == MODE_EMOJI || mMode == MODE_CLIPBOARD || mMode == MODE_NUMPAD) {
|
if (mMode == MODE_EMOJI || mMode == MODE_CLIPBOARD) {
|
||||||
// When in the Emoji keyboard or clipboard one, we don't want to switch back to the main layout even
|
// When in the Emoji keyboard or clipboard one, we don't want to switch back to the main layout even
|
||||||
// after the user hits an emoji letter followed by an enter or a space.
|
// after the user hits an emoji letter followed by an enter or a space.
|
||||||
break;
|
break;
|
||||||
|
@ -745,8 +805,6 @@ public final class KeyboardState {
|
||||||
setAlphabetKeyboard(autoCapsFlags, recapitalizeMode);
|
setAlphabetKeyboard(autoCapsFlags, recapitalizeMode);
|
||||||
} else if (code == Constants.CODE_NUMPAD) {
|
} else if (code == Constants.CODE_NUMPAD) {
|
||||||
setNumpadKeyboard();
|
setNumpadKeyboard();
|
||||||
} else if (code == Constants.CODE_ALPHA_FROM_NUMPAD) {
|
|
||||||
setAlphabetKeyboard(autoCapsFlags, recapitalizeMode);
|
|
||||||
} else if (code == Constants.CODE_SYMBOL_FROM_NUMPAD) {
|
} else if (code == Constants.CODE_SYMBOL_FROM_NUMPAD) {
|
||||||
setSymbolsKeyboard();
|
setSymbolsKeyboard();
|
||||||
} else if (code == Constants.CODE_START_ONE_HANDED_MODE) {
|
} else if (code == Constants.CODE_START_ONE_HANDED_MODE) {
|
||||||
|
@ -775,6 +833,8 @@ public final class KeyboardState {
|
||||||
case SWITCH_STATE_MOMENTARY_ALPHA_AND_SYMBOL: return "MOMENTARY-ALPHA-SYMBOL";
|
case SWITCH_STATE_MOMENTARY_ALPHA_AND_SYMBOL: return "MOMENTARY-ALPHA-SYMBOL";
|
||||||
case SWITCH_STATE_MOMENTARY_SYMBOL_AND_MORE: return "MOMENTARY-SYMBOL-MORE";
|
case SWITCH_STATE_MOMENTARY_SYMBOL_AND_MORE: return "MOMENTARY-SYMBOL-MORE";
|
||||||
case SWITCH_STATE_MOMENTARY_ALPHA_SHIFT: return "MOMENTARY-ALPHA_SHIFT";
|
case SWITCH_STATE_MOMENTARY_ALPHA_SHIFT: return "MOMENTARY-ALPHA_SHIFT";
|
||||||
|
case SWITCH_STATE_NUMPAD: return "NUMPAD";
|
||||||
|
case SWITCH_STATE_MOMENTARY_NUMPAD_AND_ALPHA: return "MOMENTARY-NUMPAD-ALPHA";
|
||||||
default: return null;
|
default: return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue