When Accessibility is on, intercept touch events during dispatch.
This allows Accessibility code to safely inject events into
onTouchEvent() without accidentally intercepting them.
Bug: 7137557
Change-Id: Ie4fa8e3be5b1bb84f57c6254feab1129cb89998f
diff --git a/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java b/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
index 77940c0..01220a5 100644
--- a/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
+++ b/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
@@ -105,15 +105,15 @@
}
/**
- * Receives motion events when touch exploration is turned on in SDK
- * versions ICS and higher.
+ * Intercepts touch events before dispatch when touch exploration is turned
+ * on in ICS and higher.
*
- * @param event The motion event.
+ * @param event The motion event being dispatched.
* @return {@code true} if the event is handled
*/
- public boolean onTouchEvent(MotionEvent event) {
+ public boolean dispatchTouchEvent(MotionEvent event) {
// To avoid accidental key presses during touch exploration, always drop
- // non-hover touch events.
+ // touch events generated by the user.
return false;
}
diff --git a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
index f6b66a7..4ed0f58 100644
--- a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
@@ -661,13 +661,18 @@
}
@Override
+ public boolean dispatchTouchEvent(MotionEvent event) {
+ if (AccessibilityUtils.getInstance().isTouchExplorationEnabled()) {
+ return AccessibleKeyboardViewProxy.getInstance().dispatchTouchEvent(event);
+ }
+ return super.dispatchTouchEvent(event);
+ }
+
+ @Override
public boolean onTouchEvent(final MotionEvent me) {
if (getKeyboard() == null) {
return false;
}
- if (AccessibilityUtils.getInstance().isTouchExplorationEnabled()) {
- return AccessibleKeyboardViewProxy.getInstance().onTouchEvent(me);
- }
return mTouchScreenRegulator.onTouchEvent(me);
}