diff --git a/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java b/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java
similarity index 88%
rename from java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java
rename to java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java
index 1092942..7bf1c9f 100644
--- a/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java
+++ b/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java
@@ -32,11 +32,11 @@
 import com.android.inputmethod.keyboard.KeyDetector;
 import com.android.inputmethod.keyboard.Keyboard;
 import com.android.inputmethod.keyboard.KeyboardId;
-import com.android.inputmethod.keyboard.MainKeyboardView;
+import com.android.inputmethod.keyboard.KeyboardView;
 import com.android.inputmethod.latin.R;
 import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
 
-public final class MainKeyboardAccessibilityDelegate extends AccessibilityDelegateCompat {
+public class KeyboardAccessibilityDelegate extends AccessibilityDelegateCompat {
     /** Map of keyboard modes to resource IDs. */
     private static final SparseIntArray KEYBOARD_MODE_RES_IDS = new SparseIntArray();
 
@@ -52,9 +52,10 @@
         KEYBOARD_MODE_RES_IDS.put(KeyboardId.MODE_URL, R.string.keyboard_mode_url);
     }
 
-    private final MainKeyboardView mView;
+    private final KeyboardView mKeyboardView;
+    private final KeyDetector mKeyDetector;
     private Keyboard mKeyboard;
-    private MainKeyboardAccessibilityNodeProvider mAccessibilityNodeProvider;
+    private KeyboardAccessibilityNodeProvider mAccessibilityNodeProvider;
 
     private Key mLastHoverKey = null;
 
@@ -67,14 +68,17 @@
     private int mLastKeyboardMode = KEYBOARD_IS_HIDDEN;
     private static final int KEYBOARD_IS_HIDDEN = -1;
 
-    public MainKeyboardAccessibilityDelegate(final MainKeyboardView view) {
-        final Context context = view.getContext();
+    public KeyboardAccessibilityDelegate(final KeyboardView keyboardView,
+            final KeyDetector keyDetector) {
+        super();
+        final Context context = keyboardView.getContext();
         mEdgeSlop = context.getResources().getDimensionPixelSize(
                 R.dimen.config_accessibility_edge_slop);
-        mView = view;
+        mKeyboardView = keyboardView;
+        mKeyDetector = keyDetector;
 
         // Ensure that the view has an accessibility delegate.
-        ViewCompat.setAccessibilityDelegate(view, this);
+        ViewCompat.setAccessibilityDelegate(keyboardView, this);
     }
 
     /**
@@ -144,7 +148,7 @@
      * @param keyboard The new keyboard.
      */
     private void announceKeyboardMode(final Keyboard keyboard) {
-        final Context context = mView.getContext();
+        final Context context = mKeyboardView.getContext();
         final int modeTextResId = KEYBOARD_MODE_RES_IDS.get(keyboard.mId.mMode);
         if (modeTextResId == 0) {
             return;
@@ -194,7 +198,7 @@
         default:
             return;
         }
-        final String text = mView.getContext().getString(resId);
+        final String text = mKeyboardView.getContext().getString(resId);
         sendWindowStateChanged(text);
     }
 
@@ -202,7 +206,7 @@
      * Announces that the keyboard has been hidden.
      */
     private void announceKeyboardHidden() {
-        final Context context = mView.getContext();
+        final Context context = mKeyboardView.getContext();
         final String text = context.getString(R.string.announce_keyboard_hidden);
 
         sendWindowStateChanged(text);
@@ -216,13 +220,13 @@
     private void sendWindowStateChanged(final String text) {
         final AccessibilityEvent stateChange = AccessibilityEvent.obtain(
                 AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
-        mView.onInitializeAccessibilityEvent(stateChange);
+        mKeyboardView.onInitializeAccessibilityEvent(stateChange);
         stateChange.getText().add(text);
         stateChange.setContentDescription(null);
 
-        final ViewParent parent = mView.getParent();
+        final ViewParent parent = mKeyboardView.getParent();
         if (parent != null) {
-            parent.requestSendAccessibilityEvent(mView, stateChange);
+            parent.requestSendAccessibilityEvent(mKeyboardView, stateChange);
         }
     }
 
@@ -235,7 +239,7 @@
      * @return The accessibility node provider for the current keyboard.
      */
     @Override
-    public MainKeyboardAccessibilityNodeProvider getAccessibilityNodeProvider(final View host) {
+    public KeyboardAccessibilityNodeProvider getAccessibilityNodeProvider(final View host) {
         return getAccessibilityNodeProvider();
     }
 
@@ -243,18 +247,16 @@
      * Receives hover events when touch exploration is turned on in SDK versions ICS and higher.
      *
      * @param event The hover event.
-     * @param keyDetector The {@link KeyDetector} to determine on which key the <code>event</code>
-     *     is hovering.
      * @return {@code true} if the event is handled
      */
-    public boolean dispatchHoverEvent(final MotionEvent event, final KeyDetector keyDetector) {
+    public boolean dispatchHoverEvent(final MotionEvent event) {
         final int x = (int) event.getX();
         final int y = (int) event.getY();
         final Key previousKey = mLastHoverKey;
         final Key key;
 
         if (pointInView(x, y)) {
-            key = keyDetector.detectHitKey(x, y);
+            key = mKeyDetector.detectHitKey(x, y);
         } else {
             key = null;
         }
@@ -283,12 +285,12 @@
     /**
      * @return A lazily-instantiated node provider for this view delegate.
      */
-    private MainKeyboardAccessibilityNodeProvider getAccessibilityNodeProvider() {
+    private KeyboardAccessibilityNodeProvider getAccessibilityNodeProvider() {
         // Instantiate the provide only when requested. Since the system
         // will call this method multiple times it is a good practice to
         // cache the provider instance.
         if (mAccessibilityNodeProvider == null) {
-            mAccessibilityNodeProvider = new MainKeyboardAccessibilityNodeProvider(mView);
+            mAccessibilityNodeProvider = new KeyboardAccessibilityNodeProvider(mKeyboardView);
         }
         return mAccessibilityNodeProvider;
     }
@@ -302,8 +304,8 @@
      */
     private boolean pointInView(final int localX, final int localY) {
         return (localX >= mEdgeSlop) && (localY >= mEdgeSlop)
-                && (localX < (mView.getWidth() - mEdgeSlop))
-                && (localY < (mView.getHeight() - mEdgeSlop));
+                && (localX < (mKeyboardView.getWidth() - mEdgeSlop))
+                && (localY < (mKeyboardView.getHeight() - mEdgeSlop));
     }
 
     /**
@@ -318,7 +320,7 @@
         final long downTime = SystemClock.uptimeMillis();
         final MotionEvent downEvent = MotionEvent.obtain(
                 downTime, downTime, MotionEvent.ACTION_DOWN, x, y, 0);
-        mView.onTouchEvent(downEvent);
+        mKeyboardView.onTouchEvent(downEvent);
         downEvent.recycle();
         return downTime;
     }
@@ -334,7 +336,7 @@
         final int y = key.getHitBox().centerY();
         final MotionEvent upEvent = MotionEvent.obtain(
                 downTime, SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, x, y, 0);
-        mView.onTouchEvent(upEvent);
+        mKeyboardView.onTouchEvent(upEvent);
         upEvent.recycle();
     }
 
@@ -373,7 +375,7 @@
         if (key == null) {
             return false;
         }
-        final MainKeyboardAccessibilityNodeProvider provider = getAccessibilityNodeProvider();
+        final KeyboardAccessibilityNodeProvider provider = getAccessibilityNodeProvider();
 
         switch (event.getAction()) {
         case MotionEvent.ACTION_HOVER_ENTER:
diff --git a/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityNodeProvider.java b/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java
similarity index 97%
rename from java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityNodeProvider.java
rename to java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java
index f69d316..cddd1c7 100644
--- a/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityNodeProvider.java
+++ b/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java
@@ -47,8 +47,8 @@
  * virtual views, thus conveying their logical structure.
  * </p>
  */
-public final class MainKeyboardAccessibilityNodeProvider extends AccessibilityNodeProviderCompat {
-    private static final String TAG = MainKeyboardAccessibilityNodeProvider.class.getSimpleName();
+public final class KeyboardAccessibilityNodeProvider extends AccessibilityNodeProviderCompat {
+    private static final String TAG = KeyboardAccessibilityNodeProvider.class.getSimpleName();
     private static final int UNDEFINED = Integer.MIN_VALUE;
 
     private final KeyCodeDescriptionMapper mKeyCodeDescriptionMapper;
@@ -69,7 +69,8 @@
     /** The current keyboard. */
     private Keyboard mKeyboard;
 
-    public MainKeyboardAccessibilityNodeProvider(final KeyboardView keyboardView) {
+    public KeyboardAccessibilityNodeProvider(final KeyboardView keyboardView) {
+        super();
         mKeyCodeDescriptionMapper = KeyCodeDescriptionMapper.getInstance();
         mAccessibilityUtils = AccessibilityUtils.getInstance();
         mKeyboardView = keyboardView;
diff --git a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
index 26b6dd0..a8a23db 100644
--- a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
@@ -38,7 +38,7 @@
 import android.widget.TextView;
 
 import com.android.inputmethod.accessibility.AccessibilityUtils;
-import com.android.inputmethod.accessibility.MainKeyboardAccessibilityDelegate;
+import com.android.inputmethod.accessibility.KeyboardAccessibilityDelegate;
 import com.android.inputmethod.annotations.ExternallyReferenced;
 import com.android.inputmethod.keyboard.internal.DrawingHandler;
 import com.android.inputmethod.keyboard.internal.DrawingPreviewPlacerView;
@@ -170,7 +170,7 @@
     private final DrawingHandler mDrawingHandler =
             new DrawingHandler(this);
 
-    private final MainKeyboardAccessibilityDelegate mAccessibilityDelegate;
+    private final KeyboardAccessibilityDelegate mAccessibilityDelegate;
 
     public MainKeyboardView(final Context context, final AttributeSet attrs) {
         this(context, attrs, R.attr.mainKeyboardViewStyle);
@@ -269,7 +269,7 @@
         mLanguageOnSpacebarHorizontalMargin = (int)getResources().getDimension(
                 R.dimen.config_language_on_spacebar_horizontal_margin);
 
-        mAccessibilityDelegate = new MainKeyboardAccessibilityDelegate(this);
+        mAccessibilityDelegate = new KeyboardAccessibilityDelegate(this, mKeyDetector);
     }
 
     @Override
@@ -773,12 +773,11 @@
      */
     @Override
     public boolean dispatchHoverEvent(final MotionEvent event) {
-        if (AccessibilityUtils.getInstance().isTouchExplorationEnabled()) {
-            return mAccessibilityDelegate.dispatchHoverEvent(event, mKeyDetector);
+        if (!AccessibilityUtils.getInstance().isTouchExplorationEnabled()) {
+            // Reflection doesn't support calling superclass methods.
+            return false;
         }
-
-        // Reflection doesn't support calling superclass methods.
-        return false;
+        return mAccessibilityDelegate.dispatchHoverEvent(event);
     }
 
     public void updateShortcutKey(final boolean available) {
