Don't animate tapped item if the target screen is full
diff --git a/src/com/android/launcher2/CellLayout.java b/src/com/android/launcher2/CellLayout.java
index ef4637e..505d465 100644
--- a/src/com/android/launcher2/CellLayout.java
+++ b/src/com/android/launcher2/CellLayout.java
@@ -909,19 +909,6 @@
     }
 
     /**
-     * Estimate the size that a child with the given dimensions will take in the layout.
-     */
-    void estimateChildSize(int minWidth, int minHeight, int[] result) {
-        // Assuming it's placed at 0, 0, find where the bottom right cell will land
-        rectToCell(minWidth, minHeight, result);
-
-        // Then figure out the rect it will occupy
-        cellToRect(0, 0, result[0], result[1], mRectF);
-        result[0] = (int)mRectF.width();
-        result[1] = (int)mRectF.height();
-    }
-
-    /**
      * Estimate where the top left cell of the dragged item will land if it is dropped.
      *
      * @param originX The X value of the top left corner of the item
@@ -1322,6 +1309,29 @@
     }
 
     /**
+     * Calculate the grid spans needed to fit given item
+     */
+    public void calculateSpans(ItemInfo info) {
+        final int minWidth;
+        final int minHeight;
+
+        if (info instanceof LauncherAppWidgetInfo) {
+            minWidth = ((LauncherAppWidgetInfo) info).minWidth;
+            minHeight = ((LauncherAppWidgetInfo) info).minHeight;
+        } else if (info instanceof PendingAddWidgetInfo) {
+            minWidth = ((PendingAddWidgetInfo) info).minWidth;
+            minHeight = ((PendingAddWidgetInfo) info).minHeight;
+        } else {
+            // It's not a widget, so it must be 1x1
+            info.spanX = info.spanY = 1;
+            return;
+        }
+        int[] spans = rectToCell(minWidth, minHeight, null);
+        info.spanX = spans[0];
+        info.spanY = spans[1];
+    }
+
+    /**
      * Find the first vacant cell, if there is one.
      *
      * @param vacant Holds the x and y coordinate of the vacant cell
diff --git a/src/com/android/launcher2/CustomizePagedView.java b/src/com/android/launcher2/CustomizePagedView.java
index 5672921..4eb852c 100644
--- a/src/com/android/launcher2/CustomizePagedView.java
+++ b/src/com/android/launcher2/CustomizePagedView.java
@@ -21,7 +21,7 @@
 import org.xmlpull.v1.XmlPullParser;
 
 import android.animation.Animator;
-import android.animation.Animator.AnimatorListener;
+import android.animation.AnimatorListenerAdapter;
 import android.animation.ObjectAnimator;
 import android.animation.PropertyValuesHolder;
 import android.animation.TimeInterpolator;
@@ -40,7 +40,6 @@
 import android.graphics.Bitmap;
 import android.graphics.Bitmap.Config;
 import android.graphics.Canvas;
-import android.graphics.Color;
 import android.graphics.drawable.Drawable;
 import android.util.AttributeSet;
 import android.util.Log;
@@ -378,11 +377,7 @@
         posAnim.setInterpolator(mQuintEaseOutInterpolator);
         posAnim.setDuration(ANIMATION_DURATION);
 
-        posAnim.addListener(new AnimatorListener() {
-            public void onAnimationCancel(Animator animation) {}
-            public void onAnimationRepeat(Animator animation) {}
-            public void onAnimationStart(Animator animation) {}
-
+        posAnim.addListener(new AnimatorListenerAdapter() {
             public void onAnimationEnd(Animator animation) {
                 dragLayer.removeView(dragCopy);
                 mLauncher.addExternalItemToScreen(info, layout);
@@ -443,7 +438,12 @@
             animateClickFeedback(v, new Runnable() {
                 @Override
                 public void run() {
-                    animateItemOntoScreen(dragView, cl, itemInfo);
+                    cl.calculateSpans(itemInfo);
+                    if (cl.findCellForSpan(null, itemInfo.spanX, itemInfo.spanY)) {
+                        animateItemOntoScreen(dragView, cl, itemInfo);
+                    } else {
+                        mLauncher.showOutOfSpaceMessage();
+                    }
                 }
             });
             return;
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index 0268378..eaa09ac 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -2217,13 +2217,6 @@
                 localPixelX, localPixelY, spanX, spanY, ignoreView, recycle);
     }
 
-    /**
-     * Estimate the size that a child with the given dimensions will take in the current screen.
-     */
-    void estimateChildSize(int minWidth, int minHeight, int[] result) {
-        ((CellLayout)getChildAt(mCurrentPage)).estimateChildSize(minWidth, minHeight, result);
-    }
-
     void setLauncher(Launcher launcher) {
         mLauncher = launcher;
         mSpringLoadedDragController = new SpringLoadedDragController(mLauncher);