use less specific key codes

This commit is contained in:
Helium314 2024-03-02 18:52:55 +01:00
parent b30ac99b09
commit 7b0ee924ae
13 changed files with 87 additions and 136 deletions

View file

@ -57,7 +57,7 @@ internal class KeyCodeDescriptionMapper private constructor() {
*/ */
fun getDescriptionForKey(context: Context, keyboard: Keyboard?, key: Key, shouldObscure: Boolean): String? { fun getDescriptionForKey(context: Context, keyboard: Keyboard?, key: Key, shouldObscure: Boolean): String? {
val code = key.code val code = key.code
if (code == Constants.CODE_SWITCH_ALPHA_SYMBOL) { if (code == Constants.CODE_SWITCH_ALPHA_SYMBOL || code == Constants.CODE_SWITCH_SYMBOL || code == Constants.CODE_SWITCH_ALPHA) {
val description = getDescriptionForSwitchAlphaSymbol(context, keyboard) val description = getDescriptionForSwitchAlphaSymbol(context, keyboard)
if (description != null) { if (description != null) {
return description return description

View file

@ -26,10 +26,11 @@ import java.util.Arrays;
import java.util.Locale; import java.util.Locale;
import static helium314.keyboard.keyboard.internal.KeyboardIconsSet.ICON_UNDEFINED; import static helium314.keyboard.keyboard.internal.KeyboardIconsSet.ICON_UNDEFINED;
import static helium314.keyboard.latin.common.Constants.CODE_ALPHA_FROM_NUMPAD;
import static helium314.keyboard.latin.common.Constants.CODE_OUTPUT_TEXT; import static helium314.keyboard.latin.common.Constants.CODE_OUTPUT_TEXT;
import static helium314.keyboard.latin.common.Constants.CODE_SHIFT; import static helium314.keyboard.latin.common.Constants.CODE_SHIFT;
import static helium314.keyboard.latin.common.Constants.CODE_SWITCH_ALPHA;
import static helium314.keyboard.latin.common.Constants.CODE_SWITCH_ALPHA_SYMBOL; import static helium314.keyboard.latin.common.Constants.CODE_SWITCH_ALPHA_SYMBOL;
import static helium314.keyboard.latin.common.Constants.CODE_SWITCH_SYMBOL;
import static helium314.keyboard.latin.common.Constants.CODE_UNSPECIFIED; import static helium314.keyboard.latin.common.Constants.CODE_UNSPECIFIED;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
@ -517,7 +518,7 @@ public class Key implements Comparable<Key> {
} }
public final boolean isModifier() { public final boolean isModifier() {
return mCode == CODE_SHIFT || mCode == CODE_SWITCH_ALPHA_SYMBOL || mCode == CODE_ALPHA_FROM_NUMPAD; return mCode == CODE_SHIFT || mCode == CODE_SWITCH_ALPHA_SYMBOL || mCode == CODE_SWITCH_ALPHA || mCode == CODE_SWITCH_SYMBOL;
} }
public final boolean isRepeatable() { public final boolean isRepeatable() {

View file

@ -1114,7 +1114,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element,
} }
} }
if (code == Constants.CODE_SWITCH_ALPHA_SYMBOL) { if (code == Constants.CODE_SWITCH_ALPHA_SYMBOL) {
sListener.onCodeInput(Constants.CODE_NUMPAD, Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE, false); sListener.onCodeInput(Constants.CODE_SWITCH_NUMPAD, Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE, false);
return; return;
} }

View file

@ -102,7 +102,7 @@ class ClipboardHistoryView @JvmOverloads constructor(
} }
alphabetKey = findViewById(R.id.key_alphabet) alphabetKey = findViewById(R.id.key_alphabet)
alphabetKey.setBackgroundResource(functionalKeyBackgroundId) alphabetKey.setBackgroundResource(functionalKeyBackgroundId)
alphabetKey.tag = Constants.CODE_ALPHA_FROM_CLIPBOARD alphabetKey.tag = Constants.CODE_SWITCH_ALPHA
alphabetKey.setOnTouchListener(this) alphabetKey.setOnTouchListener(this)
alphabetKey.setOnClickListener(this) alphabetKey.setOnClickListener(this)
deleteKey = findViewById(R.id.key_delete) deleteKey = findViewById(R.id.key_delete)

View file

@ -237,7 +237,7 @@ public final class EmojiPalettesView extends LinearLayout
// {@link #startEmojiPalettes(String,int,float,Typeface)}. // {@link #startEmojiPalettes(String,int,float,Typeface)}.
mAlphabetKeyLeft = findViewById(R.id.key_alphabet); mAlphabetKeyLeft = findViewById(R.id.key_alphabet);
mAlphabetKeyLeft.setBackgroundResource(mFunctionalKeyBackgroundId); mAlphabetKeyLeft.setBackgroundResource(mFunctionalKeyBackgroundId);
mAlphabetKeyLeft.setTag(Constants.CODE_ALPHA_FROM_EMOJI); mAlphabetKeyLeft.setTag(Constants.CODE_SWITCH_ALPHA);
mAlphabetKeyLeft.setOnTouchListener(this); mAlphabetKeyLeft.setOnTouchListener(this);
mAlphabetKeyLeft.setOnClickListener(this); mAlphabetKeyLeft.setOnClickListener(this);
mSpacebar = findViewById(R.id.key_space); mSpacebar = findViewById(R.id.key_space);

View file

@ -207,6 +207,7 @@ open class KeyboardBuilder<KP : KeyboardParams>(protected val mContext: Context,
} }
// reduce width of symbol and action key if in the row, and add this width to space to keep other key size constant // reduce width of symbol and action key if in the row, and add this width to space to keep other key size constant
// todo: this assumes fixed layout for symbols keys, which will change soon!
private fun reduceSymbolAndActionKeyWidth(row: ArrayList<KeyParams>) { private fun reduceSymbolAndActionKeyWidth(row: ArrayList<KeyParams>) {
val spaceKey = row.first { it.mCode == Constants.CODE_SPACE } val spaceKey = row.first { it.mCode == Constants.CODE_SPACE }
val symbolKey = row.firstOrNull { it.mCode == Constants.CODE_SWITCH_ALPHA_SYMBOL } val symbolKey = row.firstOrNull { it.mCode == Constants.CODE_SWITCH_ALPHA_SYMBOL }

View file

@ -32,6 +32,8 @@ public final class KeyboardCodesSet {
"key_shift", "key_shift",
"key_capslock", "key_capslock",
"key_switch_alpha_symbol", "key_switch_alpha_symbol",
"key_switch_alpha",
"key_switch_symbol",
"key_output_text", "key_output_text",
"key_delete", "key_delete",
"key_settings", "key_settings",
@ -41,13 +43,9 @@ public final class KeyboardCodesSet {
"key_shift_enter", "key_shift_enter",
"key_language_switch", "key_language_switch",
"key_emoji", "key_emoji",
"key_alpha_from_emoji",
"key_unspecified", "key_unspecified",
"key_clipboard", "key_clipboard",
"key_alpha_from_clipboard",
"key_numpad", "key_numpad",
"key_alphaNumpad",
"key_symbolNumpad",
"key_start_onehanded", "key_start_onehanded",
"key_stop_onehanded", "key_stop_onehanded",
"key_switch_onehanded" "key_switch_onehanded"
@ -60,6 +58,8 @@ public final class KeyboardCodesSet {
Constants.CODE_SHIFT, Constants.CODE_SHIFT,
Constants.CODE_CAPSLOCK, Constants.CODE_CAPSLOCK,
Constants.CODE_SWITCH_ALPHA_SYMBOL, Constants.CODE_SWITCH_ALPHA_SYMBOL,
Constants.CODE_SWITCH_ALPHA,
Constants.CODE_SWITCH_SYMBOL,
Constants.CODE_OUTPUT_TEXT, Constants.CODE_OUTPUT_TEXT,
Constants.CODE_DELETE, Constants.CODE_DELETE,
Constants.CODE_SETTINGS, Constants.CODE_SETTINGS,
@ -69,13 +69,9 @@ public final class KeyboardCodesSet {
Constants.CODE_SHIFT_ENTER, Constants.CODE_SHIFT_ENTER,
Constants.CODE_LANGUAGE_SWITCH, Constants.CODE_LANGUAGE_SWITCH,
Constants.CODE_EMOJI, Constants.CODE_EMOJI,
Constants.CODE_ALPHA_FROM_EMOJI,
Constants.CODE_UNSPECIFIED, Constants.CODE_UNSPECIFIED,
Constants.CODE_CLIPBOARD, Constants.CODE_CLIPBOARD,
Constants.CODE_ALPHA_FROM_CLIPBOARD, Constants.CODE_SWITCH_NUMPAD,
Constants.CODE_NUMPAD,
Constants.CODE_ALPHA_FROM_NUMPAD,
Constants.CODE_SYMBOL_FROM_NUMPAD,
Constants.CODE_START_ONE_HANDED_MODE, Constants.CODE_START_ONE_HANDED_MODE,
Constants.CODE_STOP_ONE_HANDED_MODE, Constants.CODE_STOP_ONE_HANDED_MODE,
Constants.CODE_SWITCH_ONE_HANDED_MODE Constants.CODE_SWITCH_ONE_HANDED_MODE

View file

@ -67,7 +67,6 @@ public final class KeyboardState {
private final ShiftKeyState mShiftKeyState = new ShiftKeyState("Shift"); private final ShiftKeyState mShiftKeyState = new ShiftKeyState("Shift");
private final ModifierKeyState mSymbolKeyState = new ModifierKeyState("Symbol"); private final ModifierKeyState mSymbolKeyState = new ModifierKeyState("Symbol");
private final 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},
@ -76,12 +75,12 @@ public final class KeyboardState {
private static final int SWITCH_STATE_ALPHA = 0; private static final int SWITCH_STATE_ALPHA = 0;
private static final int SWITCH_STATE_SYMBOL_BEGIN = 1; private static final int SWITCH_STATE_SYMBOL_BEGIN = 1;
private static final int SWITCH_STATE_SYMBOL = 2; private static final int SWITCH_STATE_SYMBOL = 2;
private static final int SWITCH_STATE_MOMENTARY_ALPHA_AND_SYMBOL = 3; private static final int SWITCH_STATE_NUMPAD = 3;
private static final int SWITCH_STATE_MOMENTARY_SYMBOL_AND_MORE = 4; private static final int SWITCH_STATE_MOMENTARY_ALPHA_AND_SYMBOL = 4;
private static final int SWITCH_STATE_MOMENTARY_ALPHA_SHIFT = 5; private static final int SWITCH_STATE_MOMENTARY_SYMBOL_AND_MORE = 5;
private static final int SWITCH_STATE_MOMENTARY_ALPHA_SHIFT = 6;
private static final int SWITCH_STATE_MOMENTARY_FROM_NUMPAD = 7;
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;
@ -290,23 +289,6 @@ 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) {
@ -439,9 +421,13 @@ public final class KeyboardState {
} else if (code == Constants.CODE_CAPSLOCK) { } else if (code == Constants.CODE_CAPSLOCK) {
// 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); onPressAlphaSymbol(autoCapsFlags, recapitalizeMode);
} else if (code == Constants.CODE_ALPHA_FROM_NUMPAD) { } else if (code == Constants.CODE_SWITCH_SYMBOL) {
onPressAlphaNumpad(autoCapsFlags, recapitalizeMode); // don't start sliding, causes issues with fully customizable layouts
// (also does not allow chording, but can be fixed later)
} else if (code == Constants.CODE_SWITCH_ALPHA) {
// don't start sliding, causes issues with fully customizable layouts
// (also does not allow chording, but can be fixed later)
} else { } else {
mShiftKeyState.onOtherKeyPressed(); mShiftKeyState.onOtherKeyPressed();
mSymbolKeyState.onOtherKeyPressed(); mSymbolKeyState.onOtherKeyPressed();
@ -476,21 +462,21 @@ public final class KeyboardState {
} else if (code == Constants.CODE_CAPSLOCK) { } else if (code == Constants.CODE_CAPSLOCK) {
setShiftLocked(!mAlphabetShiftState.isShiftLocked()); setShiftLocked(!mAlphabetShiftState.isShiftLocked());
} else if (code == Constants.CODE_SWITCH_ALPHA_SYMBOL) { } else if (code == Constants.CODE_SWITCH_ALPHA_SYMBOL) {
onReleaseAlphaSymbol(withSliding, autoCapsFlags, recapitalizeMode);
} else if (code == Constants.CODE_SWITCH_SYMBOL) {
onReleaseSymbol(withSliding, autoCapsFlags, recapitalizeMode); onReleaseSymbol(withSliding, autoCapsFlags, recapitalizeMode);
} else if (code == Constants.CODE_ALPHA_FROM_NUMPAD) { } else if (code == Constants.CODE_SWITCH_ALPHA) {
onReleaseAlphaNumpad(withSliding, autoCapsFlags, recapitalizeMode); onReleaseAlpha(withSliding, autoCapsFlags, recapitalizeMode);
} }
} }
private void onPressSymbol(final int autoCapsFlags, private void onPressAlphaSymbol(final int autoCapsFlags, final int recapitalizeMode) {
final int recapitalizeMode) {
toggleAlphabetAndSymbols(autoCapsFlags, recapitalizeMode); toggleAlphabetAndSymbols(autoCapsFlags, recapitalizeMode);
mSymbolKeyState.onPress(); mSymbolKeyState.onPress();
mSwitchState = SWITCH_STATE_MOMENTARY_ALPHA_AND_SYMBOL; mSwitchState = SWITCH_STATE_MOMENTARY_ALPHA_AND_SYMBOL;
} }
private void onReleaseSymbol(final boolean withSliding, final int autoCapsFlags, private void onReleaseAlphaSymbol(final boolean withSliding, final int autoCapsFlags, final int recapitalizeMode) {
final int recapitalizeMode) {
if (mSymbolKeyState.isChording()) { if (mSymbolKeyState.isChording()) {
// Switch back to the previous keyboard mode if the user chords the mode change key and // Switch back to the previous keyboard mode if the user chords the mode change key and
// another key, then releases the mode change key. // another key, then releases the mode change key.
@ -504,27 +490,18 @@ public final class KeyboardState {
mSymbolKeyState.onRelease(); mSymbolKeyState.onRelease();
} }
private void onPressAlphaNumpad(final int autoCapsFlags, private void onReleaseSymbol(final boolean withSliding, final int autoCapsFlags, final int recapitalizeMode) {
final int recapitalizeMode) { final int oldMode = mMode;
toggleNumpadAndAlphabet(autoCapsFlags, recapitalizeMode); setSymbolsKeyboard();
mAlphaNumpadKeyState.onPress(); if (withSliding && oldMode == MODE_NUMPAD)
mSwitchState = SWITCH_STATE_MOMENTARY_NUMPAD_AND_ALPHA; mSwitchState = SWITCH_STATE_MOMENTARY_FROM_NUMPAD;
} }
private void onReleaseAlphaNumpad(final boolean withSliding, final int autoCapsFlags, private void onReleaseAlpha(final boolean withSliding, final int autoCapsFlags, final int recapitalizeMode) {
final int recapitalizeMode) { final int oldMode = mMode;
if (mAlphaNumpadKeyState.isChording()) { setAlphabetKeyboard(autoCapsFlags, recapitalizeMode);
// Switch back to the previous keyboard mode if the user chords the mode change key and if (withSliding && oldMode == MODE_NUMPAD)
// another key, then releases the mode change key. mSwitchState = SWITCH_STATE_MOMENTARY_FROM_NUMPAD;
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) {
@ -701,18 +678,10 @@ public final class KeyboardState {
} }
// Switch back to the previous keyboard mode if the user cancels sliding input. // Switch back to the previous keyboard mode if the user cancels sliding input.
switch (mSwitchState) { switch (mSwitchState) {
case SWITCH_STATE_MOMENTARY_ALPHA_AND_SYMBOL: case SWITCH_STATE_MOMENTARY_ALPHA_AND_SYMBOL -> toggleAlphabetAndSymbols(autoCapsFlags, recapitalizeMode);
toggleAlphabetAndSymbols(autoCapsFlags, recapitalizeMode); case SWITCH_STATE_MOMENTARY_SYMBOL_AND_MORE -> toggleShiftInSymbols();
break; case SWITCH_STATE_MOMENTARY_ALPHA_SHIFT -> setAlphabetKeyboard(autoCapsFlags, recapitalizeMode);
case SWITCH_STATE_MOMENTARY_SYMBOL_AND_MORE: case SWITCH_STATE_MOMENTARY_FROM_NUMPAD -> setNumpadKeyboard();
toggleShiftInSymbols();
break;
case SWITCH_STATE_MOMENTARY_ALPHA_SHIFT:
setAlphabetKeyboard(autoCapsFlags, recapitalizeMode);
break;
case SWITCH_STATE_MOMENTARY_NUMPAD_AND_ALPHA:
toggleNumpadAndAlphabet(autoCapsFlags, recapitalizeMode);
break;
} }
} }
@ -738,16 +707,6 @@ 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
@ -793,7 +752,7 @@ public final class KeyboardState {
updateAlphabetShiftState(autoCapsFlags, recapitalizeMode); updateAlphabetShiftState(autoCapsFlags, recapitalizeMode);
} else if (code == Constants.CODE_EMOJI) { } else if (code == Constants.CODE_EMOJI) {
setEmojiKeyboard(); setEmojiKeyboard();
} else if (code == Constants.CODE_ALPHA_FROM_EMOJI) { } else if (code == Constants.CODE_SWITCH_ALPHA) {
setAlphabetKeyboard(autoCapsFlags, recapitalizeMode); setAlphabetKeyboard(autoCapsFlags, recapitalizeMode);
} else if (code == Constants.CODE_CLIPBOARD) { } else if (code == Constants.CODE_CLIPBOARD) {
// Note: Printing clipboard content is handled in // Note: Printing clipboard content is handled in
@ -801,11 +760,9 @@ public final class KeyboardState {
if (Settings.getInstance().getCurrent().mClipboardHistoryEnabled) { if (Settings.getInstance().getCurrent().mClipboardHistoryEnabled) {
setClipboardKeyboard(); setClipboardKeyboard();
} }
} else if (code == Constants.CODE_ALPHA_FROM_CLIPBOARD) { } else if (code == Constants.CODE_SWITCH_NUMPAD) {
setAlphabetKeyboard(autoCapsFlags, recapitalizeMode);
} else if (code == Constants.CODE_NUMPAD) {
setNumpadKeyboard(); setNumpadKeyboard();
} else if (code == Constants.CODE_SYMBOL_FROM_NUMPAD) { } else if (code == Constants.CODE_SWITCH_SYMBOL) {
setSymbolsKeyboard(); setSymbolsKeyboard();
} else if (code == Constants.CODE_START_ONE_HANDED_MODE) { } else if (code == Constants.CODE_START_ONE_HANDED_MODE) {
setOneHandedModeEnabled(true); setOneHandedModeEnabled(true);
@ -826,17 +783,17 @@ public final class KeyboardState {
} }
private static String switchStateToString(final int switchState) { private static String switchStateToString(final int switchState) {
switch (switchState) { return switch (switchState) {
case SWITCH_STATE_ALPHA: return "ALPHA"; case SWITCH_STATE_ALPHA -> "ALPHA";
case SWITCH_STATE_SYMBOL_BEGIN: return "SYMBOL-BEGIN"; case SWITCH_STATE_SYMBOL_BEGIN -> "SYMBOL-BEGIN";
case SWITCH_STATE_SYMBOL: return "SYMBOL"; case SWITCH_STATE_SYMBOL -> "SYMBOL";
case SWITCH_STATE_MOMENTARY_ALPHA_AND_SYMBOL: return "MOMENTARY-ALPHA-SYMBOL"; case SWITCH_STATE_MOMENTARY_ALPHA_AND_SYMBOL -> "MOMENTARY-ALPHA-SYMBOL";
case SWITCH_STATE_MOMENTARY_SYMBOL_AND_MORE: return "MOMENTARY-SYMBOL-MORE"; case SWITCH_STATE_MOMENTARY_SYMBOL_AND_MORE -> "MOMENTARY-SYMBOL-MORE";
case SWITCH_STATE_MOMENTARY_ALPHA_SHIFT: return "MOMENTARY-ALPHA_SHIFT"; case SWITCH_STATE_MOMENTARY_ALPHA_SHIFT -> "MOMENTARY-ALPHA_SHIFT";
case SWITCH_STATE_NUMPAD: return "NUMPAD"; case SWITCH_STATE_NUMPAD -> "NUMPAD";
case SWITCH_STATE_MOMENTARY_NUMPAD_AND_ALPHA: return "MOMENTARY-NUMPAD-ALPHA"; case SWITCH_STATE_MOMENTARY_FROM_NUMPAD -> "MOMENTARY-FROM-NUMPAD";
default: return null; default -> null;
} };
} }
@Override @Override

View file

@ -413,9 +413,18 @@ abstract class KeyboardParser(private val params: KeyboardParams, private val co
// for comma and period: label will override default, popupKeys will be appended // for comma and period: label will override default, popupKeys will be appended
val width = relativeWidth ?: params.mDefaultRelativeKeyWidth val width = relativeWidth ?: params.mDefaultRelativeKeyWidth
return when (key) { return when (key) {
FunctionalKey.SYMBOL_ALPHA -> KeyParams(
if (params.mId.isAlphabetKeyboard) getToSymbolLabel() else params.mLocaleKeyboardInfos.labelAlphabet,
Constants.CODE_SWITCH_ALPHA_SYMBOL,
params,
width,
Key.LABEL_FLAGS_PRESERVE_CASE or Key.LABEL_FLAGS_FOLLOW_FUNCTIONAL_TEXT_COLOR,
Key.BACKGROUND_TYPE_FUNCTIONAL,
null
)
FunctionalKey.SYMBOL -> KeyParams( FunctionalKey.SYMBOL -> KeyParams(
getToSymbolLabel(), getToSymbolLabel(),
getToSymbolCode(), Constants.CODE_SWITCH_SYMBOL,
params, params,
width, width,
Key.LABEL_FLAGS_PRESERVE_CASE or Key.LABEL_FLAGS_FOLLOW_FUNCTIONAL_TEXT_COLOR, Key.LABEL_FLAGS_PRESERVE_CASE or Key.LABEL_FLAGS_FOLLOW_FUNCTIONAL_TEXT_COLOR,
@ -424,7 +433,7 @@ abstract class KeyboardParser(private val params: KeyboardParams, private val co
) )
FunctionalKey.ALPHA -> KeyParams( FunctionalKey.ALPHA -> KeyParams(
params.mLocaleKeyboardInfos.labelAlphabet, params.mLocaleKeyboardInfos.labelAlphabet,
getToAlphaCode(), Constants.CODE_SWITCH_ALPHA,
params, params,
width, width,
Key.LABEL_FLAGS_PRESERVE_CASE or Key.LABEL_FLAGS_FOLLOW_FUNCTIONAL_TEXT_COLOR, Key.LABEL_FLAGS_PRESERVE_CASE or Key.LABEL_FLAGS_FOLLOW_FUNCTIONAL_TEXT_COLOR,
@ -660,16 +669,6 @@ abstract class KeyboardParser(private val params: KeyboardParams, private val co
params.mLocaleKeyboardInfos.labelAlphabet params.mLocaleKeyboardInfos.labelAlphabet
else params.mLocaleKeyboardInfos.labelSymbol else params.mLocaleKeyboardInfos.labelSymbol
private fun getToSymbolCode() =
if (params.mId.mElementId == KeyboardId.ELEMENT_NUMPAD)
Constants.CODE_SYMBOL_FROM_NUMPAD
else Constants.CODE_SWITCH_ALPHA_SYMBOL
private fun getToAlphaCode() =
if (params.mId.mElementId == KeyboardId.ELEMENT_NUMPAD)
Constants.CODE_ALPHA_FROM_NUMPAD
else Constants.CODE_SWITCH_ALPHA_SYMBOL
private fun getShiftLabel(): String { private fun getShiftLabel(): String {
val elementId = params.mId.mElementId val elementId = params.mId.mElementId
if (elementId == KeyboardId.ELEMENT_SYMBOLS_SHIFTED) if (elementId == KeyboardId.ELEMENT_SYMBOLS_SHIFTED)
@ -820,7 +819,7 @@ abstract class KeyboardParser(private val params: KeyboardParams, private val co
} }
protected enum class FunctionalKey { protected enum class FunctionalKey {
EMOJI, LANGUAGE_SWITCH, COM, EMOJI_COM, ACTION, DELETE, PERIOD, COMMA, SPACE, SHIFT, NUMPAD, SYMBOL, ALPHA, ZWNJ EMOJI, LANGUAGE_SWITCH, COM, EMOJI_COM, ACTION, DELETE, PERIOD, COMMA, SPACE, SHIFT, NUMPAD, SYMBOL, ALPHA, SYMBOL_ALPHA, ZWNJ
} }
} }

View file

@ -196,6 +196,7 @@ public final class Constants {
* These should be aligned with constants in * These should be aligned with constants in
* {@link helium314.keyboard.keyboard.internal.KeyboardCodesSet}. * {@link helium314.keyboard.keyboard.internal.KeyboardCodesSet}.
*/ */
// todo: switch to using KeyCode for internal values? for FlorisBoard modifier key(code) compatibility
public static final int CODE_SHIFT = -1; public static final int CODE_SHIFT = -1;
public static final int CODE_CAPSLOCK = -2; public static final int CODE_CAPSLOCK = -2;
public static final int CODE_SWITCH_ALPHA_SYMBOL = -3; public static final int CODE_SWITCH_ALPHA_SYMBOL = -3;
@ -210,14 +211,12 @@ public final class Constants {
public static final int CODE_CLIPBOARD = -12; public static final int CODE_CLIPBOARD = -12;
public static final int CODE_SHIFT_ENTER = -13; public static final int CODE_SHIFT_ENTER = -13;
public static final int CODE_SYMBOL_SHIFT = -14; public static final int CODE_SYMBOL_SHIFT = -14;
public static final int CODE_ALPHA_FROM_EMOJI = -15;
public static final int CODE_ALPHA_FROM_CLIPBOARD = -16;
public static final int CODE_START_ONE_HANDED_MODE = -17; public static final int CODE_START_ONE_HANDED_MODE = -17;
public static final int CODE_STOP_ONE_HANDED_MODE = -18; public static final int CODE_STOP_ONE_HANDED_MODE = -18;
public static final int CODE_SWITCH_ONE_HANDED_MODE = -19; public static final int CODE_SWITCH_ONE_HANDED_MODE = -19;
public static final int CODE_NUMPAD = -20; public static final int CODE_SWITCH_NUMPAD = -20;
public static final int CODE_ALPHA_FROM_NUMPAD = -21; public static final int CODE_SWITCH_ALPHA = -21;
public static final int CODE_SYMBOL_FROM_NUMPAD = -22; public static final int CODE_SWITCH_SYMBOL = -22;
public static final int CODE_SELECT_ALL = -23; public static final int CODE_SELECT_ALL = -23;
public static final int CODE_COPY = -24; public static final int CODE_COPY = -24;
public static final int CODE_LEFT = -25; public static final int CODE_LEFT = -25;
@ -243,7 +242,9 @@ public final class Constants {
switch (code) { switch (code) {
case CODE_SHIFT: return "shift"; case CODE_SHIFT: return "shift";
case CODE_CAPSLOCK: return "capslock"; case CODE_CAPSLOCK: return "capslock";
case CODE_SWITCH_ALPHA_SYMBOL: return "symbol"; case CODE_SWITCH_ALPHA_SYMBOL: return "alpha_symbol";
case CODE_SWITCH_ALPHA: return "alpha";
case CODE_SWITCH_SYMBOL: return "symbol";
case CODE_OUTPUT_TEXT: return "text"; case CODE_OUTPUT_TEXT: return "text";
case CODE_DELETE: return "delete"; case CODE_DELETE: return "delete";
case CODE_SETTINGS: return "settings"; case CODE_SETTINGS: return "settings";
@ -254,8 +255,6 @@ public final class Constants {
case CODE_EMOJI: return "emoji"; case CODE_EMOJI: return "emoji";
case CODE_CLIPBOARD: return "clipboard"; case CODE_CLIPBOARD: return "clipboard";
case CODE_SHIFT_ENTER: return "shiftEnter"; case CODE_SHIFT_ENTER: return "shiftEnter";
case CODE_ALPHA_FROM_EMOJI: return "alpha";
case CODE_ALPHA_FROM_CLIPBOARD: return "alpha";
case CODE_UNSPECIFIED: return "unspec"; case CODE_UNSPECIFIED: return "unspec";
case CODE_TAB: return "tab"; case CODE_TAB: return "tab";
case CODE_ENTER: return "enter"; case CODE_ENTER: return "enter";
@ -263,9 +262,7 @@ public final class Constants {
case CODE_START_ONE_HANDED_MODE: return "startOneHandedMode"; case CODE_START_ONE_HANDED_MODE: return "startOneHandedMode";
case CODE_STOP_ONE_HANDED_MODE: return "stopOneHandedMode"; case CODE_STOP_ONE_HANDED_MODE: return "stopOneHandedMode";
case CODE_SWITCH_ONE_HANDED_MODE: return "switchOneHandedMode"; case CODE_SWITCH_ONE_HANDED_MODE: return "switchOneHandedMode";
case CODE_NUMPAD: return "numpad"; case CODE_SWITCH_NUMPAD: return "numpad";
case CODE_ALPHA_FROM_NUMPAD: return "alphaNumpad";
case CODE_SYMBOL_FROM_NUMPAD: return "symbolNumpad";
default: default:
if (code < CODE_SPACE) return String.format("\\u%02X", code); if (code < CODE_SPACE) return String.format("\\u%02X", code);
if (code < 0x100) return String.format("%c", code); if (code < 0x100) return String.format("%c", code);

View file

@ -488,7 +488,9 @@ public final class InputLogic {
} }
if (!inputTransaction.didAutoCorrect() && processedEvent.getMKeyCode() != Constants.CODE_SHIFT if (!inputTransaction.didAutoCorrect() && processedEvent.getMKeyCode() != Constants.CODE_SHIFT
&& processedEvent.getMKeyCode() != Constants.CODE_CAPSLOCK && processedEvent.getMKeyCode() != Constants.CODE_CAPSLOCK
&& processedEvent.getMKeyCode() != Constants.CODE_SWITCH_ALPHA_SYMBOL) && processedEvent.getMKeyCode() != Constants.CODE_SWITCH_ALPHA_SYMBOL
&& processedEvent.getMKeyCode() != Constants.CODE_SWITCH_ALPHA
&& processedEvent.getMKeyCode() != Constants.CODE_SWITCH_SYMBOL)
mLastComposedWord.deactivate(); mLastComposedWord.deactivate();
if (Constants.CODE_DELETE != processedEvent.getMKeyCode()) { if (Constants.CODE_DELETE != processedEvent.getMKeyCode()) {
mEnteredText = null; mEnteredText = null;
@ -744,12 +746,10 @@ public final class InputLogic {
case Constants.CODE_CAPSLOCK: case Constants.CODE_CAPSLOCK:
case Constants.CODE_SYMBOL_SHIFT: case Constants.CODE_SYMBOL_SHIFT:
case Constants.CODE_SWITCH_ALPHA_SYMBOL: case Constants.CODE_SWITCH_ALPHA_SYMBOL:
case Constants.CODE_SWITCH_ALPHA:
case Constants.CODE_SWITCH_SYMBOL:
case Constants.CODE_SWITCH_NUMPAD:
case Constants.CODE_EMOJI: case Constants.CODE_EMOJI:
case Constants.CODE_ALPHA_FROM_EMOJI:
case Constants.CODE_ALPHA_FROM_CLIPBOARD:
case Constants.CODE_NUMPAD:
case Constants.CODE_ALPHA_FROM_NUMPAD:
case Constants.CODE_SYMBOL_FROM_NUMPAD:
case Constants.CODE_START_ONE_HANDED_MODE: case Constants.CODE_START_ONE_HANDED_MODE:
case Constants.CODE_STOP_ONE_HANDED_MODE: case Constants.CODE_STOP_ONE_HANDED_MODE:
case Constants.CODE_SWITCH_ONE_HANDED_MODE: case Constants.CODE_SWITCH_ONE_HANDED_MODE:

View file

@ -4,5 +4,5 @@
;action 10% ;action 10%
shift 10%; shift"</string> shift 10%; shift"</string>
<string name="key_def_functional_top_row" translatable="false">";delete 10%"</string> <string name="key_def_functional_top_row" translatable="false">";delete 10%"</string>
<string name="key_def_bottom_row">"symbol, comma, space, period, emoji_com"</string> <string name="key_def_bottom_row">"symbol_alpha, comma, space, period, emoji_com"</string>
</resources> </resources>

View file

@ -18,5 +18,5 @@
split into two groups. Space bar will be adjusted in code for language and emoji keys, split into two groups. Space bar will be adjusted in code for language and emoji keys,
and other keys in symbol layouts and other keys in symbol layouts
--> -->
<string name="key_def_bottom_row" translatable="false">"symbol 15%, comma, space, period, action 15%"</string> <string name="key_def_bottom_row" translatable="false">"symbol_alpha 15%, comma, space, period, action 15%"</string>
</resources> </resources>