diff --git a/java/src/com/android/inputmethod/accessibility/AccessibilityEntityProvider.java b/java/src/com/android/inputmethod/accessibility/AccessibilityEntityProvider.java
index 67e21b10c800125e5aa25596a36b4ab805505ad6..3cfef972adb3b40ba69409f58e3dcaa048ede527 100644
--- a/java/src/com/android/inputmethod/accessibility/AccessibilityEntityProvider.java
+++ b/java/src/com/android/inputmethod/accessibility/AccessibilityEntityProvider.java
@@ -282,7 +282,12 @@ public class AccessibilityEntityProvider extends AccessibilityNodeProviderCompat
             return;
         }
 
-        parent.requestSendAccessibilityEvent(mKeyboardView, event);
+        if (!parent.requestSendAccessibilityEvent(mKeyboardView, event)) {
+            // TODO: Remove this line after the top-level view for the IME
+            // window is fixed to be non-null and requestSendAccessibilityEvent
+            // can return true.
+            mAccessibilityUtils.requestSendAccessibilityEvent(event);
+        }
     }
 
     /**
diff --git a/java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java b/java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java
index 2ea7d83e4f0b1fce56aebb1e58b8507c7c766da1..616b1c6d71c648eae699621357b7a98af0e41edd 100644
--- a/java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java
+++ b/java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java
@@ -174,4 +174,16 @@ public class AccessibilityUtils {
             speak(text);
         }
     }
+
+    /**
+     * Sends the specified {@link AccessibilityEvent} if accessibility is
+     * enabled. No operation if accessibility is disabled.
+     *
+     * @param event The event to send.
+     */
+    public void requestSendAccessibilityEvent(AccessibilityEvent event) {
+        if (mAccessibilityManager.isEnabled()) {
+            mAccessibilityManager.sendAccessibilityEvent(event);
+        }
+    }
 }