Merge "Narrower key timer handler static inner class to TimerProxy interface"
diff --git a/java/src/com/android/inputmethod/keyboard/LatinKeyboardBaseView.java b/java/src/com/android/inputmethod/keyboard/LatinKeyboardBaseView.java
index 60af1ec..06cd319 100644
--- a/java/src/com/android/inputmethod/keyboard/LatinKeyboardBaseView.java
+++ b/java/src/com/android/inputmethod/keyboard/LatinKeyboardBaseView.java
@@ -33,6 +33,7 @@
 
 import com.android.inputmethod.accessibility.AccessibilityUtils;
 import com.android.inputmethod.accessibility.AccessibleKeyboardViewProxy;
+import com.android.inputmethod.keyboard.PointerTracker.TimerProxy;
 import com.android.inputmethod.keyboard.internal.MiniKeyboardBuilder;
 import com.android.inputmethod.keyboard.internal.PointerTrackerQueue;
 import com.android.inputmethod.latin.R;
@@ -86,7 +87,8 @@
 
     private final KeyTimerHandler mKeyTimerHandler = new KeyTimerHandler(this);
 
-    public static class KeyTimerHandler extends StaticInnerHandlerWrapper<LatinKeyboardBaseView> {
+    private static class KeyTimerHandler extends StaticInnerHandlerWrapper<LatinKeyboardBaseView>
+            implements TimerProxy {
         private static final int MSG_REPEAT_KEY = 1;
         private static final int MSG_LONGPRESS_KEY = 2;
         private static final int MSG_LONGPRESS_SHIFT_KEY = 3;
@@ -116,6 +118,7 @@
             }
         }
 
+        @Override
         public void startKeyRepeatTimer(long delay, int keyIndex, PointerTracker tracker) {
             mInKeyRepeat = true;
             sendMessageDelayed(obtainMessage(MSG_REPEAT_KEY, keyIndex, 0, tracker), delay);
@@ -130,11 +133,13 @@
             return mInKeyRepeat;
         }
 
+        @Override
         public void startLongPressTimer(long delay, int keyIndex, PointerTracker tracker) {
             cancelLongPressTimers();
             sendMessageDelayed(obtainMessage(MSG_LONGPRESS_KEY, keyIndex, 0, tracker), delay);
         }
 
+        @Override
         public void startLongPressShiftTimer(long delay, int keyIndex, PointerTracker tracker) {
             cancelLongPressTimers();
             if (ENABLE_CAPSLOCK_BY_LONGPRESS) {
@@ -143,11 +148,13 @@
             }
         }
 
+        @Override
         public void cancelLongPressTimers() {
             removeMessages(MSG_LONGPRESS_KEY);
             removeMessages(MSG_LONGPRESS_SHIFT_KEY);
         }
 
+        @Override
         public void cancelKeyTimers() {
             cancelKeyRepeatTimer();
             cancelLongPressTimers();
diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
index 5fe93bd..c960c76 100644
--- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
@@ -22,7 +22,6 @@
 import android.util.Log;
 import android.view.MotionEvent;
 
-import com.android.inputmethod.keyboard.LatinKeyboardBaseView.KeyTimerHandler;
 import com.android.inputmethod.keyboard.internal.PointerTrackerQueue;
 import com.android.inputmethod.latin.LatinImeLogger;
 import com.android.inputmethod.latin.R;
@@ -45,6 +44,14 @@
         public void dismissKeyPreview(PointerTracker tracker);
     }
 
+    public interface TimerProxy {
+        public void startKeyRepeatTimer(long delay, int keyIndex, PointerTracker tracker);
+        public void startLongPressTimer(long delay, int keyIndex, PointerTracker tracker);
+        public void startLongPressShiftTimer(long delay, int keyIndex, PointerTracker tracker);
+        public void cancelLongPressTimers();
+        public void cancelKeyTimers();
+    }
+
     public final int mPointerId;
 
     // Timing constants
@@ -53,7 +60,7 @@
     private final int mLongPressShiftKeyTimeout;
 
     private final DrawingProxy mDrawingProxy;
-    private final KeyTimerHandler mKeyTimerHandler;
+    private final TimerProxy mTimerProxy;
     private final PointerTrackerQueue mPointerTrackerQueue;
     private KeyDetector mKeyDetector;
     private KeyboardActionListener mListener = EMPTY_LISTENER;
@@ -119,13 +126,13 @@
         public void onCancelInput() {}
     };
 
