Merge "Ensure drag outline & crosshairs disappear on drag cancel" into honeycomb
diff --git a/src/com/android/launcher2/CellLayout.java b/src/com/android/launcher2/CellLayout.java
index 3249724..49ae652 100644
--- a/src/com/android/launcher2/CellLayout.java
+++ b/src/com/android/launcher2/CellLayout.java
@@ -1342,9 +1342,7 @@
             lp.isDragging = false;
             lp.dropped = true;
             lp.animateDrop = animate;
-            if (animate) {
-                child.setVisibility(View.INVISIBLE);
-            }
+            child.setVisibility(animate ? View.INVISIBLE : View.VISIBLE);
             child.requestLayout();
         }
     }
diff --git a/src/com/android/launcher2/DragController.java b/src/com/android/launcher2/DragController.java
index b456030..45b359d 100644
--- a/src/com/android/launcher2/DragController.java
+++ b/src/com/android/launcher2/DragController.java
@@ -399,6 +399,7 @@
      */
     public void cancelDrag() {
         if (mDragging) {
+            // Should we also be calling onDragExit() here?
             mDragSource.onDropCompleted(null, false);
         }
         endDrag();
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index b248dd6..56055d9 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -2398,8 +2398,7 @@
         }
     }
 
-    public void onDragExit(DragSource source, int x, int y, int xOffset,
-            int yOffset, DragView dragView, Object dragInfo) {
+    private void doDragExit() {
         mWasSpringLoadedOnDragExit = mShrinkState == ShrinkState.SPRING_LOADED;
         if (mDragTargetLayout != null) {
             mDragTargetLayout.onDragExit();
@@ -2413,6 +2412,11 @@
         clearAllHovers();
     }
 
+    public void onDragExit(DragSource source, int x, int y, int xOffset,
+            int yOffset, DragView dragView, Object dragInfo) {
+        doDragExit();
+    }
+
     @Override
     public void getHitRect(Rect outRect) {
         // We want the workspace to have the whole area of the display (it will find the correct
@@ -2560,6 +2564,9 @@
         mDragController = dragController;
     }
 
+    /**
+     * Called at the end of a drag which originated on the workspace.
+     */
     public void onDropCompleted(View target, boolean success) {
         if (success) {
             if (target != this && mDragInfo != null) {
@@ -2571,8 +2578,11 @@
                 // final Object tag = mDragInfo.cell.getTag();
             }
         } else if (mDragInfo != null) {
-            boolean animateDrop = !mWasSpringLoadedOnDragExit;
-            ((CellLayout) getChildAt(mDragInfo.screen)).onDropChild(mDragInfo.cell, animateDrop);
+            // NOTE: When 'success' is true, onDragExit is called by the DragController before
+            // calling onDropCompleted(). We call it ourselves here, but maybe this should be
+            // moved into DragController.cancelDrag().
+            doDragExit();
+            ((CellLayout) getChildAt(mDragInfo.screen)).onDropChild(mDragInfo.cell, false);
         }
         mLauncher.unlockScreenOrientation();
         mDragOutline = null;