Bounding folders into their associated cell layout  area, excluding dock

Change-Id: I220ccf1d8b08f9962c63efc92265e3c7acc137f9
diff --git a/src/com/android/launcher2/Folder.java b/src/com/android/launcher2/Folder.java
index dd0bffd..ef02de6 100644
--- a/src/com/android/launcher2/Folder.java
+++ b/src/com/android/launcher2/Folder.java
@@ -730,20 +730,24 @@
         int centeredLeft = centerX - width / 2;
         int centeredTop = centerY - height / 2;
 
-        int parentWidth = 0;
-        int parentHeight = 0;
-        if (parent != null) {
-            parentWidth = parent.getMeasuredWidth();
-            parentHeight = parent.getMeasuredHeight();
-        }
+        // We first fetch the currently visible CellLayoutChildren
+        int page = mLauncher.getWorkspace().getCurrentPage();
+        CellLayout currentPage = (CellLayout) mLauncher.getWorkspace().getChildAt(page);
+        CellLayoutChildren boundingLayout = currentPage.getChildrenLayout();
+        Rect bounds = new Rect();
+        parent.getDescendantRectRelativeToSelf(boundingLayout, bounds);
 
-        int left = Math.min(Math.max(0, centeredLeft), parentWidth - width);
-        int top = Math.min(Math.max(0, centeredTop), parentHeight - height);
-        if (width >= parentWidth) {
-            left = (parentWidth - width) / 2;
+        // We need to bound the folder to the currently visible CellLayoutChildren
+        int left = Math.min(Math.max(bounds.left, centeredLeft),
+                bounds.left + bounds.width() - width);
+        int top = Math.min(Math.max(bounds.top, centeredTop),
+                bounds.top + bounds.height() - height);
+        // If the folder doesn't fit within the bounds, center it about the desired bounds
+        if (width >= bounds.width()) {
+            left = bounds.left + (bounds.width() - width) / 2;
         }
-        if (height >= parentHeight) {
-            top = (parentHeight - height) / 2;
+        if (height >= bounds.height()) {
+            top = bounds.top + (bounds.height() - height) / 2;
         }
 
         int folderPivotX = width / 2 + (centeredLeft - left);