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

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

Fix that long pressing shift on symbol keyboard registers caps lock code

Bug: 5088376
Change-Id: I586a9fb685f3443aa22fd877df52b36247c4f858
parent 60ccbe16
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -77,6 +77,8 @@ public class Keyboard {
    public static final int CODE_CLOSING_SQUARE_BRACKET = ']';
    public static final int CODE_CLOSING_CURLY_BRACKET = '}';
    public static final int CODE_CLOSING_ANGLE_BRACKET = '>';
    public static final int CODE_DIGIT0 = '0';
    public static final int CODE_PLUS = '+';


    /** Special keys code.  These should be aligned with values/keycodes.xml */
+30 −30
Original line number Diff line number Diff line
@@ -53,55 +53,55 @@ public class LatinKeyboardView extends LatinKeyboardBaseView {

    @Override
    public void setKeyPreviewPopupEnabled(boolean previewEnabled, int delay) {
        LatinKeyboard latinKeyboard = getLatinKeyboard();
        if (latinKeyboard != null
                && (latinKeyboard.isPhoneKeyboard() || latinKeyboard.isNumberKeyboard())) {
            // Phone and number keyboard never shows popup preview (except language switch).
        final Keyboard keyboard = getKeyboard();
        if (keyboard instanceof LatinKeyboard) {
            final LatinKeyboard latinKeyboard = (LatinKeyboard)keyboard;
            if (latinKeyboard.isPhoneKeyboard() || latinKeyboard.isNumberKeyboard()) {
                // Phone and number keyboard never shows popup preview.
                super.setKeyPreviewPopupEnabled(false, delay);
        } else {
            super.setKeyPreviewPopupEnabled(previewEnabled, delay);
                return;
            }
        }
        super.setKeyPreviewPopupEnabled(previewEnabled, delay);
    }

    @Override
    public void setKeyboard(Keyboard newKeyboard) {
        super.setKeyboard(newKeyboard);
        // One-seventh of the keyboard width seems like a reasonable threshold
        mJumpThresholdSquare = newKeyboard.getMinWidth() / 7;
        mJumpThresholdSquare *= mJumpThresholdSquare;
    }

    private LatinKeyboard getLatinKeyboard() {
        Keyboard keyboard = getKeyboard();
        if (keyboard instanceof LatinKeyboard) {
            return (LatinKeyboard)keyboard;
        } else {
            return null;
        }
        final int jumpThreshold = newKeyboard.getMinWidth() / 7;
        mJumpThresholdSquare = jumpThreshold * jumpThreshold;
    }

    public void setSpacebarTextFadeFactor(float fadeFactor, LatinKeyboard oldKeyboard) {
        final LatinKeyboard currentKeyboard = getLatinKeyboard();
        final Keyboard keyboard = getKeyboard();
        // We should not set text fade factor to the keyboard which does not display the language on
        // its spacebar.
        if (currentKeyboard != null && currentKeyboard == oldKeyboard)
            currentKeyboard.setSpacebarTextFadeFactor(fadeFactor, this);
        if (keyboard instanceof LatinKeyboard && keyboard == oldKeyboard) {
            ((LatinKeyboard)keyboard).setSpacebarTextFadeFactor(fadeFactor, this);
        }
    }

    @Override
    protected boolean onLongPress(Key key, PointerTracker tracker) {
        int primaryCode = key.mCode;
        if (primaryCode == Keyboard.CODE_SETTINGS || primaryCode == Keyboard.CODE_SPACE) {
            tracker.onLongPressed();
            // Both long pressing settings key and space key invoke IME switcher dialog.
            return invokeOnKey(Keyboard.CODE_SETTINGS_LONGPRESS);
        } else if (primaryCode == '0' && getLatinKeyboard().isPhoneKeyboard()) {
        final int primaryCode = key.mCode;
        final Keyboard keyboard = getKeyboard();
        if (keyboard instanceof LatinKeyboard) {
            final LatinKeyboard latinKeyboard = (LatinKeyboard) keyboard;
            if (primaryCode == Keyboard.CODE_DIGIT0 && latinKeyboard.isPhoneKeyboard()) {
                tracker.onLongPressed();
                // Long pressing on 0 in phone number keypad gives you a '+'.
            return invokeOnKey('+');
        } else if (primaryCode == Keyboard.CODE_SHIFT) {
                return invokeOnKey(Keyboard.CODE_PLUS);
            }
            if (primaryCode == Keyboard.CODE_SHIFT && latinKeyboard.isAlphaKeyboard()) {
                tracker.onLongPressed();
                return invokeOnKey(Keyboard.CODE_CAPSLOCK);
            }
        }
        if (primaryCode == Keyboard.CODE_SETTINGS || primaryCode == Keyboard.CODE_SPACE) {
            tracker.onLongPressed();
            // Both long pressing settings key and space key invoke IME switcher dialog.
            return invokeOnKey(Keyboard.CODE_SETTINGS_LONGPRESS);
        } else {
            return super.onLongPress(key, tracker);
        }
@@ -194,7 +194,7 @@ public class LatinKeyboardView extends LatinKeyboardBaseView {

    @Override
    public boolean onTouchEvent(MotionEvent me) {
        if (getLatinKeyboard() == null) return true;
        if (getKeyboard() == null) return true;

        // If there was a sudden jump, return without processing the actual motion event.
        if (handleSuddenJump(me)) {