Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ff0db38c authored by Josh Tsuji's avatar Josh Tsuji
Browse files

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
parent f629b618
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -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