Disable dragging the challenge area when there are no widgets
Fixes bug 10784855
Change-Id: Id1d752eb4bdc64a9d09fd478087d16dc17682c77
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java
index 63aab4d..f292407 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java
@@ -405,6 +405,12 @@
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 4f377a3..5e7816c 100644
--- a/packages/Keyguard/src/com/android/keyguard/SlidingChallengeLayout.java
+++ b/packages/Keyguard/src/com/android/keyguard/SlidingChallengeLayout.java
@@ -48,7 +48,7 @@
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 @@
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 @@
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 @@
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 @@
mGestureStartChallengeBottom = getChallengeBottom();
mDragging = true;
enableHardwareLayerForChallengeView();
- } else if (mChallengeShowing && isInChallengeView(x, y)) {
+ } else if (mChallengeShowing && isInChallengeView(x, y)
+ && shouldEnableChallengeDragging()) {
mBlockDrag = true;
}
}
@@ -596,6 +603,10 @@
return mDragging;
}
+ private boolean shouldEnableChallengeDragging() {
+ return mEnableChallengeDragging || !mChallengeShowing;
+ }
+
private boolean isChallengeInteractionBlocked() {
return !mChallengeInteractiveExternal || !mChallengeInteractiveInternal;
}