Framework drag driver now sends new event type - exited window.

When drag exits Launcher window (for example, goes to Shelf) launcher doesn't get notified
and thinks the drag is still over it. For example if there is a moved shaking icon in Hotseat,
it will keep shaking.

Fixing this.

Bug: 22028725
Change-Id: Ie57572a57a324d426c9f6e57dc0bba56630e92df
diff --git a/src/com/android/launcher3/DragController.java b/src/com/android/launcher3/DragController.java
index 2b4f019..1373bf2 100644
--- a/src/com/android/launcher3/DragController.java
+++ b/src/com/android/launcher3/DragController.java
@@ -437,6 +437,14 @@
     }
 
     @Override
+    public void onDriverDragExitWindow() {
+        if (mLastDropTarget != null) {
+            mLastDropTarget.onDragExit(mDragObject);
+            mLastDropTarget = null;
+        }
+    }
+
+    @Override
     public void onDriverDragEnd(float x, float y, DropTarget dropTargetOverride) {
         final int[] dragLayerPos = getClampedDragLayerPos(x, y);
         final int dragLayerX = dragLayerPos[0];
diff --git a/src/com/android/launcher3/DragDriver.java b/src/com/android/launcher3/DragDriver.java
index 6cd52bd..9ee4b3d 100644
--- a/src/com/android/launcher3/DragDriver.java
+++ b/src/com/android/launcher3/DragDriver.java
@@ -32,6 +32,7 @@
 
     public interface EventListener {
         void onDriverDragMove(float x, float y);
+        void onDriverDragExitWindow();
         void onDriverDragEnd(float x, float y, DropTarget dropTargetOverride);
         void onDriverDragCancel();
     }
@@ -165,6 +166,7 @@
                 return true;
 
             case DragEvent.ACTION_DRAG_EXITED:
+                mEventListener.onDriverDragExitWindow();
                 return true;
 
             case DragEvent.ACTION_DRAG_ENDED: