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
main
alanv 2012-09-10 15:47:24 -07:00
parent 2935276110
commit dc2ee77724
2 changed files with 13 additions and 8 deletions

View File

@ -105,15 +105,15 @@ public class AccessibleKeyboardViewProxy extends AccessibilityDelegateCompat {
}
/**
* 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;
}

View File

@ -660,14 +660,19 @@ public class MainKeyboardView extends KeyboardView implements PointerTracker.Key
return mOldPointerCount;
}
@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);
}