Don't crash if NSSL gets incomplete gesture

In *theory*, a View should always receive an ACTION_DOWN before
receiving any other touch events, but this isn't always the case in
practice. Whenever we see one of these "partial" gestures, we should
ignore it until a real one starts.

Test: manual
Bug: 146323887

Merged-In: I22182d90b0057df67fbd6d20785da23d6c17dcf3
Change-Id: I22182d90b0057df67fbd6d20785da23d6c17dcf3
(cherry picked from commit c8048daed2)
This commit is contained in:
Ned Burns
2020-04-02 17:22:40 -04:00
parent 682ee20837
commit c0e4c56696

View File

@@ -3773,9 +3773,16 @@ public class NotificationStackScrollLayout extends ViewGroup implements ScrollAd
initVelocityTrackerIfNotExists();
mVelocityTracker.addMovement(ev);
final int action = ev.getAction();
final int action = ev.getActionMasked();
if (ev.findPointerIndex(mActivePointerId) == -1 && action != MotionEvent.ACTION_DOWN) {
// Incomplete gesture, possibly due to window swap mid-gesture. Ignore until a new
// one starts.
Log.e(TAG, "Invalid pointerId=" + mActivePointerId + " in onTouchEvent "
+ MotionEvent.actionToString(ev.getActionMasked()));
return true;
}
switch (action & MotionEvent.ACTION_MASK) {
switch (action) {
case MotionEvent.ACTION_DOWN: {
if (getChildCount() == 0 || !isInContentBounds(ev)) {
return false;