Ignore additional pointers in dispatchTouchEvent.

We have no need for them and they can cause bugs.

Test: touch many things all at once, observe only the first touch works
Bug: 160196743
Change-Id: I1ee6948d43ccd9053ff8c620ee793457b1fa872a
This commit is contained in:
Josh Tsuji
2020-06-30 15:10:38 -04:00
parent f629b618a4
commit ff0db38caf

View File

@@ -290,6 +290,12 @@ public class BubbleStackView extends FrameLayout
/** Whether we're in the middle of dragging the stack around by touch. */
private boolean mIsDraggingStack = false;
/**
* The pointer index of the ACTION_DOWN event we received prior to an ACTION_UP. We'll ignore
* touches from other pointer indices.
*/
private int mPointerIndexDown = -1;
/** Description of current animation controller state. */
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
pw.println("Stack view state:");
@@ -2220,6 +2226,18 @@ public class BubbleStackView extends FrameLayout
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() != MotionEvent.ACTION_DOWN && ev.getActionIndex() != mPointerIndexDown) {
// Ignore touches from additional pointer indices.
return false;
}
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
mPointerIndexDown = ev.getActionIndex();
} else if (ev.getAction() == MotionEvent.ACTION_UP
|| ev.getAction() == MotionEvent.ACTION_CANCEL) {
mPointerIndexDown = -1;
}
boolean dispatched = super.dispatchTouchEvent(ev);
// If a new bubble arrives while the collapsed stack is being dragged, it will be positioned