package com.android.internal.policy.impl.keyguard;
+import com.android.internal.R;
+
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
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;
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.
// 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
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;
}
}
}
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