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: