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

Commit b35e372b authored by Jim Miller's avatar Jim Miller
Browse files

Handle dropped motion events in MultiWaveView due to high system activity

This change causes MultWaveView to look at historical motion events to make
unlocking easier during high system load.

Updated after review.

Change-Id: Ibfc3cb513936e3b8488aa4390164bf5e214c982f
parent b2af97e9
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);