aboutsummaryrefslogtreecommitdiffstats
path: root/java/src
diff options
context:
space:
mode:
authorTadashi G. Takaoka <takaoka@google.com>2012-07-10 04:19:40 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-07-10 04:19:40 -0700
commit20823b462311fb17c46ff52bff38410431f17389 (patch)
tree4e1298a1137492a7bd96793a8e9cb27c79baa615 /java/src
parent2ae75ed56be5d08979d832cf3ddec16dc61e8dcf (diff)
parent5e06b8534ffdf5099d2ef4551b113a103cdf7061 (diff)
downloadlatinime-20823b462311fb17c46ff52bff38410431f17389.tar.gz
latinime-20823b462311fb17c46ff52bff38410431f17389.tar.xz
latinime-20823b462311fb17c46ff52bff38410431f17389.zip
Merge "Register the key when the finger slides off it in multitouch"
Diffstat (limited to 'java/src')
-rw-r--r--java/src/com/android/inputmethod/keyboard/PointerTracker.java9
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java15
2 files changed, 24 insertions, 0 deletions
diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
index 32ef408b4..1ae0020a4 100644
--- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
@@ -610,6 +610,15 @@ public class PointerTracker {
onUpEventInternal();
onDownEventInternal(x, y, eventTime);
} else {
+ // HACK: If there are currently multiple touches, register the key even if
+ // the finger slides off the key. This defends against noise from some
+ // touch panels when there are close multiple touches.
+ // Caveat: When in chording input mode with a modifier key, we don't use
+ // this hack.
+ if (me != null && me.getPointerCount() > 1
+ && !sPointerTrackerQueue.hasModifierKeyOlderThan(this)) {
+ onUpEventInternal();
+ }
mKeyAlreadyProcessed = true;
setReleasedKeyGraphics(oldKey);
}
diff --git a/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java b/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java
index 5db65c660..d3bb85d4b 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java
@@ -28,6 +28,7 @@ public class PointerTrackerQueue {
private static final String TAG = PointerTrackerQueue.class.getSimpleName();
private static final boolean DEBUG = false;
+ // TODO: Use ring buffer instead of {@link LinkedList}.
private final LinkedList<PointerTracker> mQueue = new LinkedList<PointerTracker>();
public synchronized void add(PointerTracker tracker) {
@@ -81,6 +82,20 @@ public class PointerTrackerQueue {
}
}
+ public synchronized boolean hasModifierKeyOlderThan(PointerTracker tracker) {
+ final Iterator<PointerTracker> it = mQueue.iterator();
+ while (it.hasNext()) {
+ final PointerTracker t = it.next();
+ if (t == tracker) {
+ break;
+ }
+ if (t.isModifier()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
public synchronized boolean isAnyInSlidingKeyInput() {
for (final PointerTracker tracker : mQueue) {
if (tracker.isInSlidingKeyInput()) {