-    public PointerTracker(int id, Context context, KeyTimerHandler keyTimerHandler,
-            KeyDetector keyDetector, DrawingProxy drawingProxy, PointerTrackerQueue queue) {
-        if (drawingProxy == null || keyTimerHandler == null || keyDetector == null)
+    public PointerTracker(int id, Context context, TimerProxy timerProxy, KeyDetector keyDetector,
+            DrawingProxy drawingProxy, PointerTrackerQueue queue) {
+        if (drawingProxy == null || timerProxy == null || keyDetector == null)
             throw new NullPointerException();
         mPointerId = id;
         mDrawingProxy = drawingProxy;
-        mKeyTimerHandler = keyTimerHandler;
+        mTimerProxy = timerProxy;
         mPointerTrackerQueue = queue;  // This is null for non-distinct multi-touch device.
         setKeyDetectorInner(keyDetector);
         mKeyboardSwitcher = KeyboardSwitcher.getInstance();
@@ -442,7 +449,7 @@
                 setReleasedKeyGraphics(oldKeyIndex);
                 callListenerOnRelease(oldKey, oldKey.mCode, true);
                 startSlidingKeyInput(oldKey);
-                mKeyTimerHandler.cancelKeyTimers();
+                mTimerProxy.cancelKeyTimers();
                 startRepeatKey(keyIndex);
                 if (mIsAllowedSlidingKeyInput) {
                     // This onPress call may have changed keyboard layout. Those cases are detected
@@ -501,7 +508,7 @@
                 setReleasedKeyGraphics(oldKeyIndex);
                 callListenerOnRelease(oldKey, oldKey.mCode, true);
                 startSlidingKeyInput(oldKey);
-                mKeyTimerHandler.cancelLongPressTimers();
+                mTimerProxy.cancelLongPressTimers();
                 if (mIsAllowedSlidingKeyInput) {
                     onMoveToNewKey(keyIndex, x, y);
                 } else {
@@ -542,7 +549,7 @@
 
     private void onUpEventInternal(int x, int y, long eventTime,
             boolean updateReleasedKeyGraphics) {
-        mKeyTimerHandler.cancelKeyTimers();
+        mTimerProxy.cancelKeyTimers();
         mDrawingProxy.cancelShowKeyPreview(this);
         mIsInSlidingKeyInput = false;
         final int keyX, keyY;
@@ -602,7 +609,7 @@
     }
 
     private void onCancelEventInternal() {
-        mKeyTimerHandler.cancelKeyTimers();
+        mTimerProxy.cancelKeyTimers();
         mDrawingProxy.cancelShowKeyPreview(this);
         dismissKeyPreview();
         setReleasedKeyGraphics(mKeyIndex);
@@ -614,7 +621,7 @@
         if (key != null && key.mRepeatable) {
             dismissKeyPreview();
             onRepeatKey(keyIndex);
-            mKeyTimerHandler.startKeyRepeatTimer(mDelayBeforeKeyRepeatStart, keyIndex, this);
+            mTimerProxy.startKeyRepeatTimer(mDelayBeforeKeyRepeatStart, keyIndex, this);
             mIsRepeatableKey = true;
         } else {
             mIsRepeatableKey = false;
@@ -668,16 +675,16 @@
     private void startLongPressTimer(int keyIndex) {
         Key key = getKey(keyIndex);
         if (key.mCode == Keyboard.CODE_SHIFT) {
-            mKeyTimerHandler.startLongPressShiftTimer(mLongPressShiftKeyTimeout, keyIndex, this);
+            mTimerProxy.startLongPressShiftTimer(mLongPressShiftKeyTimeout, keyIndex, this);
         } else if (key.hasUppercaseLetter() && mKeyboard.isManualTemporaryUpperCase()) {
             // We need not start long press timer on the key which has manual temporary upper case
             // code defined and the keyboard is in manual temporary upper case mode.
             return;
         } else if (mKeyboardSwitcher.isInMomentarySwitchState()) {
             // We use longer timeout for sliding finger input started from the symbols mode key.
-            mKeyTimerHandler.startLongPressTimer(mLongPressKeyTimeout * 3, keyIndex, this);
+            mTimerProxy.startLongPressTimer(mLongPressKeyTimeout * 3, keyIndex, this);
         } else {
-            mKeyTimerHandler.startLongPressTimer(mLongPressKeyTimeout, keyIndex, this);
+            mTimerProxy.startLongPressTimer(mLongPressKeyTimeout, keyIndex, this);
         }
     }