Create a new DragOptions for every drag operation
Previously we were reusing the same DragOptions which led to some
bad states.
Test: Drag items around, ensure nothing disappears from Workspace
Bug: 182079330
Change-Id: I8d6027bc984db8c770841bb560735604689ad0ff
diff --git a/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java b/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java
index 161c98e..6f36d45 100644
--- a/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java
+++ b/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java
@@ -85,7 +85,7 @@
private @Nullable TaskbarController mTaskbarController;
private final TaskbarStateHandler mTaskbarStateHandler = new TaskbarStateHandler(this);
// Will be updated when dragging from taskbar.
- private DragOptions mWorkspaceDragOptions = new DragOptions();
+ private @Nullable DragOptions mNextWorkspaceDragOptions = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -274,11 +274,16 @@
@Override
public DragOptions getDefaultWorkspaceDragOptions() {
- return mWorkspaceDragOptions;
+ if (mNextWorkspaceDragOptions != null) {
+ DragOptions options = mNextWorkspaceDragOptions;
+ mNextWorkspaceDragOptions = null;
+ return options;
+ }
+ return super.getDefaultWorkspaceDragOptions();
}
- public void setWorkspaceDragOptions(DragOptions dragOptions) {
- mWorkspaceDragOptions = dragOptions;
+ public void setNextWorkspaceDragOptions(DragOptions dragOptions) {
+ mNextWorkspaceDragOptions = dragOptions;
}
@Override
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragListener.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragListener.java
index 2bd5861..9d203fb 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragListener.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragListener.java
@@ -37,7 +37,6 @@
private final BaseQuickstepLauncher mLauncher;
private final ItemInfo mDraggedItem;
- private final DragOptions mDragOptions;
// Randomly generated id used to verify the drag event.
private final String mId;
@@ -51,8 +50,6 @@
public TaskbarDragListener(BaseQuickstepLauncher launcher, ItemInfo draggedItem) {
mLauncher = launcher;
mDraggedItem = draggedItem;
- mDragOptions = new DragOptions();
- mDragOptions.simulatedDndStartPoint = new Point();
mId = UUID.randomUUID().toString();
}
@@ -63,7 +60,7 @@
private void cleanup() {
mDragLayer.setOnDragListener(null);
- mLauncher.setWorkspaceDragOptions(new DragOptions());
+ mLauncher.setNextWorkspaceDragOptions(null);
}
/**
@@ -88,8 +85,10 @@
cleanup();
return false;
}
- mDragOptions.simulatedDndStartPoint.set((int) dragEvent.getX(), (int) dragEvent.getY());
- mLauncher.setWorkspaceDragOptions(mDragOptions);
+ DragOptions dragOptions = new DragOptions();
+ dragOptions.simulatedDndStartPoint = new Point((int) dragEvent.getX(),
+ (int) dragEvent.getY());
+ mLauncher.setNextWorkspaceDragOptions(dragOptions);
hotseatView.performLongClick();
} else if (dragEvent.getAction() == DragEvent.ACTION_DRAG_ENDED) {
cleanup();