Add animation runner for alt-tab desktop app launch

Create a remote transition supporting alt-tab app-launches (app launches
caused by a user using alt-tab to select a minimized app) and any
minimization caused by hitting the window limit during such an app
launch.

Test: manual, and WindowAnimatorTest
Bug: 349791584
Flag: com.android.window.flags.enable_desktop_app_launch_alttab_transitions
Change-Id: I6474fff351f3d7681ca25cd7331e4955e3d1c6e0
This commit is contained in:
Gustav Sennton
2024-08-21 14:55:38 +00:00
parent 247bc0461a
commit 6bb9d56ded
6 changed files with 435 additions and 11 deletions
@@ -1234,7 +1234,8 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
}
} else if (tag instanceof TaskItemInfo info) {
UI_HELPER_EXECUTOR.execute(() ->
SystemUiProxy.INSTANCE.get(this).showDesktopApp(info.getTaskId()));
SystemUiProxy.INSTANCE.get(this).showDesktopApp(
info.getTaskId(), /* remoteTransition= */ null));
mControllers.taskbarStashController.updateAndAnimateTransientTaskbar(
/* stash= */ true);
} else if (tag instanceof WorkspaceItemInfo) {
@@ -1325,7 +1326,8 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
GroupTask task,
@Nullable RemoteTransition remoteTransition,
boolean onDesktop) {
handleGroupTaskLaunch(task, remoteTransition, onDesktop, null, null);
handleGroupTaskLaunch(task, remoteTransition, onDesktop,
/* onStartCallback= */ null, /* onFinishCallback= */ null);
}
/**
@@ -1349,17 +1351,24 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
UI_HELPER_EXECUTOR.execute(() ->
SystemUiProxy.INSTANCE.get(this).showDesktopApps(getDisplay().getDisplayId(),
remoteTransition));
} else if (onDesktop) {
return;
}
if (onDesktop) {
boolean useRemoteTransition = task.task1.isMinimized
&& com.android.window.flags.Flags.enableDesktopAppLaunchAlttabTransitions();
UI_HELPER_EXECUTOR.execute(() -> {
if (onStartCallback != null) {
onStartCallback.run();
}
SystemUiProxy.INSTANCE.get(this).showDesktopApp(task.task1.key.id);
SystemUiProxy.INSTANCE.get(this).showDesktopApp(
task.task1.key.id, useRemoteTransition ? remoteTransition : null);
if (onFinishCallback != null) {
onFinishCallback.run();
}
});
} else if (task.task2 == null) {
return;
}
if (task.task2 == null) {
UI_HELPER_EXECUTOR.execute(() -> {
ActivityOptions activityOptions =
makeDefaultActivityOptions(SPLASH_SCREEN_STYLE_UNDEFINED).options;
@@ -1368,9 +1377,9 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
ActivityManagerWrapper.getInstance().startActivityFromRecents(
task.task1.key, activityOptions);
});
} else {
mControllers.uiController.launchSplitTasks(task, remoteTransition);
return;
}
mControllers.uiController.launchSplitTasks(task, remoteTransition);
}
/**