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

Commit 727890f1 authored by Lucas Dupin's avatar Lucas Dupin
Browse files

Calculate pattern bounds correctly

Use stable position on screen to calculate if pattern should be
dragged or not. Before we were only comparing bounds to events,
that would be on different coordinates (on a parent for example.)

Test: draw pattern starting at top left
Test: draw pattern starting at bottom right
Fixes: 132687980
Change-Id: Ibe2d7fc113bf8bc3a9ab4910b3ab21062b59e7f3
parent 8575ede8
Loading
Loading
Loading
Loading
+13 −4
Original line number Diff line number Diff line
@@ -68,6 +68,9 @@ public class KeyguardPatternView extends LinearLayout implements KeyguardSecurit
    private final AppearAnimationUtils mAppearAnimationUtils;
    private final DisappearAnimationUtils mDisappearAnimationUtils;
    private final DisappearAnimationUtils mDisappearAnimationUtilsLocked;
    private final int[] mTmpPosition = new int[2];
    private final Rect mTempRect = new Rect();
    private final Rect mLockPatternScreenBounds = new Rect();

    private CountDownTimer mCountdownTimer = null;
    private LockPatternUtils mLockPatternUtils;
@@ -92,7 +95,6 @@ public class KeyguardPatternView extends LinearLayout implements KeyguardSecurit
            mLockPatternView.clearPattern();
        }
    };
    private Rect mTempRect = new Rect();
    @VisibleForTesting
    KeyguardMessageArea mSecurityMessageDisplay;
    private View mEcaView;
@@ -198,6 +200,15 @@ public class KeyguardPatternView extends LinearLayout implements KeyguardSecurit
        return result;
    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        super.onLayout(changed, l, t, r, b);
        mLockPatternView.getLocationOnScreen(mTmpPosition);
        mLockPatternScreenBounds.set(mTmpPosition[0], mTmpPosition[1],
                mTmpPosition[0] + mLockPatternView.getWidth(),
                mTmpPosition[1] + mLockPatternView.getHeight());
    }

    @Override
    public void reset() {
        // reset lock pattern
@@ -233,9 +244,7 @@ public class KeyguardPatternView extends LinearLayout implements KeyguardSecurit

    @Override
    public boolean disallowInterceptTouch(MotionEvent event) {
        mTempRect.set(mLockPatternView.getLeft(), mLockPatternView.getTop(),
                mLockPatternView.getRight(), mLockPatternView.getBottom());
        return mTempRect.contains((int) event.getX(), (int) event.getY());
        return mLockPatternScreenBounds.contains((int) event.getRawX(), (int) event.getRawY());
    }

    /** TODO: hook this up */