diff --git a/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java b/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java
index f7a1163..5c03d26 100644
--- a/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java
+++ b/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java
@@ -243,7 +243,6 @@
         // Make sure we're not getting an EXIT event because the user slid
         // off the keyboard area, then force a key press.
         if (key != null) {
-            performClickOn(key);
             onHoverExitFrom(key);
         }
         setLastHoverKey(null);
diff --git a/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java b/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java
index a3511c6..7266aa8 100644
--- a/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java
+++ b/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java
@@ -236,6 +236,7 @@
         // Obtain and initialize an AccessibilityNodeInfo with information about the virtual view.
         final AccessibilityNodeInfoCompat info = AccessibilityNodeInfoCompat.obtain();
         info.setPackageName(mKeyboardView.getContext().getPackageName());
+        info.setTextEntryKey(true);
         info.setClassName(key.getClass().getName());
         info.setContentDescription(keyDescription);
         info.setBoundsInParent(boundsInParent);
@@ -244,13 +245,9 @@
         info.setSource(mKeyboardView, virtualViewId);
         info.setEnabled(key.isEnabled());
         info.setVisibleToUser(true);
-        // Don't add ACTION_CLICK and ACTION_LONG_CLOCK actions while hovering on the key.
-        // See {@link #onHoverEnterTo(Key)} and {@link #onHoverExitFrom(Key)}.
-        if (virtualViewId != mHoveringNodeId) {
-            info.addAction(AccessibilityNodeInfoCompat.ACTION_CLICK);
-            if (key.isLongPressEnabled()) {
-                info.addAction(AccessibilityNodeInfoCompat.ACTION_LONG_CLICK);
-            }
+        info.addAction(AccessibilityNodeInfoCompat.ACTION_CLICK);
+        if (key.isLongPressEnabled()) {
+            info.addAction(AccessibilityNodeInfoCompat.ACTION_LONG_CLICK);
         }
 
         if (mAccessibilityFocusedView == virtualViewId) {
diff --git a/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java b/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java
index edda32d..3234993 100644
--- a/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java
+++ b/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java
@@ -62,13 +62,10 @@
     // The rectangle region to ignore hover events.
     private final Rect mBoundsToIgnoreHoverEvent = new Rect();
 
-    private final AccessibilityLongPressTimer mAccessibilityLongPressTimer;
 
     public MainKeyboardAccessibilityDelegate(final MainKeyboardView mainKeyboardView,
             final KeyDetector keyDetector) {
         super(mainKeyboardView, keyDetector);
-        mAccessibilityLongPressTimer = new AccessibilityLongPressTimer(
-                this /* callback */, mainKeyboardView.getContext());
     }
 
     /**
@@ -233,7 +230,6 @@
             Log.d(TAG, "onHoverEnterTo: key=" + key
                     + " inIgnoreBounds=" + mBoundsToIgnoreHoverEvent.contains(x, y));
         }
-        mAccessibilityLongPressTimer.cancelLongPress();
         if (mBoundsToIgnoreHoverEvent.contains(x, y)) {
             return;
         }
@@ -241,9 +237,6 @@
         // Further hover events should be handled.
         mBoundsToIgnoreHoverEvent.setEmpty();
         super.onHoverEnterTo(key);
-        if (key.isLongPressEnabled()) {
-            mAccessibilityLongPressTimer.startLongPress(key);
-        }
     }
 
     @Override
@@ -254,7 +247,6 @@
             Log.d(TAG, "onHoverExitFrom: key=" + key
                     + " inIgnoreBounds=" + mBoundsToIgnoreHoverEvent.contains(x, y));
         }
-        mAccessibilityLongPressTimer.cancelLongPress();
         super.onHoverExitFrom(key);
     }
 
