Initiate Hotseat drag from long pressing corresponding Taskbar item

When you long press on the taskbar hotseat item, the following happens:
- We start a system drag and drop with an invisible drag shadow
- We create a new DragOptions with the simulatedDndStartPoint set to the
  drag down position, and tell Launcher to use that for the next drag
- We perform a long click on the equivalent Hotseat item in Launcher
- We pass the drag events of that operation to Launcher's DragController

This allows Launcher to handle the entire drag operation, including the
pre-drag (with popup), and taskbar already hides when the drag starts.

Test: Long press items in taskbar hotseat, able to drag them to workspace

Bug: 179886115
Bug: 171917176
Change-Id: I576b80cb1bd0225cdc91cf7689fdee0481265109
This commit is contained in:
Tony Wickham
2021-02-26 09:15:31 -08:00
parent 3ca4b0d88f
commit 39938cbc94
9 changed files with 170 additions and 5 deletions

View File

@@ -35,6 +35,7 @@ import android.view.View;
import androidx.annotation.Nullable;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.dragndrop.DragOptions;
import com.android.launcher3.model.WellbeingModel;
import com.android.launcher3.popup.SystemShortcut;
import com.android.launcher3.proxy.ProxyActivityStarter;
@@ -83,6 +84,8 @@ public abstract class BaseQuickstepLauncher extends Launcher
private @Nullable TaskbarController mTaskbarController;
private final TaskbarStateHandler mTaskbarStateHandler = new TaskbarStateHandler(this);
// Will be updated when dragging from taskbar.
private DragOptions mWorkspaceDragOptions = new DragOptions();
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -269,6 +272,15 @@ public abstract class BaseQuickstepLauncher extends Launcher
return mTaskbarController != null && mTaskbarController.isViewInTaskbar(v);
}
@Override
public DragOptions getDefaultWorkspaceDragOptions() {
return mWorkspaceDragOptions;
}
public void setWorkspaceDragOptions(DragOptions dragOptions) {
mWorkspaceDragOptions = dragOptions;
}
@Override
public void useFadeOutAnimationForLauncherStart(CancellationSignal signal) {
QuickstepAppTransitionManagerImpl appTransitionManager =