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

Commit 41afa87a authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka Committed by Android (Google) Code Review
Browse files

Merge "Remove automatic switch back to alphabet feature"

parents 81a4b7f4 cc2636b4
Loading
Loading
Loading
Loading
+0 −13
Original line number Diff line number Diff line
@@ -29,19 +29,6 @@
    <string name="symbols_word_separators">"&#x0009;&#x0020;\n"()[]{}*&amp;&lt;&gt;+=|.,;:!?/_\"</string>
    <!-- Word connectors -->
    <string name="symbols_word_connectors">\'-</string>
    <!-- Symbol characters list that should switch back to the main layout -->
    <!-- U+2018: "‘" LEFT SINGLE QUOTATION MARK
         U+2019: "’" RIGHT SINGLE QUOTATION MARK
         U+201A: "‚" SINGLE LOW-9 QUOTATION MARK
         U+201B: "‛" SINGLE HIGH-REVERSED-9 QUOTATION MARK
         U+201C: "“" LEFT DOUBLE QUOTATION MARK
         U+201D: "”" RIGHT DOUBLE QUOTATION MARK
         U+201E: "„" DOUBLE LOW-9 QUOTATION MARK
         U+201F: "‟" DOUBLE HIGH-REVERSED-9 QUOTATION MARK
         U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
         U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -->
    <!-- <string name="layout_switch_back_symbols">\"\'&#x2018;&#x2019;&#x201A;&#x201B;&#x201C;&#x201D;&#x201E;&#x201F;&#x00AB;&#x00BB;</string> -->
    <string name="layout_switch_back_symbols"></string>

    <!--  Always show the suggestion strip -->
    <string name="prefs_suggestion_visibility_show_value">0</string>
