OSDN Git Service

Disable dragging the challenge area when there are no widgets
authorJim Miller <jaggies@google.com>
Tue, 8 Oct 2013 02:20:56 +0000 (19:20 -0700)
committerJim Miller <jaggies@google.com>
Tue, 8 Oct 2013 02:20:56 +0000 (19:20 -0700)
Fixes bug 10784855

Change-Id: Id1d752eb4bdc64a9d09fd478087d16dc17682c77

packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java
packages/Keyguard/src/com/android/keyguard/SlidingChallengeLayout.java

index 63aab4d..f292407 100644 (file)
@@ -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();
index 4f377a3..5e7816c 100644 (file)
@@ -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;
     }