Merge "Fixing issue where certain icons in the customization drawer were not being scaled down to size."
diff --git a/Android.mk b/Android.mk
index dfe6788..89e626b 100644
--- a/Android.mk
+++ b/Android.mk
@@ -30,7 +30,7 @@
 
 LOCAL_OVERRIDES_PACKAGES := Home
 
-LOCAL_PROGUARD_FLAGS := -include $(LOCAL_PATH)/proguard.flags
+LOCAL_PROGUARD_FLAG_FILES := proguard.flags
 
 include $(BUILD_PACKAGE)
 
diff --git a/src/com/android/launcher2/CellLayout.java b/src/com/android/launcher2/CellLayout.java
index 84b26f2..a55990b 100644
--- a/src/com/android/launcher2/CellLayout.java
+++ b/src/com/android/launcher2/CellLayout.java
@@ -766,9 +766,9 @@
      */
     int[] findNearestVacantArea(
             int pixelX, int pixelY, int spanX, int spanY, View ignoreView, int[] result) {
-        if (ignoreView != null) {
-            markCellsAsUnoccupiedForView(ignoreView);
-        }
+        // mark space take by ignoreView as available (method checks if ignoreView is null)
+        markCellsAsUnoccupiedForView(ignoreView);
+
         // Keep track of best-scoring drop area
         final int[] bestXY = result != null ? result : new int[2];
         double bestDistance = Double.MAX_VALUE;
@@ -802,9 +802,8 @@
                 }
             }
         }
-        if (ignoreView != null) {
-            markCellsAsOccupiedForView(ignoreView);
-        }
+        // re-mark space taken by ignoreView as occupied
+        markCellsAsOccupiedForView(ignoreView);
 
         // Return null if no suitable location found
         if (bestDistance < Double.MAX_VALUE) {
@@ -872,9 +871,8 @@
      */
     boolean findCellForSpanThatIntersectsIgnoring(int[] cellXY, int spanX, int spanY,
             int intersectX, int intersectY, View ignoreView) {
-        if (ignoreView != null) {
-            markCellsAsUnoccupiedForView(ignoreView);
-        }
+        // mark space take by ignoreView as available (method checks if ignoreView is null)
+        markCellsAsUnoccupiedForView(ignoreView);
 
         boolean foundCell = false;
         while (true) {
@@ -927,9 +925,8 @@
             }
         }
 
-        if (ignoreView != null) {
-            markCellsAsOccupiedForView(ignoreView);
-        }
+        // re-mark space taken by ignoreView as occupied
+        markCellsAsOccupiedForView(ignoreView);
         return foundCell;
     }
 
@@ -1123,11 +1120,13 @@
     }
 
     private void markCellsAsOccupiedForView(View view) {
+        if (view == null || view.getParent() != this) return;
         LayoutParams lp = (LayoutParams) view.getLayoutParams();
         markCellsForView(lp.cellX, lp.cellY, lp.cellHSpan, lp.cellVSpan, true);
     }
 
     private void markCellsAsUnoccupiedForView(View view) {
+        if (view == null || view.getParent() != this) return;
         LayoutParams lp = (LayoutParams) view.getLayoutParams();
         markCellsForView(lp.cellX, lp.cellY, lp.cellHSpan, lp.cellVSpan, false);
     }
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index 9ca71d9..3ccfaf8 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -774,23 +774,25 @@
         } else {
             cellLayout = getCurrentDropLayout();
         }
+
         if (source != this) {
             onDropExternal(originX, originY, dragInfo, cellLayout);
         } else {
             // Move internally
             if (mDragInfo != null) {
                 final View cell = mDragInfo.cell;
-                int index = mScroller.isFinished() ? mCurrentPage : mNextPage;
-                if (index != mDragInfo.screen) {
-                    final CellLayout originalCellLayout = (CellLayout) getChildAt(mDragInfo.screen);
-                    originalCellLayout.removeView(cell);
-                    addInScreen(cell, index, mDragInfo.cellX, mDragInfo.cellY,
-                            mDragInfo.spanX, mDragInfo.spanY);
-                }
 
                 mTargetCell = findNearestVacantArea(originX, originY,
                         mDragInfo.spanX, mDragInfo.spanY, cell, cellLayout,
                         mTargetCell);
+
+                int screen = indexOfChild(cellLayout);
+                if (screen != mDragInfo.screen) {
+                    final CellLayout originalCellLayout = (CellLayout) getChildAt(mDragInfo.screen);
+                    originalCellLayout.removeView(cell);
+                    addInScreen(cell, screen, mTargetCell[0], mTargetCell[1],
+                            mDragInfo.spanX, mDragInfo.spanY);
+                }
                 cellLayout.onDropChild(cell);
 
                 // update the item's position after drop
@@ -799,11 +801,11 @@
                 cellLayout.onMove(cell, mTargetCell[0], mTargetCell[1]);
                 lp.cellX = mTargetCell[0];
                 lp.cellY = mTargetCell[1];
-                cell.setId(LauncherModel.getCellLayoutChildId(cell.getId(), mDragInfo.screen,
+                cell.setId(LauncherModel.getCellLayoutChildId(-1, mDragInfo.screen,
                         mTargetCell[0], mTargetCell[1], mDragInfo.spanX, mDragInfo.spanY));
 
                 LauncherModel.moveItemInDatabase(mLauncher, info,
-                        LauncherSettings.Favorites.CONTAINER_DESKTOP, index,
+                        LauncherSettings.Favorites.CONTAINER_DESKTOP, screen,
                         lp.cellX, lp.cellY);
             }
         }