diff --git a/java/res/drawable-hdpi/btn_keyboard_key_popup_background_holo.9.png b/java/res/drawable-hdpi/btn_keyboard_key_popup_background_holo.9.png
index 046bac6..d3d8314 100644
--- a/java/res/drawable-hdpi/btn_keyboard_key_popup_background_holo.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_popup_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_popup_selected_holo.9.png b/java/res/drawable-hdpi/btn_keyboard_key_popup_selected_holo.9.png
index 166de2a..26a5427 100644
--- a/java/res/drawable-hdpi/btn_keyboard_key_popup_selected_holo.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_popup_selected_holo.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_background_holo.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_background_holo.9.png
index e994560..36809d4 100644
--- a/java/res/drawable-hdpi/keyboard_key_feedback_background_holo.9.png
+++ b/java/res/drawable-hdpi/keyboard_key_feedback_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_left_background_holo.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_left_background_holo.9.png
index 0891b91..59c8fd2 100644
--- a/java/res/drawable-hdpi/keyboard_key_feedback_left_background_holo.9.png
+++ b/java/res/drawable-hdpi/keyboard_key_feedback_left_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_left_more_background_holo.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_left_more_background_holo.9.png
index 28975d1..875c656 100644
--- a/java/res/drawable-hdpi/keyboard_key_feedback_left_more_background_holo.9.png
+++ b/java/res/drawable-hdpi/keyboard_key_feedback_left_more_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_more_background_holo.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_more_background_holo.9.png
index 462072c..4bd7743 100644
--- a/java/res/drawable-hdpi/keyboard_key_feedback_more_background_holo.9.png
+++ b/java/res/drawable-hdpi/keyboard_key_feedback_more_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_right_background_holo.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_right_background_holo.9.png
index 72c474c..e4ae59d 100644
--- a/java/res/drawable-hdpi/keyboard_key_feedback_right_background_holo.9.png
+++ b/java/res/drawable-hdpi/keyboard_key_feedback_right_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_right_more_background_holo.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_right_more_background_holo.9.png
index 8035afd..9af394e 100644
--- a/java/res/drawable-hdpi/keyboard_key_feedback_right_more_background_holo.9.png
+++ b/java/res/drawable-hdpi/keyboard_key_feedback_right_more_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_shift_holo.png b/java/res/drawable-hdpi/sym_keyboard_shift_holo.png
index faf6b29..c38ef4f 100644
--- a/java/res/drawable-hdpi/sym_keyboard_shift_holo.png
+++ b/java/res/drawable-hdpi/sym_keyboard_shift_holo.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_shift_locked_holo.png b/java/res/drawable-hdpi/sym_keyboard_shift_locked_holo.png
index f2b9fce..2754c7a 100644
--- a/java/res/drawable-hdpi/sym_keyboard_shift_locked_holo.png
+++ b/java/res/drawable-hdpi/sym_keyboard_shift_locked_holo.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_space_holo.png b/java/res/drawable-hdpi/sym_keyboard_space_holo.png
index 908f1ed..2c350d5 100644
--- a/java/res/drawable-hdpi/sym_keyboard_space_holo.png
+++ b/java/res/drawable-hdpi/sym_keyboard_space_holo.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_popup_background_holo.9.png b/java/res/drawable-mdpi/btn_keyboard_key_popup_background_holo.9.png
index d66309d..633aaa2 100644
--- a/java/res/drawable-mdpi/btn_keyboard_key_popup_background_holo.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_popup_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_popup_selected_holo.9.png b/java/res/drawable-mdpi/btn_keyboard_key_popup_selected_holo.9.png
index e96c8c5..a2df532 100644
--- a/java/res/drawable-mdpi/btn_keyboard_key_popup_selected_holo.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_popup_selected_holo.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_background_holo.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_background_holo.9.png
index f3be5fd..cc7dd86 100644
--- a/java/res/drawable-mdpi/keyboard_key_feedback_background_holo.9.png
+++ b/java/res/drawable-mdpi/keyboard_key_feedback_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_left_background_holo.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_left_background_holo.9.png
index 51eb7ed..0df04cf 100644
--- a/java/res/drawable-mdpi/keyboard_key_feedback_left_background_holo.9.png
+++ b/java/res/drawable-mdpi/keyboard_key_feedback_left_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_left_more_background_holo.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_left_more_background_holo.9.png
index de32364..6bde3e9 100644
--- a/java/res/drawable-mdpi/keyboard_key_feedback_left_more_background_holo.9.png
+++ b/java/res/drawable-mdpi/keyboard_key_feedback_left_more_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_more_background_holo.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_more_background_holo.9.png
index 1d893a5..3d5b788 100644
--- a/java/res/drawable-mdpi/keyboard_key_feedback_more_background_holo.9.png
+++ b/java/res/drawable-mdpi/keyboard_key_feedback_more_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_right_background_holo.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_right_background_holo.9.png
index 900e4ba..a191687 100644
--- a/java/res/drawable-mdpi/keyboard_key_feedback_right_background_holo.9.png
+++ b/java/res/drawable-mdpi/keyboard_key_feedback_right_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_right_more_background_holo.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_right_more_background_holo.9.png
index 78cb488..02e84d7 100644
--- a/java/res/drawable-mdpi/keyboard_key_feedback_right_more_background_holo.9.png
+++ b/java/res/drawable-mdpi/keyboard_key_feedback_right_more_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_shift_holo.png b/java/res/drawable-mdpi/sym_keyboard_shift_holo.png
index 13298ad..2d79663 100644
--- a/java/res/drawable-mdpi/sym_keyboard_shift_holo.png
+++ b/java/res/drawable-mdpi/sym_keyboard_shift_holo.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_shift_locked_holo.png b/java/res/drawable-mdpi/sym_keyboard_shift_locked_holo.png
index 594ebfe..05252e5 100644
--- a/java/res/drawable-mdpi/sym_keyboard_shift_locked_holo.png
+++ b/java/res/drawable-mdpi/sym_keyboard_shift_locked_holo.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_space_holo.png b/java/res/drawable-mdpi/sym_keyboard_space_holo.png
index 27e3d21..d4cbdcf 100644
--- a/java/res/drawable-mdpi/sym_keyboard_space_holo.png
+++ b/java/res/drawable-mdpi/sym_keyboard_space_holo.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_popup_background_holo.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_popup_background_holo.9.png
index cbcabe1..45401af 100644
--- a/java/res/drawable-xhdpi/btn_keyboard_key_popup_background_holo.9.png
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_popup_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_popup_selected_holo.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_popup_selected_holo.9.png
index 0a9a9e4..b5e514b 100644
--- a/java/res/drawable-xhdpi/btn_keyboard_key_popup_selected_holo.9.png
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_popup_selected_holo.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_key_feedback_background_holo.9.png b/java/res/drawable-xhdpi/keyboard_key_feedback_background_holo.9.png
index 0e4056f..ba28359 100644
--- a/java/res/drawable-xhdpi/keyboard_key_feedback_background_holo.9.png
+++ b/java/res/drawable-xhdpi/keyboard_key_feedback_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_key_feedback_left_background_holo.9.png b/java/res/drawable-xhdpi/keyboard_key_feedback_left_background_holo.9.png
index 353deed..4929780 100644
--- a/java/res/drawable-xhdpi/keyboard_key_feedback_left_background_holo.9.png
+++ b/java/res/drawable-xhdpi/keyboard_key_feedback_left_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_key_feedback_left_more_background_holo.9.png b/java/res/drawable-xhdpi/keyboard_key_feedback_left_more_background_holo.9.png
index 0c9a35e..8676746 100644
--- a/java/res/drawable-xhdpi/keyboard_key_feedback_left_more_background_holo.9.png
+++ b/java/res/drawable-xhdpi/keyboard_key_feedback_left_more_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_key_feedback_more_background_holo.9.png b/java/res/drawable-xhdpi/keyboard_key_feedback_more_background_holo.9.png
index 4ff7029..ab9ba45 100644
--- a/java/res/drawable-xhdpi/keyboard_key_feedback_more_background_holo.9.png
+++ b/java/res/drawable-xhdpi/keyboard_key_feedback_more_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_key_feedback_right_background_holo.9.png b/java/res/drawable-xhdpi/keyboard_key_feedback_right_background_holo.9.png
index 58e2922..a46979d 100644
--- a/java/res/drawable-xhdpi/keyboard_key_feedback_right_background_holo.9.png
+++ b/java/res/drawable-xhdpi/keyboard_key_feedback_right_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_key_feedback_right_more_background_holo.9.png b/java/res/drawable-xhdpi/keyboard_key_feedback_right_more_background_holo.9.png
index 06c33c0..63a5f45 100644
--- a/java/res/drawable-xhdpi/keyboard_key_feedback_right_more_background_holo.9.png
+++ b/java/res/drawable-xhdpi/keyboard_key_feedback_right_more_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_shift_holo.png b/java/res/drawable-xhdpi/sym_keyboard_shift_holo.png
index 8195112..b88fa13 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_shift_holo.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_shift_holo.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_shift_locked_holo.png b/java/res/drawable-xhdpi/sym_keyboard_shift_locked_holo.png
index ab4d61b..fc2998f 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_shift_locked_holo.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_shift_locked_holo.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_space_holo.png b/java/res/drawable-xhdpi/sym_keyboard_space_holo.png
index 2a11eaa..6d7f13e 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_space_holo.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_space_holo.png
Binary files differ
diff --git a/java/src/com/android/inputmethod/accessibility/AccessibleInputMethodServiceProxy.java b/java/src/com/android/inputmethod/accessibility/AccessibleInputMethodServiceProxy.java
index 7199550..89adc15 100644
--- a/java/src/com/android/inputmethod/accessibility/AccessibleInputMethodServiceProxy.java
+++ b/java/src/com/android/inputmethod/accessibility/AccessibleInputMethodServiceProxy.java
@@ -16,11 +16,15 @@
 
 package com.android.inputmethod.accessibility;
 
