am 4181e8a4: Merge "Fixing issue where you can reorder/delete a non-widget page. (Bug 7493984)" into jb-mr1-lockscreen-dev

* commit '4181e8a4ac07e118724f7935928d2c3a1bb291f7':
  Fixing issue where you can reorder/delete a non-widget page. (Bug 7493984)
diff --git a/core/res/res/layout-land/keyguard_host_view.xml b/core/res/res/layout-land/keyguard_host_view.xml
index 2f67606..6b36235 100644
--- a/core/res/res/layout-land/keyguard_host_view.xml
+++ b/core/res/res/layout-land/keyguard_host_view.xml
@@ -37,7 +37,8 @@
             android:id="@+id/keyguard_widget_pager_delete_target"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_gravity="top|center_horizontal" />
+            android:layout_gravity="top|center_horizontal"
+            androidprv:layout_childType="pageDeleteDropTarget" />
 
         <include layout="@layout/keyguard_widget_pager"
             android:id="@+id/app_widget_container"
diff --git a/core/res/res/layout-port/keyguard_host_view.xml b/core/res/res/layout-port/keyguard_host_view.xml
index 73f07d5..fb25f9c 100644
--- a/core/res/res/layout-port/keyguard_host_view.xml
+++ b/core/res/res/layout-port/keyguard_host_view.xml
@@ -35,7 +35,8 @@
 
         <FrameLayout
             android:layout_width="match_parent"
-            android:layout_height="wrap_content">
+            android:layout_height="wrap_content"
+            androidprv:layout_childType="pageDeleteDropTarget">
             <include layout="@layout/keyguard_widget_remove_drop_target"
                 android:id="@+id/keyguard_widget_pager_delete_target"
                 android:layout_width="wrap_content"
diff --git a/core/res/res/layout-sw600dp-port/keyguard_host_view.xml b/core/res/res/layout-sw600dp-port/keyguard_host_view.xml
index a23771b..e3d577d 100644
--- a/core/res/res/layout-sw600dp-port/keyguard_host_view.xml
+++ b/core/res/res/layout-sw600dp-port/keyguard_host_view.xml
@@ -38,7 +38,8 @@
             android:id="@+id/keyguard_widget_pager_delete_target"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_gravity="top|center_horizontal" />
+            android:layout_gravity="top|center_horizontal"
+            androidprv:layout_childType="pageDeleteDropTarget" />
 
         <include layout="@layout/keyguard_widget_pager"
             android:id="@+id/app_widget_container"
diff --git a/core/res/res/layout/keyguard_widget_remove_drop_target.xml b/core/res/res/layout/keyguard_widget_remove_drop_target.xml
index f9f40ab..294c386 100644
--- a/core/res/res/layout/keyguard_widget_remove_drop_target.xml
+++ b/core/res/res/layout/keyguard_widget_remove_drop_target.xml
@@ -19,9 +19,9 @@
 <TextView
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:gravity="center"
-    android:padding="20dp"
-    android:paddingLeft="40dp"
-    android:paddingRight="40dp"
+    android:padding="30dp"
+    android:paddingLeft="60dp"
+    android:paddingRight="60dp"
     android:drawableLeft="@drawable/kg_widget_delete_drop_target"
     android:drawablePadding="4dp"
     android:text="@string/kg_reordering_delete_drop_target_text"
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index f1757f7..447daab 100755
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -5820,6 +5820,8 @@
         <!-- This is a handle that is used for expanding the
              security challenge container when it is collapsed. -->
         <enum name="expandChallengeHandle" value="6" />
+        <!-- Delete drop target.  This will be the drop target to delete pages. -->
+        <enum name="pageDeleteDropTarget" value="7" />
     </attr>
 
     <declare-styleable name="SlidingChallengeLayout_Layout">
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java
index 083d47e..685e8ee 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java
@@ -511,14 +511,17 @@
         return false;
     }
 
