Loading java/src/com/android/inputmethod/latin/LatinIME.java +21 −12 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); Loading @@ -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(); Loading @@ -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 */); Loading Loading @@ -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(); } } Loading @@ -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(); } } Loading java/src/com/android/inputmethod/latin/LatinKeyboardView.java +0 −3 Original line number Diff line number Diff line Loading @@ -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); } Loading java/src/com/android/inputmethod/latin/PointerTracker.java +17 −10 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -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) { Loading Loading @@ -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; Loading @@ -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) { Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -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; Loading Loading @@ -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 = "----"; Loading Loading
java/src/com/android/inputmethod/latin/LatinIME.java +21 −12 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); Loading @@ -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(); Loading @@ -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 */); Loading Loading @@ -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(); } } Loading @@ -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(); } } Loading
java/src/com/android/inputmethod/latin/LatinKeyboardView.java +0 −3 Original line number Diff line number Diff line Loading @@ -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); } Loading
java/src/com/android/inputmethod/latin/PointerTracker.java +17 −10 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -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) { Loading Loading @@ -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; Loading @@ -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) { Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -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; Loading Loading @@ -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 = "----"; Loading