+import android.content.Context;
 import android.content.SharedPreferences;
 import android.inputmethodservice.InputMethodService;
+import android.media.AudioManager;
 import android.os.Looper;
 import android.os.Message;
+import android.os.Vibrator;
 import android.text.TextUtils;
+import android.view.KeyEvent;
 import android.view.inputmethod.ExtractedText;
 import android.view.inputmethod.ExtractedTextRequest;
 
@@ -38,8 +42,14 @@
      */
     private static final long DELAY_NO_HOVER_SELECTION = 250;
 
-    private InputMethodService mInputMethod;
+    /**
+     * Duration of the key click vibration in milliseconds.
+     */
+    private static final long VIBRATE_KEY_CLICK = 50;
 
+    private InputMethodService mInputMethod;
+    private Vibrator mVibrator;
+    private AudioManager mAudioManager;
     private AccessibilityHandler mAccessibilityHandler;
 
     private static class AccessibilityHandler
@@ -84,6 +94,8 @@
 
     private void initInternal(InputMethodService inputMethod, SharedPreferences prefs) {
         mInputMethod = inputMethod;
+        mVibrator = (Vibrator) inputMethod.getSystemService(Context.VIBRATOR_SERVICE);
+        mAudioManager = (AudioManager) inputMethod.getSystemService(Context.AUDIO_SERVICE);
         mAccessibilityHandler = new AccessibilityHandler(this, inputMethod.getMainLooper());
     }
 
