aboutsummaryrefslogtreecommitdiffstats
path: root/java/src
diff options
context:
space:
mode:
authorTadashi G. Takaoka <takaoka@google.com>2013-01-09 01:12:59 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2013-01-09 01:12:59 -0800
commite56686f43af81db965941a393c5e0231c26ec77b (patch)
tree05f3581da999fb76b5dff68a8d0446c6a19ed29d /java/src
parent28772899d2fd0f452d1beca79c03123eaee53c0f (diff)
parent915f348b35cb66ed9696a51c9250f9b25799fb82 (diff)
downloadlatinime-e56686f43af81db965941a393c5e0231c26ec77b.tar.gz
latinime-e56686f43af81db965941a393c5e0231c26ec77b.tar.xz
latinime-e56686f43af81db965941a393c5e0231c26ec77b.zip
Merge "Cancel update batch input timer whenever MotionEvent is received"
Diffstat (limited to 'java/src')
-rw-r--r--java/src/com/android/inputmethod/keyboard/MainKeyboardView.java5
-rw-r--r--java/src/com/android/inputmethod/keyboard/PointerTracker.java5
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/GestureStroke.java14
3 files changed, 24 insertions, 0 deletions
diff --git a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
index 130fad851..625575d53 100644
--- a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
@@ -366,6 +366,11 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
}
@Override
+ public void cancelUpdateBatchInputTimer(final PointerTracker tracker) {
+ removeMessages(MSG_UPDATE_BATCH_INPUT, tracker);
+ }
+
+ @Override
public void cancelAllUpdateBatchInputTimers() {
removeMessages(MSG_UPDATE_BATCH_INPUT);
}
diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
index 1ee87bebb..62e674ad5 100644
--- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
@@ -98,6 +98,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
public boolean isInDoubleTapTimeout();
public void cancelKeyTimers();
public void startUpdateBatchInputTimer(PointerTracker tracker);
+ public void cancelUpdateBatchInputTimer(PointerTracker tracker);
public void cancelAllUpdateBatchInputTimers();
public static class Adapter implements TimerProxy {
@@ -124,6 +125,8 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
@Override
public void startUpdateBatchInputTimer(PointerTracker tracker) {}
@Override
+ public void cancelUpdateBatchInputTimer(PointerTracker tracker) {}
+ @Override
public void cancelAllUpdateBatchInputTimers() {}
}
}
@@ -940,6 +943,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
if (DEBUG_MOVE_EVENT) {
printTouchEvent("onMoveEvent:", x, y, eventTime);
}
+ mTimerProxy.cancelUpdateBatchInputTimer(this);
if (mIsTrackingCanceled) {
return;
}
@@ -1124,6 +1128,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
printTouchEvent("onUpEvent :", x, y, eventTime);
}
+ mTimerProxy.cancelUpdateBatchInputTimer(this);
if (!sInGesture) {
if (mCurrentKey != null && mCurrentKey.isModifier()) {
// Before processing an up event of modifier key, all pointers already being
diff --git a/java/src/com/android/inputmethod/keyboard/internal/GestureStroke.java b/java/src/com/android/inputmethod/keyboard/internal/GestureStroke.java
index a43e94a75..adf223602 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/GestureStroke.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/GestureStroke.java
@@ -233,6 +233,10 @@ public class GestureStroke {
if (lastIndex >= 0) {
final int x = mXCoordinates.get(lastIndex);
final int y = mYCoordinates.get(lastIndex);
+ if (DEBUG) {
+ Log.d(TAG, String.format("[%d] duplicateLastPointWith: %d,%d|%d", mPointerId,
+ x, y, time));
+ }
// TODO: Have appendMajorPoint()
appendPoint(x, y, time);
updateIncrementalRecognitionSize(x, y, time);
@@ -251,6 +255,16 @@ public class GestureStroke {
}
private void appendPoint(final int x, final int y, final int time) {
+ final int lastIndex = mEventTimes.getLength() - 1;
+ // The point that is created by {@link duplicateLastPointWith(int)} may have later event
+ // time than the next {@link MotionEvent}. To maintain the monotonicity of the event time,
+ // drop the successive point here.
+ if (lastIndex >= 0 && mEventTimes.get(lastIndex) > time) {
+ Log.w(TAG, String.format("[%d] drop stale event: %d,%d|%d last: %d,%d|%d", mPointerId,
+ x, y, time, mXCoordinates.get(lastIndex), mYCoordinates.get(lastIndex),
+ mEventTimes.get(lastIndex)));
+ return;
+ }
mEventTimes.add(time);
mXCoordinates.add(x);
mYCoordinates.add(y);