From 9c2c77f8bd8288dcafc9f8111396d46b896d1933 Mon Sep 17 00:00:00 2001 From: Adam Powell Date: Thu, 1 Nov 2012 14:52:17 -0700 Subject: [PATCH] Keyguard - fix overzealous sliding security view Bug 7453429 Change the detection of sliding the security view to require crossing the border between sections in the correct direction. This also improves the feel of re-opening the slider. Change-Id: I57797f926e017ea2cf41f7c48e0fe77ac0f78460 --- .../impl/keyguard/SlidingChallengeLayout.java | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/policy/src/com/android/internal/policy/impl/keyguard/SlidingChallengeLayout.java b/policy/src/com/android/internal/policy/impl/keyguard/SlidingChallengeLayout.java index 61561439b8ddc..fd87646572bbb 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/SlidingChallengeLayout.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/SlidingChallengeLayout.java @@ -16,6 +16,8 @@ package com.android.internal.policy.impl.keyguard; +import com.android.internal.R; + import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; @@ -29,7 +31,6 @@ import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.util.FloatProperty; import android.util.Log; -import android.util.MathUtils; import android.util.Property; import android.view.MotionEvent; import android.view.VelocityTracker; @@ -40,8 +41,6 @@ import android.view.accessibility.AccessibilityManager; import android.view.animation.Interpolator; import android.widget.Scroller; -import com.android.internal.R; - /** * This layout handles interaction with the sliding security challenge views * that overlay/resize other keyguard contents. @@ -53,7 +52,7 @@ public class SlidingChallengeLayout extends ViewGroup implements ChallengeLayout // The drag handle is measured in dp above & below the top edge of the // challenge view; these parameters change based on whether the challenge // is open or closed. - private static final int DRAG_HANDLE_CLOSED_ABOVE = 64; // dp + private static final int DRAG_HANDLE_CLOSED_ABOVE = 8; // dp private static final int DRAG_HANDLE_CLOSED_BELOW = 0; // dp private static final int DRAG_HANDLE_OPEN_ABOVE = 8; // dp private static final int DRAG_HANDLE_OPEN_BELOW = 0; // dp @@ -581,18 +580,16 @@ public class SlidingChallengeLayout extends ViewGroup implements ChallengeLayout final float x = ev.getX(i); final float y = ev.getY(i); if (!mIsBouncing && mActivePointerId == INVALID_POINTER - && ((isInDragHandle(x, y) && MathUtils.sq(x - mGestureStartX) - + MathUtils.sq(y - mGestureStartY) > mTouchSlopSquare) - || crossedDragHandle(x, y, mGestureStartY) + && (crossedDragHandle(x, y, mGestureStartY) || (isInChallengeView(x, y) && - mScrollState == SCROLL_STATE_SETTLING))) { + mScrollState == SCROLL_STATE_SETTLING))) { mActivePointerId = ev.getPointerId(i); mGestureStartX = x; mGestureStartY = y; mGestureStartChallengeBottom = getChallengeBottom(); mDragging = true; mChallengeView.setLayerType(LAYER_TYPE_HARDWARE, null); - } else if (isInChallengeView(x, y)) { + } else if (mChallengeShowing && isInChallengeView(x, y)) { mBlockDrag = true; } } @@ -767,11 +764,19 @@ public class SlidingChallengeLayout extends ViewGroup implements ChallengeLayout } private boolean crossedDragHandle(float x, float y, float initialY) { + final int challengeTop = mChallengeView.getTop(); - return x >= 0 && - x < getWidth() && - initialY < (challengeTop - getDragHandleSizeAbove()) && - y > challengeTop + getDragHandleSizeBelow(); + final boolean horizOk = x >= 0 && x < getWidth(); + + final boolean vertOk; + if (mChallengeShowing) { + vertOk = initialY < (challengeTop - getDragHandleSizeAbove()) && + y > challengeTop + getDragHandleSizeBelow(); + } else { + vertOk = initialY > challengeTop + getDragHandleSizeBelow() && + y < challengeTop - getDragHandleSizeAbove(); + } + return horizOk && vertOk; } @Override