@@ -107,6 +119,35 @@
     }
 
     /**
+     * Handle flick gestures by mapping them to directional pad keys.
+     */
+    @Override
+    public void onFlickGesture(int direction) {
+        final int keyEventCode;
+
+        switch (direction) {
+        case FlickGestureDetector.FLICK_LEFT:
+            sendDownUpKeyEvents(KeyEvent.KEYCODE_DPAD_LEFT);
+            break;
+        case FlickGestureDetector.FLICK_RIGHT:
+            sendDownUpKeyEvents(KeyEvent.KEYCODE_DPAD_RIGHT);
+            break;
+        }
+    }
+
+    /**
+     * Provide haptic feedback and send the specified keyCode to the input
+     * connection as a pair of down/up events.
+     *
+     * @param keyCode
+     */
+    private void sendDownUpKeyEvents(int keyCode) {
+        mVibrator.vibrate(VIBRATE_KEY_CLICK);
+        mAudioManager.playSoundEffect(AudioManager.FX_KEY_CLICK);
+        mInputMethod.sendDownUpKeyEvents(keyCode);
+    }
+
+    /**
      * When Accessibility is turned on, notifies the user that they are not
      * currently hovering above a key. By default this will speak the currently
      * entered text.
diff --git a/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardActionListener.java b/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardActionListener.java
index 12c59d0..c1e92be 100644
--- a/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardActionListener.java
+++ b/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardActionListener.java
@@ -34,4 +34,15 @@
      * @param primaryCode the code of the key that was hovered over
      */
     public void onHoverExit(int primaryCode);
