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

Commit b2dae831 authored by Jim Miller's avatar Jim Miller Committed by Android (Google) Code Review
Browse files

Merge "Handle dropped motion events in MultiWaveView due to high system activity"

parents 932368e1 b35e372b
Loading
Loading
Loading
Loading
+60 −54
Original line number Diff line number Diff line
@@ -449,27 +449,25 @@ public class MultiWaveView extends View implements AnimatorUpdateListener {
        final int action = event.getAction();

        boolean handled = false;
        float x = event.getX();
        float y = event.getY();
        switch (action) {
            case MotionEvent.ACTION_DOWN:
                handleDown(x, y);
                handleDown(event);
                handled = true;
                break;

            case MotionEvent.ACTION_MOVE:
                handleMove(x, y);
                handleMove(event);
                handled = true;
                break;

            case MotionEvent.ACTION_UP:
                handleUp(x, y);
                handleMove(x, y);
                handleMove(event);
                handleUp(event);
                handled = true;
                break;

            case MotionEvent.ACTION_CANCEL:
                handleMove(x, y);
                handleMove(event);
                handled = true;
                break;
        }
@@ -483,7 +481,9 @@ public class MultiWaveView extends View implements AnimatorUpdateListener {
        mHandleDrawable.setY(y);
    }

    private void handleDown(float x, float y) {
    private void handleDown(MotionEvent event) {
        final float x = event.getX();
        final float y = event.getY();
        final float dx = x - mWaveCenterX;
        final float dy = y - mWaveCenterY;
        if (dist2(dx,dy) <= square(mTapRadius)) {
@@ -498,16 +498,21 @@ public class MultiWaveView extends View implements AnimatorUpdateListener {
        }
    }

    private void handleUp(float x, float y) {
    private void handleUp(MotionEvent event) {
        if (DEBUG && mDragging) Log.v(TAG, "** Handle RELEASE");
        switchToState(STATE_FINISH, x, y);
        switchToState(STATE_FINISH, event.getX(), event.getY());
    }

    private void handleMove(float x, float y) {
    private void handleMove(MotionEvent event) {
        if (!mDragging) {
            return;
        }

        int activeTarget = -1;
        final int historySize = event.getHistorySize();
        for (int k = 0; k < historySize + 1; k++) {
            float x = k < historySize ? event.getHistoricalX(k) : event.getX();
            float y = k < historySize ? event.getHistoricalY(k) : event.getY();
            float tx = x - mWaveCenterX;
            float ty = y - mWaveCenterY;
            float touchRadius = (float) Math.sqrt(dist2(tx, ty));
@@ -515,7 +520,6 @@ public class MultiWaveView extends View implements AnimatorUpdateListener {
            float limitX = mWaveCenterX + tx * scale;
            float limitY = mWaveCenterY + ty * scale;

        int activeTarget = -1;
            boolean singleTarget = mTargetDrawables.size() == 1;
            if (singleTarget) {
                // Snap to outer ring if there's only one target
@@ -558,6 +562,8 @@ public class MultiWaveView extends View implements AnimatorUpdateListener {
                moveHandleTo(x, y, false);
                mHandleDrawable.setAlpha(1.0f);
            }
        }

        // Draw handle outside parent's bounds
        invalidateGlobalRegion(mHandleDrawable);