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

Commit 94fe2b62 authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka Committed by Android Git Automerger
Browse files

am efc4a437: Symbol key acts as modifier key

Merge commit 'efc4a437' into gingerbread-plus-aosp

* commit 'efc4a437':
  Symbol key acts as modifier key
parents 72a66d3d efc4a437
Loading
Loading
Loading
Loading
+21 −12
Original line number Diff line number Diff line
@@ -229,8 +229,9 @@ public class LatinIME extends InputMethodService
    private int mDeleteCount;
    private long mLastKeyTime;

    // Shift modifier key state
    // Modifier keys state
    private ModifierKeyState mShiftKeyState = new ModifierKeyState();
    private ModifierKeyState mSymbolKeyState = new ModifierKeyState();

    private Tutorial mTutorial;

@@ -1133,6 +1134,7 @@ public class LatinIME extends InputMethodService
            mDeleteCount = 0;
        }
        mLastKeyTime = when;
        final boolean distinctMultiTouch = mKeyboardSwitcher.hasDistinctMultitouch();
        switch (primaryCode) {
            case Keyboard.KEYCODE_DELETE:
                handleBackspace();
@@ -1141,9 +1143,14 @@ public class LatinIME extends InputMethodService
                break;
            case Keyboard.KEYCODE_SHIFT:
                // Shift key is handled in onPress() when device has distinct multi-touch panel.
                if (!mKeyboardSwitcher.hasDistinctMultitouch())
                if (!distinctMultiTouch)
                    handleShift();
                break;
            case Keyboard.KEYCODE_MODE_CHANGE:
                // Symbol key is handled in onPress() when device has distinct multi-touch panel.
                if (!distinctMultiTouch)
                    changeKeyboardMode();
                break;
            case Keyboard.KEYCODE_CANCEL:
                if (!isShowingOptionDialog()) {
                    handleClose();
@@ -1161,10 +1168,6 @@ public class LatinIME extends InputMethodService
            case LatinKeyboardView.KEYCODE_PREV_LANGUAGE:
                toggleLanguage(false, false);
                break;
            case Keyboard.KEYCODE_MODE_CHANGE:
                // TODO: Mode change (symbol key) should be handled in onPress().
                changeKeyboardMode();
                break;
            case LatinKeyboardView.KEYCODE_VOICE:
                if (VOICE_INSTALLED) {
                    startListening(false /* was a button press, was not a swipe */);
@@ -2210,13 +2213,16 @@ public class LatinIME extends InputMethodService
    public void onPress(int primaryCode) {
        vibrate();
        playKeyClick(primaryCode);
        if (mKeyboardSwitcher.hasDistinctMultitouch() && primaryCode == Keyboard.KEYCODE_SHIFT) {
        final boolean distinctMultiTouch = mKeyboardSwitcher.hasDistinctMultitouch();
        if (distinctMultiTouch && primaryCode == Keyboard.KEYCODE_SHIFT) {
            mShiftKeyState.onPress();
            handleShift();
        } else if (primaryCode == Keyboard.KEYCODE_MODE_CHANGE) {
            // TODO: We should handle KEYCODE_MODE_CHANGE (symbol) here as well.
        } else if (distinctMultiTouch && primaryCode == Keyboard.KEYCODE_MODE_CHANGE) {
            mSymbolKeyState.onPress();
            changeKeyboardMode();
        } else {
            mShiftKeyState.onOtherKeyPressed();
            mSymbolKeyState.onOtherKeyPressed();
        }
    }

@@ -2224,12 +2230,15 @@ public class LatinIME extends InputMethodService
        // Reset any drag flags in the keyboard
        ((LatinKeyboard) mKeyboardSwitcher.getInputView().getKeyboard()).keyReleased();
        //vibrate();
        if (mKeyboardSwitcher.hasDistinctMultitouch() && primaryCode == Keyboard.KEYCODE_SHIFT) {
        final boolean distinctMultiTouch = mKeyboardSwitcher.hasDistinctMultitouch();
        if (distinctMultiTouch && primaryCode == Keyboard.KEYCODE_SHIFT) {
            if (mShiftKeyState.isMomentary())
                resetShift();
            mShiftKeyState.onRelease();
        } else if (primaryCode == Keyboard.KEYCODE_MODE_CHANGE) {
            // TODO: We should handle KEYCODE_MODE_CHANGE (symbol) here as well.
        } else if (distinctMultiTouch && primaryCode == Keyboard.KEYCODE_MODE_CHANGE) {
            if (mSymbolKeyState.isMomentary())
                changeKeyboardMode();
            mSymbolKeyState.onRelease();
        }
    }

+0 −3
Original line number Diff line number Diff line
@@ -52,9 +52,6 @@ public class LatinKeyboardView extends LatinKeyboardBaseView {
    /** The y coordinate of the last row */
    private int mLastRowY;

    // This is local working variable for onLongPress().
    private int[] mKeyCodes = new int[1];

    public LatinKeyboardView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
+17 −10
Original line number Diff line number Diff line
@@ -111,6 +111,8 @@ public class PointerTracker {
            throw new IllegalArgumentException();
        mKeys = keys;
        mKeyDebounceThresholdSquared = (int)(hysteresisPixel * hysteresisPixel);
        // Update current key index because keyboard layout has been changed.
        mCurrentKey = mKeyDetector.getKeyIndexAndNearbyCodes(mStartX, mStartY, null);
    }

    private boolean isValidKeyIndex(int keyIndex) {
@@ -126,8 +128,8 @@ public class PointerTracker {
        if (key == null)
            return false;
        int primaryCode = key.codes[0];
        // TODO: KEYCODE_MODE_CHANGE (symbol) will be also a modifier key
        return primaryCode == Keyboard.KEYCODE_SHIFT;
        return primaryCode == Keyboard.KEYCODE_SHIFT
                || primaryCode == Keyboard.KEYCODE_MODE_CHANGE;
    }

    public void updateKey(int keyIndex) {
@@ -173,6 +175,8 @@ public class PointerTracker {
    }

    public void onDownEvent(int x, int y, long eventTime) {
        if (DEBUG)
            debugLog("onDownEvent:", x, y);
        int keyIndex = mKeyDetector.getKeyIndexAndNearbyCodes(x, y, null);
        mCurrentKey = keyIndex;
        mStartX = x;
@@ -186,6 +190,8 @@ public class PointerTracker {
        if (mListener != null) {
            int primaryCode = isValidKeyIndex(keyIndex) ? mKeys[keyIndex].codes[0] : 0;
            mListener.onPress(primaryCode);
            // This onPress call may have changed keyboard layout and have updated mCurrentKey
            keyIndex = mCurrentKey;
        }
        if (isValidKeyIndex(keyIndex)) {
            if (mKeys[keyIndex].repeatable) {
@@ -197,11 +203,11 @@ public class PointerTracker {
        }
        showKeyPreviewAndUpdateKey(keyIndex);
        updateMoveDebouncing(x, y);
        if (DEBUG)
            debugLog("onDownEvent:", x, y);
    }

    public void onMoveEvent(int x, int y, long eventTime) {
        if (DEBUG_MOVE)
            debugLog("onMoveEvent:", x, y);
        if (mKeyAlreadyProcessed)
            return;
        int keyIndex = mKeyDetector.getKeyIndexAndNearbyCodes(x, y, null);
@@ -242,15 +248,13 @@ public class PointerTracker {
         */
        showKeyPreviewAndUpdateKey(isMinorTimeBounce() ? mLastKey : mCurrentKey);
        updateMoveDebouncing(x, y);
        if (DEBUG_MOVE)
            debugLog("onMoveEvent:", x, y);
    }

    public void onUpEvent(int x, int y, long eventTime) {
        if (mKeyAlreadyProcessed)
            return;
        if (DEBUG)
            debugLog("onUpEvent  :", x, y);
        if (mKeyAlreadyProcessed)
            return;
        mHandler.cancelKeyTimers();
        mHandler.cancelPopupPreview();
        int keyIndex = mKeyDetector.getKeyIndexAndNearbyCodes(x, y, null);
@@ -384,9 +388,12 @@ public class PointerTracker {
        // The modifier key, such as shift key, should not be shown as preview when multi-touch is
        // supported. On thge other hand, if multi-touch is not supported, the modifier key should
        // be shown as preview.
        if (!isModifier() || !mHasDistinctMultitouch)
        if (mHasDistinctMultitouch && isModifier()) {
            mProxy.showPreview(NOT_A_KEY, this);
        } else {
            mProxy.showPreview(keyIndex, this);
        }
    }

    private void detectAndSendKey(int index, int x, int y, long eventTime) {
        final OnKeyboardActionListener listener = mListener;
@@ -478,7 +485,7 @@ public class PointerTracker {
    }

    private void debugLog(String title, int x, int y) {
        Key key = getKey(mCurrentKey);
        Key key = getKey(mKeyDetector.getKeyIndexAndNearbyCodes(x, y, null));
        final String code;
        if (key == null) {
            code = "----";