Fix 3373059: Crash when drag cancelled in spring-loaded state
diff --git a/src/com/android/launcher2/AllAppsPagedView.java b/src/com/android/launcher2/AllAppsPagedView.java
index 64da1b4..fe7312d 100644
--- a/src/com/android/launcher2/AllAppsPagedView.java
+++ b/src/com/android/launcher2/AllAppsPagedView.java
@@ -288,7 +288,7 @@
             endChoiceMode();
         }
         tearDownDragMode();
-        mLauncher.getWorkspace().onDragStopped();
+        mLauncher.getWorkspace().onDragStopped(success);
         mLauncher.unlockScreenOrientation();
     }
 
diff --git a/src/com/android/launcher2/CustomizePagedView.java b/src/com/android/launcher2/CustomizePagedView.java
index d9a6612..c74e5f4 100644
--- a/src/com/android/launcher2/CustomizePagedView.java
+++ b/src/com/android/launcher2/CustomizePagedView.java
@@ -327,7 +327,7 @@
     @Override
     public void onDropCompleted(View target, boolean success) {
         resetCheckedGrandchildren();
-        mLauncher.getWorkspace().onDragStopped();
+        mLauncher.getWorkspace().onDragStopped(success);
         mLauncher.unlockScreenOrientation();
     }
 
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index 56055d9..b9a2b62 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -1458,6 +1458,7 @@
                     cl.setIsDefaultDropTarget(i == mCurrentPage);
                 case BOTTOM_HIDDEN:
                 case BOTTOM_VISIBLE:
+                case SPRING_LOADED:
                     if (!isDragHappening) {
                         // even if a drag isn't happening, we don't want to show a screen as
                         // accepting drops if it doesn't have at least one free cell
@@ -1468,8 +1469,7 @@
                     cl.setAcceptsDrops(cl.findCellForSpan(null, spanX, spanY));
                     break;
                 default:
-                     throw new RuntimeException(
-                             "updateWhichPagesAcceptDropsHelper passed an unhandled ShrinkState");
+                     throw new RuntimeException("Unhandled ShrinkState " + state);
             }
         }
     }
@@ -1499,7 +1499,11 @@
 
     // we call this method whenever a drag and drop in Launcher finishes, even if Workspace was
     // never dragged over
-    public void onDragStopped() {
+    public void onDragStopped(boolean success) {
+        // In the success case, DragController has already called onDragExit()
+        if (!success) {
+            doDragExit();
+        }
         mIsDragInProcess = false;
         updateWhichPagesAcceptDrops(mShrinkState);
     }