diff options
author | 2012-02-16 11:45:35 -0800 | |
---|---|---|
committer | 2012-02-16 18:02:17 -0800 | |
commit | beb08b398fa73a26f2d42d6feec87e34a96ca2d9 (patch) | |
tree | 0d7e415c8003973f1dc71db379a4319cf620778c /java/src/com/android/inputmethod | |
parent | 25ff89a75cb8b797bdaf0c7b78e50fd454c1b1e2 (diff) | |
download | latinime-beb08b398fa73a26f2d42d6feec87e34a96ca2d9.tar.gz latinime-beb08b398fa73a26f2d42d6feec87e34a96ca2d9.tar.xz latinime-beb08b398fa73a26f2d42d6feec87e34a96ca2d9.zip |
Remove unnecessary and harmful KeyboardState.onUpdateShiftState call
This change also cancels double tap and long press timers if other
letter key is pressed after shift key.
Bug: 5693999
Bug: 6017610
Change-Id: I3b5f3debfb8915fa73a93b409a38afadf24132e9
Diffstat (limited to 'java/src/com/android/inputmethod')
6 files changed, 63 insertions, 7 deletions
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java index 5ba560d72..d5e5a4e53 100644 --- a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java +++ b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java @@ -268,6 +268,16 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions, // Implements {@link KeyboardState.SwitchActions}. @Override + public void cancelDoubleTapTimer() { + final LatinKeyboardView keyboardView = getKeyboardView(); + if (keyboardView != null) { + final TimerProxy timer = keyboardView.getTimerProxy(); + timer.cancelDoubleTapTimer(); + } + } + + // Implements {@link KeyboardState.SwitchActions}. + @Override public boolean isInDoubleTapTimeout() { final LatinKeyboardView keyboardView = getKeyboardView(); return (keyboardView != null) @@ -286,6 +296,16 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions, // Implements {@link KeyboardState.SwitchActions}. @Override + public void cancelLongPressTimer() { + final LatinKeyboardView keyboardView = getKeyboardView(); + if (keyboardView != null) { + final TimerProxy timer = keyboardView.getTimerProxy(); + timer.cancelLongPressTimer(); + } + } + + // Implements {@link KeyboardState.SwitchActions}. + @Override public void hapticAndAudioFeedback(int code) { mInputMethodService.hapticAndAudioFeedback(code); } diff --git a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java index 88a41579d..9a0fe1efa 100644 --- a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java +++ b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java @@ -233,6 +233,11 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke } @Override + public void cancelDoubleTapTimer() { + removeMessages(MSG_DOUBLE_TAP); + } + + @Override public boolean isInDoubleTapTimeout() { return hasMessages(MSG_DOUBLE_TAP); } diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java index 110f7f6ae..c45308419 100644 --- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java +++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java @@ -77,6 +77,7 @@ public class PointerTracker { public void startLongPressTimer(int code); public void cancelLongPressTimer(); public void startDoubleTapTimer(); + public void cancelDoubleTapTimer(); public boolean isInDoubleTapTimeout(); public void cancelKeyTimers(); @@ -96,6 +97,8 @@ public class PointerTracker { @Override public void startDoubleTapTimer() {} @Override + public void cancelDoubleTapTimer() {} + @Override public boolean isInDoubleTapTimeout() { return false; } @Override public void cancelKeyTimers() {} diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java index cb8b4f05c..6a8a03677 100644 --- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java +++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java @@ -54,7 +54,9 @@ public class KeyboardState { public void startDoubleTapTimer(); public boolean isInDoubleTapTimeout(); + public void cancelDoubleTapTimer(); public void startLongPressTimer(int code); + public void cancelLongPressTimer(); public void hapticAndAudioFeedback(int code); } @@ -300,6 +302,8 @@ public class KeyboardState { } else if (code == Keyboard.CODE_SWITCH_ALPHA_SYMBOL) { onPressSymbol(); } else { + mSwitchActions.cancelDoubleTapTimer(); + mSwitchActions.cancelLongPressTimer(); mShiftKeyState.onOtherKeyPressed(); mSymbolKeyState.onOtherKeyPressed(); } @@ -348,7 +352,7 @@ public class KeyboardState { // state. And mark as if shift key is released. mShiftKeyState.onRelease(); } else { - // Shift key is long pressed while shift unloked state. + // Shift key is long pressed while shift unlocked state. setShiftLocked(true); } mSwitchActions.hapticAndAudioFeedback(code); @@ -364,6 +368,11 @@ public class KeyboardState { private void updateAlphabetShiftState(boolean autoCaps) { if (!mIsAlphabetMode) return; + if (!mShiftKeyState.isReleasing()) { + // Ignore update shift state event while the shift key is being pressed (including + // chording). + return; + } if (!mAlphabetShiftState.isShiftLocked() && !mShiftKeyState.isIgnoring()) { if (mShiftKeyState.isReleasing() && autoCaps) { // Only when shift key is releasing, automatic temporary upper case will be set. diff --git a/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java b/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java index d9181f786..5db65c660 100644 --- a/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java +++ b/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java @@ -16,12 +16,18 @@ package com.android.inputmethod.keyboard.internal; +import android.util.Log; + +import com.android.inputmethod.keyboard.Keyboard; import com.android.inputmethod.keyboard.PointerTracker; import java.util.Iterator; import java.util.LinkedList; public class PointerTrackerQueue { + private static final String TAG = PointerTrackerQueue.class.getSimpleName(); + private static final boolean DEBUG = false; + private final LinkedList<PointerTracker> mQueue = new LinkedList<PointerTracker>(); public synchronized void add(PointerTracker tracker) { @@ -32,7 +38,11 @@ public class PointerTrackerQueue { mQueue.remove(tracker); } - public synchronized void releaseAllPointersOlderThan(PointerTracker tracker, long eventTime) { + public synchronized void releaseAllPointersOlderThan(PointerTracker tracker, + long eventTime) { + if (DEBUG) { + Log.d(TAG, "releaseAllPoniterOlderThan: [" + tracker.mPointerId + "] " + this); + } if (!mQueue.contains(tracker)) { return; } @@ -54,6 +64,13 @@ public class PointerTrackerQueue { } public synchronized void releaseAllPointersExcept(PointerTracker tracker, long eventTime) { + if (DEBUG) { + if (tracker == null) { + Log.d(TAG, "releaseAllPoniters: " + this); + } else { + Log.d(TAG, "releaseAllPoniterExcept: [" + tracker.mPointerId + "] " + this); + } + } final Iterator<PointerTracker> it = mQueue.iterator(); while (it.hasNext()) { final PointerTracker t = it.next(); @@ -79,8 +96,9 @@ public class PointerTrackerQueue { for (final PointerTracker tracker : mQueue) { if (sb.length() > 0) sb.append(" "); - sb.append(tracker.mPointerId); + sb.append("[" + tracker.mPointerId + " " + + Keyboard.printableCode(tracker.getKey().mCode) + "]"); } - return "[" + sb + "]"; + return sb.toString(); } } diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 1cb79e707..730992b13 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -325,7 +325,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar return hasMessages(MSG_UPDATE_SUGGESTIONS); } - public void postUpdateShiftKeyState() { + public void postUpdateShiftState() { removeMessages(MSG_UPDATE_SHIFT_STATE); sendMessageDelayed(obtainMessage(MSG_UPDATE_SHIFT_STATE), mDelayUpdateShiftState); } @@ -898,9 +898,10 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar resetComposingState(true /* alsoResetLastComposedWord */); updateSuggestions(); } + + mHandler.postUpdateShiftState(); } mExpectingUpdateSelection = false; - mHandler.postUpdateShiftKeyState(); // TODO: Decide to call restartSuggestionsOnWordBeforeCursorIfAtEndOfWord() or not // here. It would probably be too expensive to call directly here but we may want to post a // message to delay it. The point would be to unify behavior between backspace to the @@ -1391,7 +1392,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar mVoiceProxy.handleBackspace(); // In many cases, we may have to put the keyboard in auto-shift state again. - mHandler.postUpdateShiftKeyState(); + mHandler.postUpdateShiftState(); if (mEnteredText != null && sameAsTextBeforeCursor(ic, mEnteredText)) { // Cancel multi-character input: remove the text we just entered. |