+1 −1
Original line number Diff line number Diff line
@@ -149,7 +149,7 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
                settingsValues.isLanguageSwitchKeyEnabled());
        mKeyboardLayoutSet = builder.build();
        try {
            mState.onLoadKeyboard(mResources.getString(R.string.layout_switch_back_symbols));
            mState.onLoadKeyboard();
            mFeedbackManager.onSettingsChanged(settingsValues);
        } catch (KeyboardLayoutSetException e) {
            Log.w(TAG, "loading keyboard failed: " + e.mKeyboardId, e.getCause());
+19 −33
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@ import com.android.inputmethod.latin.Constants;
 *
 * This class contains all keyboard state transition logic.
 *
 * The input events are {@link #onLoadKeyboard(String)}, {@link #onSaveKeyboardState()},
 * The input events are {@link #onLoadKeyboard()}, {@link #onSaveKeyboardState()},
 * {@link #onPressKey(int, boolean, int)}, {@link #onReleaseKey(int, boolean)},
 * {@link #onCodeInput(int, boolean, int)}, {@link #onCancelInput(boolean)},
 * {@link #onUpdateShiftState(int)}, {@link #onLongPressTimeout(int)}.
@@ -74,7 +74,6 @@ public final class KeyboardState {
    private static final int SWITCH_STATE_MOMENTARY_ALPHA_AND_SYMBOL = 3;
    private static final int SWITCH_STATE_MOMENTARY_SYMBOL_AND_MORE = 4;
    private int mSwitchState = SWITCH_STATE_ALPHA;
    private String mLayoutSwitchBackSymbols;

    private boolean mIsAlphabetMode;
    private AlphabetShiftState mAlphabetShiftState = new AlphabetShiftState();
@@ -109,15 +108,14 @@ public final class KeyboardState {
        }
    }

    public KeyboardState(SwitchActions switchActions) {
    public KeyboardState(final SwitchActions switchActions) {
        mSwitchActions = switchActions;
    }

    public void onLoadKeyboard(String layoutSwitchBackSymbols) {
    public void onLoadKeyboard() {
        if (DEBUG_EVENT) {
            Log.d(TAG, "onLoadKeyboard: " + this);
        }
        mLayoutSwitchBackSymbols = layoutSwitchBackSymbols;
        // Reset alphabet shift state.
        mAlphabetShiftState.setShiftLocked(false);
        mPrevMainKeyboardWasShiftLocked = false;
@@ -177,7 +175,7 @@ public final class KeyboardState {
    private static final int AUTOMATIC_SHIFT = 2;
    private static final int SHIFT_LOCK_SHIFTED = 3;

    private void setShifted(int shiftMode) {
    private void setShifted(final int shiftMode) {
        if (DEBUG_ACTION) {
            Log.d(TAG, "setShifted: shiftMode=" + shiftModeToString(shiftMode) + " " + this);
        }
@@ -216,7 +214,7 @@ public final class KeyboardState {
        }
    }

    private void setShiftLocked(boolean shiftLocked) {
    private void setShiftLocked(final boolean shiftLocked) {
        if (DEBUG_ACTION) {
            Log.d(TAG, "setShiftLocked: shiftLocked=" + shiftLocked + " " + this);
        }
@@ -313,7 +311,7 @@ public final class KeyboardState {
        mSwitchState = SWITCH_STATE_SYMBOL_BEGIN;
    }

    public void onPressKey(int code, boolean isSinglePointer, int autoCaps) {
    public void onPressKey(final int code, final boolean isSinglePointer, final int autoCaps) {
        if (DEBUG_EVENT) {
            Log.d(TAG, "onPressKey: code=" + Constants.printableCode(code)
                   + " single=" + isSinglePointer + " autoCaps=" + autoCaps + " " + this);
@@ -346,7 +344,7 @@ public final class KeyboardState {
        }
    }

    public void onReleaseKey(int code, boolean withSliding) {
    public void onReleaseKey(final int code, final boolean withSliding) {
        if (DEBUG_EVENT) {
            Log.d(TAG, "onReleaseKey: code=" + Constants.printableCode(code)
                    + " sliding=" + withSliding + " " + this);
@@ -364,7 +362,7 @@ public final class KeyboardState {
        mSwitchState = SWITCH_STATE_MOMENTARY_ALPHA_AND_SYMBOL;
    }

    private void onReleaseSymbol(boolean withSliding) {
    private void onReleaseSymbol(final boolean withSliding) {
        if (mSymbolKeyState.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.
@@ -378,7 +376,7 @@ public final class KeyboardState {
        mSymbolKeyState.onRelease();
    }

    public void onLongPressTimeout(int code) {
    public void onLongPressTimeout(final int code) {
        if (DEBUG_EVENT) {
            Log.d(TAG, "onLongPressTimeout: code=" + Constants.printableCode(code) + " " + this);
        }
@@ -388,7 +386,7 @@ public final class KeyboardState {
        }
    }

    public void onUpdateShiftState(int autoCaps) {
    public void onUpdateShiftState(final int autoCaps) {
        if (DEBUG_EVENT) {
            Log.d(TAG, "onUpdateShiftState: autoCaps=" + autoCaps + " " + this);
        }
@@ -404,7 +402,7 @@ public final class KeyboardState {
        resetKeyboardStateToAlphabet();
    }

    private void updateAlphabetShiftState(int autoCaps) {
    private void updateAlphabetShiftState(final int autoCaps) {
        if (!mIsAlphabetMode) return;
        if (!mShiftKeyState.isReleasing()) {
            // Ignore update shift state event while the shift key is being pressed (including
@@ -468,7 +466,7 @@ public final class KeyboardState {
        }
    }

    private void onReleaseShift(boolean withSliding) {
    private void onReleaseShift(final boolean withSliding) {
        if (mIsAlphabetMode) {
            final boolean isShiftLocked = mAlphabetShiftState.isShiftLocked();
            mIsInAlphabetUnshiftedFromShifted = false;
@@ -523,7 +521,7 @@ public final class KeyboardState {
        mShiftKeyState.onRelease();
    }

    public void onCancelInput(boolean isSinglePointer) {
    public void onCancelInput(final boolean isSinglePointer) {
        if (DEBUG_EVENT) {
            Log.d(TAG, "onCancelInput: single=" + isSinglePointer + " " + this);
        }
@@ -542,17 +540,11 @@ public final class KeyboardState {
                || mSwitchState == SWITCH_STATE_MOMENTARY_SYMBOL_AND_MORE;
    }

    private static boolean isSpaceCharacter(int c) {
    private static boolean isSpaceCharacter(final int c) {
        return c == Constants.CODE_SPACE || c == Constants.CODE_ENTER;
    }

    private boolean isLayoutSwitchBackCharacter(int c) {
        if (TextUtils.isEmpty(mLayoutSwitchBackSymbols)) return false;
        if (mLayoutSwitchBackSymbols.indexOf(c) >= 0) return true;
        return false;
    }

    public void onCodeInput(int code, boolean isSinglePointer, int autoCaps) {
    public void onCodeInput(final int code, final boolean isSinglePointer, final int autoCaps) {
        if (DEBUG_EVENT) {
            Log.d(TAG, "onCodeInput: code=" + Constants.printableCode(code)
                    + " single=" + isSinglePointer
@@ -592,17 +584,11 @@ public final class KeyboardState {
                    || code == Constants.CODE_OUTPUT_TEXT)) {
                mSwitchState = SWITCH_STATE_SYMBOL;
            }
            // Switch back to alpha keyboard mode immediately if user types one of the switch back
            // characters.
            if (isLayoutSwitchBackCharacter(code)) {
                toggleAlphabetAndSymbols();
                mPrevSymbolsKeyboardWasShifted = false;
            }
            break;
        case SWITCH_STATE_SYMBOL:
            // Switch back to alpha keyboard mode if user types one or more non-space/enter
            // characters followed by a space/enter or one of the switch back characters.
            if (isSpaceCharacter(code) || isLayoutSwitchBackCharacter(code)) {
            // characters followed by a space/enter.
            if (isSpaceCharacter(code)) {
                toggleAlphabetAndSymbols();
                mPrevSymbolsKeyboardWasShifted = false;
            }
@@ -615,7 +601,7 @@ public final class KeyboardState {
        }
    }

    private static String shiftModeToString(int shiftMode) {
    private static String shiftModeToString(final int shiftMode) {
        switch (shiftMode) {
        case UNSHIFT: return "UNSHIFT";
        case MANUAL_SHIFT: return "MANUAL";
@@ -624,7 +610,7 @@ public final class KeyboardState {
        }
    }

    private static String switchStateToString(int switchState) {
    private static String switchStateToString(final int switchState) {
        switch (switchState) {
        case SWITCH_STATE_ALPHA: return "ALPHA";
        case SWITCH_STATE_SYMBOL_BEGIN: return "SYMBOL-BEGIN";
+0 −53
Original line number Diff line number Diff line
@@ -150,59 +150,6 @@ public class KeyboardStateSingleTouchTests extends KeyboardStateTestsBase {
        pressAndReleaseKey(CODE_SPACE, SYMBOLS_SHIFTED, ALPHABET_SHIFT_LOCKED);
    }

    // Automatic switch back to alphabet by registered letters.
    public void testSwitchBackChar() {
        // Set switch back chars.
        final String switchBackSymbols = "'";
        final int switchBackCode = switchBackSymbols.codePointAt(0);
        setLayoutSwitchBackSymbols(switchBackSymbols);
        loadKeyboard(ALPHABET_UNSHIFTED);

        // Press/release "?123" key, enter into symbols.
        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
        // Enter symbol letter.
        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
        // Enter switch back letter, switch back to alphabet.
        pressAndReleaseKey(switchBackCode, SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);

        // Press/release "?123" key, enter into symbols.
        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
        // Press/release "=\<" key, enter into symbols shifted.
        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
        // Enter symbol shift letter.
        pressAndReleaseKey('~', SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
        // Enter switch abck letter, switch back to alphabet.
        pressAndReleaseKey(switchBackCode, SYMBOLS_SHIFTED, ALPHABET_UNSHIFTED);
    }

    // Automatic switch back to alphabet shift locked by registered letters.
    public void testSwitchBackCharShiftLocked() {
        // Set switch back chars.
        final String switchBackSymbols = "'";
        final int switchBackCode = switchBackSymbols.codePointAt(0);
        setLayoutSwitchBackSymbols(switchBackSymbols);
        loadKeyboard(ALPHABET_UNSHIFTED);
        // Long press shift key, enter alphabet shift locked.
        longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED,
                ALPHABET_SHIFT_LOCKED);

        // Press/release "?123" key, enter into symbols.
        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
        // Enter symbol letter.
        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
        // Enter switch back letter, switch back to alphabet shift locked.
        pressAndReleaseKey(switchBackCode, SYMBOLS_UNSHIFTED, ALPHABET_SHIFT_LOCKED);

        // Press/release "?123" key, enter into symbols.
        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
        // Press/release "=\<" key, enter into symbols shifted.
        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
        // Enter symbol shift letter.
        pressAndReleaseKey(CODE_SPACE, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
        // Enter switch back letter, switch back to alphabet shift locked.
        pressAndReleaseKey(switchBackCode, SYMBOLS_SHIFTED, ALPHABET_SHIFT_LOCKED);
    }

    // Automatic upper case test
    public void testAutomaticUpperCase() {
        // Set capitalize the first character of all words mode.
+20 −24
Original line number Diff line number Diff line
@@ -22,8 +22,6 @@ public class KeyboardStateTestsBase extends AndroidTestCase
        implements MockKeyboardSwitcher.MockConstants {
    protected MockKeyboardSwitcher mSwitcher;

    private String mLayoutSwitchBackSymbols = "";

    @Override
    protected void setUp() throws Exception {
        super.setUp();
@@ -34,88 +32,86 @@ public class KeyboardStateTestsBase extends AndroidTestCase
        loadKeyboard(ALPHABET_UNSHIFTED);
    }

    public void setAutoCapsMode(int autoCaps) {
    public void setAutoCapsMode(final int autoCaps) {
        mSwitcher.setAutoCapsMode(autoCaps);
    }

    public void setLayoutSwitchBackSymbols(String switchBackSymbols) {
        mLayoutSwitchBackSymbols = switchBackSymbols;
    }

    private static void assertLayout(String message, int expected, int actual) {
    private static void assertLayout(final String message, final int expected, final int actual) {
        assertTrue(message + ": expected=" + MockKeyboardSwitcher.getLayoutName(expected)
                + " actual=" + MockKeyboardSwitcher.getLayoutName(actual),
                expected == actual);
    }

    public void updateShiftState(int afterUpdate) {
    public void updateShiftState(final int afterUpdate) {
        mSwitcher.updateShiftState();
        assertLayout("afterUpdate", afterUpdate, mSwitcher.getLayoutId());
    }

    public void loadKeyboard(int afterLoad) {
        mSwitcher.loadKeyboard(mLayoutSwitchBackSymbols);
    public void loadKeyboard(final int afterLoad) {
        mSwitcher.loadKeyboard();
        mSwitcher.updateShiftState();
        assertLayout("afterLoad", afterLoad, mSwitcher.getLayoutId());
    }

    public void rotateDevice(int afterRotate) {
    public void rotateDevice(final int afterRotate) {
        mSwitcher.saveKeyboardState();
        mSwitcher.loadKeyboard(mLayoutSwitchBackSymbols);
        mSwitcher.loadKeyboard();
        assertLayout("afterRotate", afterRotate, mSwitcher.getLayoutId());
    }

    private void pressKeyWithoutTimerExpire(int code, boolean isSinglePointer, int afterPress) {
    private void pressKeyWithoutTimerExpire(final int code, final boolean isSinglePointer,
            final int afterPress) {
        mSwitcher.onPressKey(code, isSinglePointer);
        assertLayout("afterPress", afterPress, mSwitcher.getLayoutId());
    }

    public void pressKey(int code, int afterPress) {
    public void pressKey(final int code, final int afterPress) {
        mSwitcher.expireDoubleTapTimeout();
        pressKeyWithoutTimerExpire(code, true, afterPress);
    }

    public void releaseKey(int code, int afterRelease) {
    public void releaseKey(final int code, final int afterRelease) {
        mSwitcher.onCodeInput(code, SINGLE);
        mSwitcher.onReleaseKey(code, NOT_SLIDING);
        assertLayout("afterRelease", afterRelease, mSwitcher.getLayoutId());
    }

    public void pressAndReleaseKey(int code, int afterPress, int afterRelease) {
    public void pressAndReleaseKey(final int code, final int afterPress, final int afterRelease) {
        pressKey(code, afterPress);
        releaseKey(code, afterRelease);
    }

    public void chordingPressKey(int code, int afterPress) {
    public void chordingPressKey(final int code, final int afterPress) {
        mSwitcher.expireDoubleTapTimeout();
        pressKeyWithoutTimerExpire(code, false, afterPress);
    }

    public void chordingReleaseKey(int code, int afterRelease) {
    public void chordingReleaseKey(final int code, final int afterRelease) {
        mSwitcher.onCodeInput(code, MULTI);
        mSwitcher.onReleaseKey(code, NOT_SLIDING);
        assertLayout("afterRelease", afterRelease, mSwitcher.getLayoutId());
    }

    public void chordingPressAndReleaseKey(int code, int afterPress, int afterRelease) {
    public void chordingPressAndReleaseKey(final int code, final int afterPress,
            final int afterRelease) {
        chordingPressKey(code, afterPress);
        chordingReleaseKey(code, afterRelease);
    }

    public void pressAndSlideFromKey(int code, int afterPress, int afterSlide) {
    public void pressAndSlideFromKey(final int code, final int afterPress, final int afterSlide) {
        pressKey(code, afterPress);
        mSwitcher.onReleaseKey(code, SLIDING);
        assertLayout("afterSlide", afterSlide, mSwitcher.getLayoutId());
    }

    public void longPressKey(int code, int afterPress, int afterLongPress) {
    public void longPressKey(final int code, final int afterPress, final int afterLongPress) {
        pressKey(code, afterPress);
        mSwitcher.onLongPressTimeout(code);
        assertLayout("afterLongPress", afterLongPress, mSwitcher.getLayoutId());
    }

    public void longPressAndReleaseKey(int code, int afterPress, int afterLongPress,
            int afterRelease) {
    public void longPressAndReleaseKey(final int code, final int afterPress,
            final int afterLongPress, final int afterRelease) {
        longPressKey(code, afterPress, afterLongPress);
        releaseKey(code, afterRelease);
    }
Loading