For those that come across this question and looking for a solution;
When accessibility (Talkback) is enabled, onTouchEvent
method is not called on single tap, it's called on double taps instead.
To catch single taps when accessibility is enabled, and/or override this behaviour, onHoverEvent
method of View
class should be overriden. By using this method, you can catch single touch down as ACTION_HOVER_ENTER
, move as ACTION_HOVER_MOVE
and up as ACTION_HOVER_EXIT
.
Also you can override this behaviour by modifying the action of caught MotionEvent
and sending it to onTouchEvent
method as shown below:
@Override
public boolean onHoverEvent(MotionEvent event) {
if (accessibilityManager.isTouchExplorationEnabled() && event.getPointerCount() == 1) {
final int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_HOVER_ENTER: {
event.setAction(MotionEvent.ACTION_DOWN);
} break;
case MotionEvent.ACTION_HOVER_MOVE: {
event.setAction(MotionEvent.ACTION_MOVE);
} break;
case MotionEvent.ACTION_HOVER_EXIT: {
event.setAction(MotionEvent.ACTION_UP);
} break;
}
return onTouchEvent(event);
}
return true;
}