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

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

Merge "Fix long press caps lock handling (DO NOT MERGE)" into ics-mr1

parents 620b1faf 628ca7a8
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -170,6 +170,10 @@ public class Keyboard {
        return mShiftState.isShiftLocked();
    }

    public boolean isShiftLockShifted() {
        return mShiftState.isShiftLockShifted();
    }

    public boolean setShifted(boolean newShiftState) {
        for (final Key key : mShiftKeys) {
            if (!newShiftState && !mShiftState.isShiftLocked()) {
+10 −0
Original line number Diff line number Diff line
@@ -386,6 +386,13 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
        return false;
    }

    private boolean isShiftLockShifted() {
        LatinKeyboard latinKeyboard = getLatinKeyboard();
        if (latinKeyboard != null)
            return latinKeyboard.isShiftLockShifted();
        return false;
    }

    public boolean isAutomaticTemporaryUpperCase() {
        LatinKeyboard latinKeyboard = getLatinKeyboard();
        if (latinKeyboard != null)
@@ -559,6 +566,9 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
            if (shiftKeyState.isMomentary()) {
                // After chording input while normal state.
                toggleShift();
            } else if (isShiftLocked() && !isShiftLockShifted() && shiftKeyState.isPressing()
                    && !withSliding) {
                // Shift has been long pressed, ignore this release.
            } else if (isShiftLocked() && !shiftKeyState.isIgnoring() && !withSliding) {
                // Shift has been pressed without chording while caps lock state.
                toggleCapsLock();
+18 −7
Original line number Diff line number Diff line
@@ -351,7 +351,7 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
        // calling setAlreadyProcessed() nor remove the tracker from mPointerQueue.
        final int primaryCode = ignore ? Keyboard.CODE_HAPTIC_AND_AUDIO_FEEDBACK_ONLY
                : Keyboard.CODE_CAPSLOCK;
        mKeyboardActionListener.onCodeInput(primaryCode, null, 0, 0);
        invokeCodeInput(primaryCode);
    }

    // This default implementation returns a more keys panel.
@@ -399,18 +399,22 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
            if (primaryCode == Keyboard.CODE_DIGIT0 && latinKeyboard.isPhoneKeyboard()) {
                tracker.onLongPressed();
                // Long pressing on 0 in phone number keypad gives you a '+'.
                return invokeOnKey(Keyboard.CODE_PLUS);
                invokeCodeInput(Keyboard.CODE_PLUS);
                invokeReleaseKey(primaryCode);
                return true;
            }
            if (primaryCode == Keyboard.CODE_SHIFT && latinKeyboard.isAlphaKeyboard()) {
                tracker.onLongPressed();
                return invokeOnKey(Keyboard.CODE_CAPSLOCK);
                invokeCodeInput(Keyboard.CODE_CAPSLOCK);
                invokeReleaseKey(primaryCode);
                return true;
            }
        }
        if (primaryCode == Keyboard.CODE_SETTINGS || primaryCode == Keyboard.CODE_SPACE) {
            // Both long pressing settings key and space key invoke IME switcher dialog.
            if (getKeyboardActionListener().onCustomRequest(
                    LatinIME.CODE_SHOW_INPUT_METHOD_PICKER)) {
            if (invokeCustomRequest(LatinIME.CODE_SHOW_INPUT_METHOD_PICKER)) {
                tracker.onLongPressed();
                invokeReleaseKey(primaryCode);
                return true;
            } else {
                return openMoreKeysPanel(parentKey, tracker);
@@ -420,11 +424,18 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
        }
    }

    private boolean invokeOnKey(int primaryCode) {
    private boolean invokeCustomRequest(int code) {
        return getKeyboardActionListener().onCustomRequest(code);
    }

    private void invokeCodeInput(int primaryCode) {
        getKeyboardActionListener().onCodeInput(primaryCode, null,
                KeyboardActionListener.NOT_A_TOUCH_COORDINATE,
                KeyboardActionListener.NOT_A_TOUCH_COORDINATE);
        return true;
    }

    private void invokeReleaseKey(int primaryCode) {
        getKeyboardActionListener().onRelease(primaryCode, false);
    }

    private boolean openMoreKeysPanel(Key parentKey, PointerTracker tracker) {
+4 −0
Original line number Diff line number Diff line
@@ -103,6 +103,10 @@ public class KeyboardShiftState {
        return mState == SHIFT_LOCKED || mState == SHIFT_LOCK_SHIFTED;
    }

    public boolean isShiftLockShifted() {
        return mState == SHIFT_LOCK_SHIFTED;
    }

    public boolean isAutomaticTemporaryUpperCase() {
        return mState == AUTO_SHIFTED;
    }