Enabling reordering

-> Reordering is enabled and persists
-> Fixed persistence issue when adding items to empty screen

Change-Id: I7c797b2c81a2988c95d8d9383be46d6ef0b7532d
diff --git a/src/com/android/launcher3/CellLayout.java b/src/com/android/launcher3/CellLayout.java
index 35598a2..ac41a2b 100644
--- a/src/com/android/launcher3/CellLayout.java
+++ b/src/com/android/launcher3/CellLayout.java
@@ -113,6 +113,7 @@
     // If we're actively dragging something over this screen, mIsDragOverlapping is true
     private boolean mIsDragOverlapping = false;
     private final Point mDragCenter = new Point();
+    boolean mUseActiveGlowBackground = false;
 
     // These arrays are used to implement the drag visualization on x-large screens.
     // They are used as circular arrays, indexed by mDragOutlineCurrent.
@@ -383,10 +384,15 @@
     void setIsDragOverlapping(boolean isDragOverlapping) {
         if (mIsDragOverlapping != isDragOverlapping) {
             mIsDragOverlapping = isDragOverlapping;
+            setUseActiveGlowBackground(mIsDragOverlapping);
             invalidate();
         }
     }
 
+    void setUseActiveGlowBackground(boolean use) {
+        mUseActiveGlowBackground = use;
+    }
+
     boolean getIsDragOverlapping() {
         return mIsDragOverlapping;
     }
@@ -437,7 +443,7 @@
         if (mBackgroundAlpha > 0.0f) {
             Drawable bg;
 
-            if (mIsDragOverlapping) {
+            if (mUseActiveGlowBackground) {
                 // In the mini case, we draw the active_glow bg *over* the active background
                 bg = mActiveGlowBackground;
             } else {
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index e059fee..d1959df 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -2432,9 +2432,11 @@
                 mWorkspace.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS,
                         HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING);
                 // Disabling reordering until we sort out some issues.
-                //mWorkspace.startReordering();
-                // TODO: need to have a new way to set wallpaper or start reordering
-                startWallpaper();
+                if (mWorkspace.getIdForScreen((CellLayout) v) >= 0) {
+                    mWorkspace.startReordering();
+                } else {
+                    startWallpaper();
+                }
             } else {
                 if (!(itemUnderLongClick instanceof Folder)) {
                     // User long pressed on an item
diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java
index c2b9bd7..cc9a075 100644
--- a/src/com/android/launcher3/PagedView.java
+++ b/src/com/android/launcher3/PagedView.java
@@ -87,7 +87,7 @@
     // We are disabling touch interaction of the widget region for factory ROM.
     private static final boolean DISABLE_TOUCH_INTERACTION = false;
     private static final boolean DISABLE_TOUCH_SIDE_PAGES = false;
-    private static final boolean DISABLE_FLING_TO_DELETE = false;
+    private static final boolean DISABLE_FLING_TO_DELETE = true;
 
     static final int AUTOMATIC_PAGE_SPACING = -1;
 
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index 37ef3c4..cd31722 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -650,10 +650,9 @@
                 return;
             }
         }
-
-        // If an item is added to the extra empty screen, we convert it to a real
         if (screenId == EXTRA_EMPTY_SCREEN_ID) {
-            screenId = commitExtraEmptyScreen();
+            // This should never happen
+            throw new RuntimeException("Screen id should not be EXTRA_EMPTY_SCREEN_ID");
         }
 
         final CellLayout layout;
@@ -1666,6 +1665,49 @@
         return getChangeStateAnimation(state, animated, 0);
     }
 
+    void boundByReorderablePages(boolean isReordering, int[] range) {
+        int count = mScreenOrder.size();
+
+        int start = -1;
+        int end = -1;
+        //
+        for (int i = 0; i < count; i++) {
+            if (start < 0 && mScreenOrder.get(i) >= 0) {
+                start = i;
+            }
+            if (start >=0 && mScreenOrder.get(i) >= 0) {
+                end = i;
+            }
+        }
+        range[0] = start;
+        range[1] = end;
+     }
+
+    protected void onStartReordering() {
+        super.onStartReordering();
+        int count = getChildCount();
+        for (int i = 0; i < count; i++) {
+            ((CellLayout) getChildAt(i)).setUseActiveGlowBackground(true);
+        }
+        showOutlines();
+    }
+
+    protected void onEndReordering() {
+        super.onEndReordering();
+        int count = getChildCount();
+        for (int i = 0; i < count; i++) {
+            ((CellLayout) getChildAt(i)).setUseActiveGlowBackground(false);
+        }
+        hideOutlines();
+
+        mScreenOrder.clear();
+        for (int i = 0; i < count; i++) {
+            CellLayout cl = ((CellLayout) getChildAt(i));
+            mScreenOrder.add(getIdForScreen(cl));
+        }
+        mLauncher.getModel().updateWorkspaceScreenOrder(mLauncher, mScreenOrder);
+    }
+
     Animator getChangeStateAnimation(final State state, boolean animated, int delay) {
         if (mState == state) {
             return null;
@@ -2113,6 +2155,12 @@
                 return false;
             }
         }
+
+        long screenId = getIdForScreen(dropTargetLayout);
+        if (screenId == EXTRA_EMPTY_SCREEN_ID) {
+            commitExtraEmptyScreen();
+        }
+
         return true;
     }