From 5547b55bae92e6674e528d671f7700d7f5a9b3d0 Mon Sep 17 00:00:00 2001 From: Jim Miller Date: Mon, 7 Oct 2013 19:20:56 -0700 Subject: [PATCH] Disable dragging the challenge area when there are no widgets Fixes bug 10784855 Change-Id: Id1d752eb4bdc64a9d09fd478087d16dc17682c77 --- .../src/com/android/keyguard/KeyguardHostView.java | 6 ++++++ .../com/android/keyguard/SlidingChallengeLayout.java | 17 ++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java index 63aab4d0d029..f2924070e071 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java @@ -405,6 +405,12 @@ public class KeyguardHostView extends KeyguardViewBase { mAppWidgetContainer.setAddWidgetEnabled(false); } checkAppWidgetConsistency(); + + // Don't let the user drag the challenge down if widgets are disabled. + if (mSlidingChallengeLayout != null) { + mSlidingChallengeLayout.setEnableChallengeDragging(!widgetsDisabled()); + } + mSwitchPageRunnable.run(); // This needs to be called after the pages are all added. mViewStateManager.showUsabilityHints(); diff --git a/packages/Keyguard/src/com/android/keyguard/SlidingChallengeLayout.java b/packages/Keyguard/src/com/android/keyguard/SlidingChallengeLayout.java index 4f377a376c75..5e7816c9881e 100644 --- a/packages/Keyguard/src/com/android/keyguard/SlidingChallengeLayout.java +++ b/packages/Keyguard/src/com/android/keyguard/SlidingChallengeLayout.java @@ -48,7 +48,7 @@ public class SlidingChallengeLayout extends ViewGroup implements ChallengeLayout private static final boolean DEBUG = false; // The drag handle is measured in dp above & below the top edge of the - // challenge view; these parameters change based on whether the challenge + // challenge view; these parameters change based on whether the challenge // is open or closed. private static final int DRAG_HANDLE_CLOSED_ABOVE = 8; // dp private static final int DRAG_HANDLE_CLOSED_BELOW = 0; // dp @@ -81,6 +81,7 @@ public class SlidingChallengeLayout extends ViewGroup implements ChallengeLayout private int mScrollState; private OnChallengeScrolledListener mScrollListener; private OnBouncerStateChangedListener mBouncerListener; + private boolean mEnableChallengeDragging; public static final int SCROLL_STATE_IDLE = 0; public static final int SCROLL_STATE_DRAGGING = 1; @@ -263,6 +264,10 @@ public class SlidingChallengeLayout extends ViewGroup implements ChallengeLayout setSystemUiVisibility(SYSTEM_UI_FLAG_LAYOUT_STABLE | SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); } + public void setEnableChallengeDragging(boolean enabled) { + mEnableChallengeDragging = enabled; + } + public void setInsets(Rect insets) { mInsets.set(insets); } @@ -573,7 +578,8 @@ public class SlidingChallengeLayout extends ViewGroup implements ChallengeLayout final float y = ev.getY(i); if (!mIsBouncing && mActivePointerId == INVALID_POINTER && (crossedDragHandle(x, y, mGestureStartY) - || (isInChallengeView(x, y) && + && shouldEnableChallengeDragging() + || (isInChallengeView(x, y) && mScrollState == SCROLL_STATE_SETTLING))) { mActivePointerId = ev.getPointerId(i); mGestureStartX = x; @@ -581,7 +587,8 @@ public class SlidingChallengeLayout extends ViewGroup implements ChallengeLayout mGestureStartChallengeBottom = getChallengeBottom(); mDragging = true; enableHardwareLayerForChallengeView(); - } else if (mChallengeShowing && isInChallengeView(x, y)) { + } else if (mChallengeShowing && isInChallengeView(x, y) + && shouldEnableChallengeDragging()) { mBlockDrag = true; } } @@ -596,6 +603,10 @@ public class SlidingChallengeLayout extends ViewGroup implements ChallengeLayout return mDragging; } + private boolean shouldEnableChallengeDragging() { + return mEnableChallengeDragging || !mChallengeShowing; + } + private boolean isChallengeInteractionBlocked() { return !mChallengeInteractiveExternal || !mChallengeInteractiveInternal; } -- 2.11.0