+
+    /**
+     * @param direction the direction of the flick gesture, one of
+     *            <ul>
+     *              <li>{@link FlickGestureDetector#FLICK_UP}
+     *              <li>{@link FlickGestureDetector#FLICK_DOWN}
+     *              <li>{@link FlickGestureDetector#FLICK_LEFT}
+     *              <li>{@link FlickGestureDetector#FLICK_RIGHT}
+     *            </ul>
+     */
+    public void onFlickGesture(int direction);
 }
diff --git a/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java b/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
index 96f7fc9..a87ff98 100644
--- a/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
+++ b/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
@@ -42,6 +42,7 @@
     private int mScaledEdgeSlop;
     private KeyboardView mView;
     private AccessibleKeyboardActionListener mListener;
+    private FlickGestureDetector mGestureDetector;
 
     private int mLastHoverKeyIndex = KeyDetector.NOT_A_KEY;
     private int mLastX = -1;
@@ -71,6 +72,7 @@
         paint.setAntiAlias(true);
         paint.setColor(Color.YELLOW);
 
+        mGestureDetector = new KeyboardFlickGestureDetector(context);
         mScaledEdgeSlop = ViewConfiguration.get(context).getScaledEdgeSlop();
     }
 
@@ -110,7 +112,10 @@
      * @return {@code true} if the event is handled
      */
     public boolean onHoverEvent(MotionEvent event, PointerTracker tracker) {
-        return onTouchExplorationEvent(event, tracker);
+        if (mGestureDetector.onHoverEvent(event, this, tracker))
+            return true;
+
+        return onHoverEventInternal(event, tracker);
     }
 
     public boolean dispatchTouchEvent(MotionEvent event) {
@@ -128,7 +133,7 @@
      * @param event The touch exploration hover event.
      * @return {@code true} if the event was handled
      */
-    private boolean onTouchExplorationEvent(MotionEvent event, PointerTracker tracker) {
+    /*package*/ boolean onHoverEventInternal(MotionEvent event, PointerTracker tracker) {
         final int x = (int) event.getX();
         final int y = (int) event.getY();
 
@@ -198,4 +203,18 @@
         tracker.onDownEvent(x, y, eventTime, null);
         tracker.onUpEvent(x, y, eventTime + DELAY_KEY_PRESS, null);
     }
+
+    private class KeyboardFlickGestureDetector extends FlickGestureDetector {
+        public KeyboardFlickGestureDetector(Context context) {
+            super(context);
+        }
+
+        @Override
+        public boolean onFlick(MotionEvent e1, MotionEvent e2, int direction) {
+            if (mListener != null) {
+                mListener.onFlickGesture(direction);
+            }
+            return true;
+        }
+    }
 }
diff --git a/java/src/com/android/inputmethod/accessibility/FlickGestureDetector.java b/java/src/com/android/inputmethod/accessibility/FlickGestureDetector.java
new file mode 100644
index 0000000..9d99e31
--- /dev/null
+++ b/java/src/com/android/inputmethod/accessibility/FlickGestureDetector.java
@@ -0,0 +1,227 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.inputmethod.accessibility;
+
+import android.content.Context;
+import android.os.Message;
+import android.view.MotionEvent;
+import android.view.ViewConfiguration;
+
+import com.android.inputmethod.compat.MotionEventCompatUtils;
+import com.android.inputmethod.keyboard.PointerTracker;
+import com.android.inputmethod.latin.StaticInnerHandlerWrapper;
+
+/**
+ * Detects flick gestures within a stream of hover events.
+ * <p>
+ * A flick gesture is defined as a stream of hover events with the following
+ * properties:
+ * <ul>
+ *   <li>Begins with a {@link MotionEventCompatUtils#ACTION_HOVER_ENTER} event
+ *   <li>Contains any number of {@link MotionEventCompatUtils#ACTION_HOVER_MOVE}
+ *       events
+ *   <li>Ends with a {@link MotionEventCompatUtils#ACTION_HOVER_EXIT} event
+ *   <li>Maximum duration of 250 milliseconds
+ *   <li>Minimum distance between enter and exit points must be at least equal to
+ *       scaled double tap slop (see
+ *       {@link ViewConfiguration#getScaledDoubleTapSlop()})
+ * </ul>
+ * <p>
+ * Initial enter events are intercepted and cached until the stream fails to
+ * satisfy the constraints defined above, at which point the cached enter event
+ * is sent to its source {@link AccessibleKeyboardViewProxy} and subsequent move
+ * and exit events are ignored.
+ */
+public abstract class FlickGestureDetector {
+    public static final int FLICK_UP = 0;
+    public static final int FLICK_RIGHT = 1;
+    public static final int FLICK_LEFT = 2;
+    public static final int FLICK_DOWN = 3;
+
+    private final FlickHandler mFlickHandler;
+    private final int mFlickRadiusSquare;
+
+    private AccessibleKeyboardViewProxy mCachedView;
+    private PointerTracker mCachedTracker;
+    private MotionEvent mCachedHoverEnter;
+
+    private static class FlickHandler extends StaticInnerHandlerWrapper<FlickGestureDetector> {
+        private static final int MSG_FLICK_TIMEOUT = 1;
+
+        /** The maximum duration of a flick gesture in milliseconds. */
+        private static final int DELAY_FLICK_TIMEOUT = 250;
+
+        public FlickHandler(FlickGestureDetector outerInstance) {
+            super(outerInstance);
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            final FlickGestureDetector gestureDetector = getOuterInstance();
+
+            switch (msg.what) {
+            case MSG_FLICK_TIMEOUT:
+                gestureDetector.clearFlick(true);
+            }
+        }
+
+        public void startFlickTimeout() {
+            cancelFlickTimeout();
+            sendEmptyMessageDelayed(MSG_FLICK_TIMEOUT, DELAY_FLICK_TIMEOUT);
+        }
+
+        public void cancelFlickTimeout() {
+            removeMessages(MSG_FLICK_TIMEOUT);
+        }
+    }
+
+    /**
+     * Creates a new flick gesture detector.
+     *
+     * @param context The parent context.
+     */
+    public FlickGestureDetector(Context context) {
+        final int doubleTapSlop = ViewConfiguration.get(context).getScaledDoubleTapSlop();
+
+        mFlickHandler = new FlickHandler(this);
+        mFlickRadiusSquare = doubleTapSlop * doubleTapSlop;
+    }
+
+    /**
+     * Processes motion events to detect flick gestures.
+     *
+     * @param event The current event.
+     * @param view The source of the event.
+     * @param tracker A pointer tracker for the event.
+     * @return {@code true} if the event was handled.
+     */
+    public boolean onHoverEvent(MotionEvent event, AccessibleKeyboardViewProxy view,
+            PointerTracker tracker) {
+        // Always cache and consume the first hover event.
+        if (event.getAction() == MotionEventCompatUtils.ACTION_HOVER_ENTER) {
+            mCachedView = view;
+            mCachedTracker = tracker;
+            mCachedHoverEnter = MotionEvent.obtain(event);
+            mFlickHandler.startFlickTimeout();
+            return true;
+        }
+
+        // Stop if the event has already been canceled.
+        if (mCachedHoverEnter == null) {
+            return false;
+        }
+
+        final float distanceSquare = calculateDistanceSquare(mCachedHoverEnter, event);
+        final long timeout = event.getEventTime() - mCachedHoverEnter.getEventTime();
+
+        switch (event.getAction()) {
+        case MotionEventCompatUtils.ACTION_HOVER_MOVE:
+            // Consume all valid move events before timeout.
+            return true;
+        case MotionEventCompatUtils.ACTION_HOVER_EXIT:
+            // Ignore exit events outside the flick radius.
+            if (distanceSquare < mFlickRadiusSquare) {
+                clearFlick(true);
+                return false;
+            } else {
+                return dispatchFlick(mCachedHoverEnter, event);
+            }
+        default:
+            return false;
+        }
+    }
+
+    /**
+     * Clears the cached flick information and optionally forwards the event to
+     * the source view's internal hover event handler.
+     *
+     * @param sendCachedEvent Set to {@code true} to forward the hover event to
+     *            the source view.
+     */
+    private void clearFlick(boolean sendCachedEvent) {
+        mFlickHandler.cancelFlickTimeout();
+
+        if (mCachedHoverEnter != null) {
+            if (sendCachedEvent) {
+                mCachedView.onHoverEventInternal(mCachedHoverEnter, mCachedTracker);
+            }
+            mCachedHoverEnter.recycle();
+            mCachedHoverEnter = null;
+        }
+
+        mCachedTracker = null;
+        mCachedView = null;
+    }
+
+    /**
+     * Computes the direction of a flick gesture and forwards it to
+     * {@link #onFlick(MotionEvent, MotionEvent, int)} for handling.
+     *
+     * @param e1 The {@link MotionEventCompatUtils#ACTION_HOVER_ENTER} event
+     *            where the flick started.
+     * @param e2 The {@link MotionEventCompatUtils#ACTION_HOVER_EXIT} event
+     *            where the flick ended.
+     * @return {@code true} if the flick event was handled.
+     */
+    private boolean dispatchFlick(MotionEvent e1, MotionEvent e2) {
+        clearFlick(false);
+
+        final float dX = e2.getX() - e1.getX();
+        final float dY = e2.getY() - e1.getY();
+        final int direction;
+
+        if (dY > dX) {
+            if (dY > -dX) {
+                direction = FLICK_DOWN;
+            } else {
+                direction = FLICK_LEFT;
+            }
+        } else {
+            if (dY > -dX) {
+                direction = FLICK_RIGHT;
+            } else {
+                direction = FLICK_UP;
+            }
+        }
+
+        return onFlick(e1, e2, direction);
+    }
+
+    private float calculateDistanceSquare(MotionEvent e1, MotionEvent e2) {
+        final float dX = e2.getX() - e1.getX();
+        final float dY = e2.getY() - e1.getY();
+        return (dX * dX) + (dY * dY);
+    }
+
+    /**
+     * Handles a detected flick gesture.
+     *
+     * @param e1 The {@link MotionEventCompatUtils#ACTION_HOVER_ENTER} event
+     *            where the flick started.
+     * @param e2 The {@link MotionEventCompatUtils#ACTION_HOVER_EXIT} event
+     *            where the flick ended.
+     * @param direction The direction of the flick event, one of:
+     *            <ul>
+     *              <li>{@link #FLICK_UP}
+     *              <li>{@link #FLICK_DOWN}
+     *              <li>{@link #FLICK_LEFT}
+     *              <li>{@link #FLICK_RIGHT}
+     *            </ul>
+     * @return {@code true} if the flick event was handled.
+     */
+    public abstract boolean onFlick(MotionEvent e1, MotionEvent e2, int direction);
+}