+    /**
+     * Returns the bounded set of pages that are re-orderable.  The range is fully inclusive.
+     */
     @Override
     void boundByReorderablePages(boolean isReordering, int[] range) {
         if (isReordering) {
             // Remove non-widget pages from the range
-            while (range[1] > range[0] && !isWidgetPage(range[1])) {
+            while (range[1] >= range[0] && !isWidgetPage(range[1])) {
                 range[1]--;
             }
-            while (range[0] < range[1] && !isWidgetPage(range[0])) {
+            while (range[0] <= range[1] && !isWidgetPage(range[0])) {
                 range[0]++;
             }
         }
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/MultiPaneChallengeLayout.java b/policy/src/com/android/internal/policy/impl/keyguard/MultiPaneChallengeLayout.java
index f4940a2..941f2f0 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/MultiPaneChallengeLayout.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/MultiPaneChallengeLayout.java
@@ -48,6 +48,7 @@
     private OnBouncerStateChangedListener mBouncerListener;
 
     private final Rect mTempRect = new Rect();
+    private final Rect mZeroPadding = new Rect();
 
     private final DisplayMetrics mDisplayMetrics;
 
@@ -187,6 +188,8 @@
             // on the window. We want to avoid resizing widgets when possible as it can
             // be ugly/expensive. This lets us simply clip them instead.
             return virtualHeight - heightUsed;
+        } else if (lp.childType == LayoutParams.CHILD_TYPE_PAGE_DELETE_DROP_TARGET) {
+            return height;
         }
         return Math.min(virtualHeight - heightUsed, height);
     }
@@ -330,6 +333,7 @@
         final int count = getChildCount();
         for (int i = 0; i < count; i++) {
             final View child = getChildAt(i);
+            LayoutParams lp = (LayoutParams) child.getLayoutParams();
 
             // We did the user switcher above if we have one.
             if (child == mUserSwitcherView || child.getVisibility() == GONE) continue;
@@ -337,6 +341,9 @@
             if (child == mScrimView) {
                 child.layout(0, 0, width, height);
                 continue;
+            } else if (lp.childType == LayoutParams.CHILD_TYPE_PAGE_DELETE_DROP_TARGET) {
+                layoutWithGravity(width, height, child, mZeroPadding, false);
+                continue;
             }
 
             layoutWithGravity(width, height, child, padding, false);
@@ -467,6 +474,7 @@
         public static final int CHILD_TYPE_CHALLENGE = 2;
         public static final int CHILD_TYPE_USER_SWITCHER = 3;
         public static final int CHILD_TYPE_SCRIM = 4;
+        public static final int CHILD_TYPE_PAGE_DELETE_DROP_TARGET = 7;
 
         public int gravity = Gravity.NO_GRAVITY;
 
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/PagedView.java b/policy/src/com/android/internal/policy/impl/keyguard/PagedView.java
index e991d16..3900ab4 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/PagedView.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/PagedView.java
@@ -233,6 +233,7 @@
     private Matrix mTmpInvMatrix = new Matrix();
     private float[] mTmpPoint = new float[2];
     private Rect mTmpRect = new Rect();
+    private Rect mAltTmpRect = new Rect();
 
     // Fling to delete
     private int FLING_TO_DELETE_FADE_OUT_DURATION = 350;
@@ -2451,7 +2452,13 @@
     /* Drag to delete */
     private boolean isHoveringOverDeleteDropTarget(int x, int y) {
         if (mDeleteDropTarget != null) {
+            mAltTmpRect.set(0, 0, 0, 0);
+            View parent = (View) mDeleteDropTarget.getParent();
+            if (parent != null) {
+                parent.getGlobalVisibleRect(mAltTmpRect);
+            }
             mDeleteDropTarget.getGlobalVisibleRect(mTmpRect);
+            mTmpRect.offset(-mAltTmpRect.left, -mAltTmpRect.top);
             return mTmpRect.contains(x, y);
         }
         return false;