Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ee4be6e3 authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka
Browse files

Call KeyboardState.onUpdateShiftState from onCodeInput if code is a normal letter

This will be helpful to write unit test code.

Change-Id: Ib61cc46ac547084e0dc9ecd3a50814fecf08ace2
parent 8edd3067
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -67,7 +67,9 @@ import java.util.Set;
public class Keyboard {
    private static final String TAG = Keyboard.class.getSimpleName();

    /** Some common keys code.  These should be aligned with values/keycodes.xml */
    /** Some common keys code. Must be positive.
     * These should be aligned with values/keycodes.xml
     */
    public static final int CODE_ENTER = '\n';
    public static final int CODE_TAB = '\t';
    public static final int CODE_SPACE = ' ';
@@ -85,7 +87,9 @@ public class Keyboard {
    public static final int CODE_DIGIT0 = '0';
    public static final int CODE_PLUS = '+';

    /** Special keys code.  These should be aligned with values/keycodes.xml */
    /** Special keys code. Must be non-positive.
     * These should be aligned with values/keycodes.xml
     */
    public static final int CODE_DUMMY = 0;
    public static final int CODE_SHIFT = -1;
    public static final int CODE_SWITCH_ALPHA_SYMBOL = -2;
@@ -248,6 +252,10 @@ public class Keyboard {
        return label;
    }

    public static boolean isLetterCode(int code) {
        return code > CODE_DUMMY;
    }

    public static class Params {
        public KeyboardId mId;
        public int mThemeId;
+1 −1
Original line number Diff line number Diff line
@@ -332,7 +332,7 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions,
     * Updates state machine to figure out when to automatically snap back to the previous mode.
     */
    public void onCodeInput(int code) {
        mState.onCodeInput(code, isSinglePointer());
        mState.onCodeInput(code, isSinglePointer(), mInputMethodService.getCurrentAutoCapsState());
    }

    public LatinKeyboardView getKeyboardView() {
+15 −5
Original line number Diff line number Diff line
@@ -29,9 +29,10 @@ import com.android.inputmethod.keyboard.Keyboard;
 *
 * The input events are {@link #onLoadKeyboard(String, boolean)}, {@link #onSaveKeyboardState()},
 * {@link #onPressShift(boolean)}, {@link #onReleaseShift(boolean)}, {@link #onPressSymbol()},
 * {@link #onReleaseSymbol()}, {@link #onOtherKeyPressed()}, {@link #onCodeInput(int, boolean)},
 * {@link #onCancelInput(boolean)}, {@link #onUpdateShiftState(boolean)}, {@link #onToggleShift()},
 * {@link #onToggleCapsLock()}, and {@link #onToggleAlphabetAndSymbols()}.
 * {@link #onReleaseSymbol()}, {@link #onOtherKeyPressed()},
 * {@link #onCodeInput(int, boolean, boolean)}, {@link #onCancelInput(boolean)},
 * {@link #onUpdateShiftState(boolean)}, {@link #onToggleShift()}, {@link #onToggleCapsLock()},
 * and {@link #onToggleAlphabetAndSymbols()}.
 *
 * The actions are {@link SwitchActions}'s methods.
 */
@@ -267,6 +268,10 @@ public class KeyboardState {
        if (DEBUG_STATE) {
            Log.d(TAG, "onUpdateShiftState: autoCaps=" + autoCaps + " " + this);
        }
        onUpdateShiftStateInternal(autoCaps);
    }

    private void onUpdateShiftStateInternal(boolean autoCaps) {
        if (mIsAlphabetMode) {
            if (!mKeyboardShiftState.isShiftLocked() && !mShiftKeyState.isIgnoring()) {
                if (mShiftKeyState.isReleasing() && autoCaps) {
@@ -381,10 +386,10 @@ public class KeyboardState {
        return false;
    }

    public void onCodeInput(int code, boolean isSinglePointer) {
    public void onCodeInput(int code, boolean isSinglePointer, boolean autoCaps) {
        if (DEBUG_STATE) {
            Log.d(TAG, "onCodeInput: code=" + code + " isSinglePointer=" + isSinglePointer
                    + " " + this);
                    + " autoCaps=" + autoCaps + " " + this);
        }
        switch (mSwitchState) {
        case SWITCH_STATE_MOMENTARY_ALPHA_AND_SYMBOL:
@@ -446,6 +451,11 @@ public class KeyboardState {
            }
            break;
        }

        // If the code is a letter, update keyboard shift state.
        if (Keyboard.isLetterCode(code)) {
            onUpdateShiftStateInternal(autoCaps);
        }
    }

    public void onToggleShift() {
+0 −2
Original line number Diff line number Diff line
@@ -1496,7 +1496,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
            if (null != ic) swapSwapperAndSpaceWhileInBatchEdit(ic);
        }

        switcher.updateShiftState();
        if (mSettingsValues.isWordSeparator(code)) {
            Utils.Stats.onSeparator((char)code, x, y);
        } else {
@@ -1581,7 +1580,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar

        Utils.Stats.onSeparator((char)primaryCode, x, y);

        mKeyboardSwitcher.updateShiftState();
        if (ic != null) {
            ic.endBatchEdit();
        }
+7 −6
Original line number Diff line number Diff line
@@ -90,7 +90,8 @@ public class KeyboardStateTests extends AndroidTestCase {
    // Argument for KeyboardState.onCodeInput.
    private static final boolean SINGLE = true;
    private static final boolean MULTI = false;

    private static final boolean NO_AUTO_CAPS = false;
    private static final boolean AUTO_CAPS = true;

    private void assertAlphabetNormal() {
        assertEquals(ALPHABET_UNSHIFTED, mSwitcher.mLayout);
@@ -213,7 +214,7 @@ public class KeyboardStateTests extends AndroidTestCase {
        // Long press recognized in LatinKeyboardView.KeyTimerHandler.
        mState.onToggleCapsLock();
        assertAlphabetShiftLocked();
        mState.onCodeInput(Keyboard.CODE_CAPSLOCK, SINGLE);
        mState.onCodeInput(Keyboard.CODE_CAPSLOCK, SINGLE, NO_AUTO_CAPS);
        assertAlphabetShiftLocked();
        mState.onReleaseShift(NOT_SLIDING);
        assertAlphabetShiftLocked();
@@ -224,7 +225,7 @@ public class KeyboardStateTests extends AndroidTestCase {
        // Long press recognized in LatinKeyboardView.KeyTimerHandler.
        mState.onToggleCapsLock();
        assertAlphabetNormal();
        mState.onCodeInput(Keyboard.CODE_CAPSLOCK, SINGLE);
        mState.onCodeInput(Keyboard.CODE_CAPSLOCK, SINGLE, NO_AUTO_CAPS);
        assertAlphabetNormal();
        mState.onReleaseShift(NOT_SLIDING);
        assertAlphabetNormal();
@@ -236,7 +237,7 @@ public class KeyboardStateTests extends AndroidTestCase {
        // First shift key tap.
        mState.onPressShift(NOT_SLIDING);
        assertAlphabetManualShifted();
        mState.onCodeInput(Keyboard.CODE_SHIFT, SINGLE);
        mState.onCodeInput(Keyboard.CODE_SHIFT, SINGLE, NO_AUTO_CAPS);
        assertAlphabetManualShifted();
        mState.onReleaseShift(NOT_SLIDING);
        assertAlphabetManualShifted();
@@ -244,13 +245,13 @@ public class KeyboardStateTests extends AndroidTestCase {
        // Double tap recognized in LatinKeyboardView.KeyTimerHandler.
        mState.onToggleCapsLock();
        assertAlphabetShiftLocked();
        mState.onCodeInput(Keyboard.CODE_SHIFT, SINGLE);
        mState.onCodeInput(Keyboard.CODE_SHIFT, SINGLE, NO_AUTO_CAPS);
        assertAlphabetShiftLocked();

        // First shift key tap.
        mState.onPressShift(NOT_SLIDING);
        assertAlphabetManualShifted();
        mState.onCodeInput(Keyboard.CODE_SHIFT, SINGLE);
        mState.onCodeInput(Keyboard.CODE_SHIFT, SINGLE, NO_AUTO_CAPS);
        assertAlphabetManualShifted();
        mState.onReleaseShift(NOT_SLIDING);
        assertAlphabetNormal();