Loading libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java +17 −10 Original line number Diff line number Diff line Loading @@ -735,8 +735,8 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, boolean moveToStage(RunningTaskInfo task, @SplitPosition int stagePosition, WindowContainerTransaction wct) { ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "moveToStage: task=%d position=%d", task.taskId, stagePosition); ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "moveToStage: task=%d position=%d displayId=%d", task.taskId, stagePosition, task.displayId); // TODO(b/349828130) currently pass in index_undefined until we can revisit these // specific cases in the future. Only focusing on parity with starting intent/task prepareEnterSplitScreen(wct, task, stagePosition, false /* resizeAnim */, Loading Loading @@ -2034,8 +2034,9 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, void prepareEnterSplitScreen(WindowContainerTransaction wct, @Nullable RunningTaskInfo taskInfo, @SplitPosition int startPosition, boolean resizeAnim, @SplitIndex int index) { ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "prepareEnterSplitScreen: position=%d resize=%b", startPosition, resizeAnim); ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "prepareEnterSplitScreen: position=%d resize=%b " + "displayId=%d", startPosition, resizeAnim, taskInfo != null ? taskInfo.displayId : -1); onSplitScreenEnter(); // Preemptively reset the reparenting behavior if we know that we are entering, as starting // split tasks with activity trampolines can inadvertently trigger the task to be Loading @@ -2054,9 +2055,12 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, private void prepareBringSplit(WindowContainerTransaction wct, @Nullable RunningTaskInfo taskInfo, @SplitPosition int startPosition, boolean resizeAnim) { ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "prepareBringSplit: task=%d isSplitVisible=%b", taskInfo != null ? taskInfo.taskId : -1, isSplitScreenVisible()); if (taskInfo != null) { boolean taskInfoNotNull = taskInfo != null; ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "prepareBringSplit: task=%d isSplitVisible=%b " + "displayId=%d", taskInfoNotNull ? taskInfo.taskId : -1, isSplitScreenVisible(), taskInfoNotNull ? taskInfo.displayId : -1); if (taskInfoNotNull) { wct.startTask(taskInfo.taskId, resolveStartStage(STAGE_TYPE_UNDEFINED, startPosition, null, wct)); } Loading Loading @@ -2084,12 +2088,15 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, private void prepareActiveSplit(WindowContainerTransaction wct, @Nullable RunningTaskInfo taskInfo, @SplitPosition int startPosition, boolean resizeAnim, @SplitIndex int index) { ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "prepareActiveSplit: task=%d isSplitVisible=%b", taskInfo != null ? taskInfo.taskId : -1, isSplitScreenVisible()); boolean taskInfoNotNull = taskInfo != null; ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "prepareActiveSplit: task=%d isSplitVisible=%b " + "displayId=%d", taskInfoNotNull ? taskInfo.taskId : -1, isSplitScreenVisible(), taskInfoNotNull ? taskInfo.displayId : -1); // We handle split visibility itself on shell transition, but sometimes we didn't // reset it correctly after dismiss by some reason, so just set invisible before active. setSplitsVisible(false); if (taskInfo != null) { if (taskInfoNotNull) { setSideStagePosition(startPosition, wct); mSideStage.addTask(taskInfo, wct); } Loading libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java +10 −10 Original line number Diff line number Diff line Loading @@ -252,10 +252,10 @@ public class StageTaskListener implements ShellTaskOrganizer.TaskListener { @CallSuper public void onTaskAppeared(ActivityManager.RunningTaskInfo taskInfo, SurfaceControl leash) { ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "onTaskAppeared: taskId=%d taskParent=%d rootTask=%d " + "stageId=%s taskActivity=%s", + "stageId=%s taskActivity=%s displayId=%d", taskInfo.taskId, taskInfo.parentTaskId, mRootTaskInfo != null ? mRootTaskInfo.taskId : -1, stageTypeToString(mId), taskInfo.baseActivity); stageTypeToString(mId), taskInfo.baseActivity, taskInfo.displayId); if (mRootTaskInfo == null) { mRootLeash = leash; mRootTaskInfo = taskInfo; Loading Loading @@ -286,8 +286,8 @@ public class StageTaskListener implements ShellTaskOrganizer.TaskListener { @CallSuper public void onTaskInfoChanged(ActivityManager.RunningTaskInfo taskInfo) { ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "onTaskInfoChanged: taskId=%d taskAct=%s " + "stageId=%s", taskInfo.taskId, taskInfo.baseActivity, stageTypeToString(mId)); + "stageId=%s displayId=%d", taskInfo.taskId, taskInfo.baseActivity, stageTypeToString(mId), taskInfo.displayId); mWindowDecorViewModel.ifPresent(viewModel -> viewModel.onTaskInfoChanged(taskInfo)); if (mRootTaskInfo.taskId == taskInfo.taskId) { mRootTaskInfo = taskInfo; Loading @@ -297,8 +297,8 @@ public class StageTaskListener implements ShellTaskOrganizer.TaskListener { || !ArrayUtils.contains(CONTROLLED_WINDOWING_MODES_WHEN_ACTIVE, taskInfo.getWindowingMode())) { ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "onTaskInfoChanged: task=%d no longer supports multiwindow", taskInfo.taskId); "onTaskInfoChanged: task=%d no longer supports multiwindow on display=%d", taskInfo.taskId, taskInfo.displayId); // Leave split screen if the task no longer supports multi window or have // uncontrolled task. mCallbacks.onNoLongerSupportMultiWindow(this, taskInfo); Loading @@ -316,8 +316,8 @@ public class StageTaskListener implements ShellTaskOrganizer.TaskListener { @Override @CallSuper public void onTaskVanished(ActivityManager.RunningTaskInfo taskInfo) { ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "onTaskVanished: task=%d stageId=%s", taskInfo.taskId, stageTypeToString(mId)); ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "onTaskVanished: task=%d stageId=%s displayId=%d", taskInfo.taskId, stageTypeToString(mId), taskInfo.displayId); final int taskId = taskInfo.taskId; mWindowDecorViewModel.ifPresent(vm -> vm.onTaskVanished(taskInfo)); if (mRootTaskInfo.taskId == taskId) { Loading Loading @@ -478,8 +478,8 @@ public class StageTaskListener implements ShellTaskOrganizer.TaskListener { private void evictChild(@NonNull WindowContainerTransaction wct, @NonNull TaskInfo taskInfo, @NonNull String reason) { ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "Evict child: task=%d reason=%s", taskInfo.taskId, reason); ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "Evict child: task=%d reason=%s displayId=%d", taskInfo.taskId, reason, taskInfo.displayId); // We are reparenting the task, but not removing the task from mChildrenTaskInfo, so to // prevent this task from being considered as a top task for the roots, we need to override // the visibility of the soon-to-be-hidden task Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java +17 −10 Original line number Diff line number Diff line Loading @@ -735,8 +735,8 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, boolean moveToStage(RunningTaskInfo task, @SplitPosition int stagePosition, WindowContainerTransaction wct) { ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "moveToStage: task=%d position=%d", task.taskId, stagePosition); ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "moveToStage: task=%d position=%d displayId=%d", task.taskId, stagePosition, task.displayId); // TODO(b/349828130) currently pass in index_undefined until we can revisit these // specific cases in the future. Only focusing on parity with starting intent/task prepareEnterSplitScreen(wct, task, stagePosition, false /* resizeAnim */, Loading Loading @@ -2034,8 +2034,9 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, void prepareEnterSplitScreen(WindowContainerTransaction wct, @Nullable RunningTaskInfo taskInfo, @SplitPosition int startPosition, boolean resizeAnim, @SplitIndex int index) { ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "prepareEnterSplitScreen: position=%d resize=%b", startPosition, resizeAnim); ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "prepareEnterSplitScreen: position=%d resize=%b " + "displayId=%d", startPosition, resizeAnim, taskInfo != null ? taskInfo.displayId : -1); onSplitScreenEnter(); // Preemptively reset the reparenting behavior if we know that we are entering, as starting // split tasks with activity trampolines can inadvertently trigger the task to be Loading @@ -2054,9 +2055,12 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, private void prepareBringSplit(WindowContainerTransaction wct, @Nullable RunningTaskInfo taskInfo, @SplitPosition int startPosition, boolean resizeAnim) { ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "prepareBringSplit: task=%d isSplitVisible=%b", taskInfo != null ? taskInfo.taskId : -1, isSplitScreenVisible()); if (taskInfo != null) { boolean taskInfoNotNull = taskInfo != null; ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "prepareBringSplit: task=%d isSplitVisible=%b " + "displayId=%d", taskInfoNotNull ? taskInfo.taskId : -1, isSplitScreenVisible(), taskInfoNotNull ? taskInfo.displayId : -1); if (taskInfoNotNull) { wct.startTask(taskInfo.taskId, resolveStartStage(STAGE_TYPE_UNDEFINED, startPosition, null, wct)); } Loading Loading @@ -2084,12 +2088,15 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, private void prepareActiveSplit(WindowContainerTransaction wct, @Nullable RunningTaskInfo taskInfo, @SplitPosition int startPosition, boolean resizeAnim, @SplitIndex int index) { ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "prepareActiveSplit: task=%d isSplitVisible=%b", taskInfo != null ? taskInfo.taskId : -1, isSplitScreenVisible()); boolean taskInfoNotNull = taskInfo != null; ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "prepareActiveSplit: task=%d isSplitVisible=%b " + "displayId=%d", taskInfoNotNull ? taskInfo.taskId : -1, isSplitScreenVisible(), taskInfoNotNull ? taskInfo.displayId : -1); // We handle split visibility itself on shell transition, but sometimes we didn't // reset it correctly after dismiss by some reason, so just set invisible before active. setSplitsVisible(false); if (taskInfo != null) { if (taskInfoNotNull) { setSideStagePosition(startPosition, wct); mSideStage.addTask(taskInfo, wct); } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java +10 −10 Original line number Diff line number Diff line Loading @@ -252,10 +252,10 @@ public class StageTaskListener implements ShellTaskOrganizer.TaskListener { @CallSuper public void onTaskAppeared(ActivityManager.RunningTaskInfo taskInfo, SurfaceControl leash) { ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "onTaskAppeared: taskId=%d taskParent=%d rootTask=%d " + "stageId=%s taskActivity=%s", + "stageId=%s taskActivity=%s displayId=%d", taskInfo.taskId, taskInfo.parentTaskId, mRootTaskInfo != null ? mRootTaskInfo.taskId : -1, stageTypeToString(mId), taskInfo.baseActivity); stageTypeToString(mId), taskInfo.baseActivity, taskInfo.displayId); if (mRootTaskInfo == null) { mRootLeash = leash; mRootTaskInfo = taskInfo; Loading Loading @@ -286,8 +286,8 @@ public class StageTaskListener implements ShellTaskOrganizer.TaskListener { @CallSuper public void onTaskInfoChanged(ActivityManager.RunningTaskInfo taskInfo) { ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "onTaskInfoChanged: taskId=%d taskAct=%s " + "stageId=%s", taskInfo.taskId, taskInfo.baseActivity, stageTypeToString(mId)); + "stageId=%s displayId=%d", taskInfo.taskId, taskInfo.baseActivity, stageTypeToString(mId), taskInfo.displayId); mWindowDecorViewModel.ifPresent(viewModel -> viewModel.onTaskInfoChanged(taskInfo)); if (mRootTaskInfo.taskId == taskInfo.taskId) { mRootTaskInfo = taskInfo; Loading @@ -297,8 +297,8 @@ public class StageTaskListener implements ShellTaskOrganizer.TaskListener { || !ArrayUtils.contains(CONTROLLED_WINDOWING_MODES_WHEN_ACTIVE, taskInfo.getWindowingMode())) { ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "onTaskInfoChanged: task=%d no longer supports multiwindow", taskInfo.taskId); "onTaskInfoChanged: task=%d no longer supports multiwindow on display=%d", taskInfo.taskId, taskInfo.displayId); // Leave split screen if the task no longer supports multi window or have // uncontrolled task. mCallbacks.onNoLongerSupportMultiWindow(this, taskInfo); Loading @@ -316,8 +316,8 @@ public class StageTaskListener implements ShellTaskOrganizer.TaskListener { @Override @CallSuper public void onTaskVanished(ActivityManager.RunningTaskInfo taskInfo) { ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "onTaskVanished: task=%d stageId=%s", taskInfo.taskId, stageTypeToString(mId)); ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "onTaskVanished: task=%d stageId=%s displayId=%d", taskInfo.taskId, stageTypeToString(mId), taskInfo.displayId); final int taskId = taskInfo.taskId; mWindowDecorViewModel.ifPresent(vm -> vm.onTaskVanished(taskInfo)); if (mRootTaskInfo.taskId == taskId) { Loading Loading @@ -478,8 +478,8 @@ public class StageTaskListener implements ShellTaskOrganizer.TaskListener { private void evictChild(@NonNull WindowContainerTransaction wct, @NonNull TaskInfo taskInfo, @NonNull String reason) { ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "Evict child: task=%d reason=%s", taskInfo.taskId, reason); ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "Evict child: task=%d reason=%s displayId=%d", taskInfo.taskId, reason, taskInfo.displayId); // We are reparenting the task, but not removing the task from mChildrenTaskInfo, so to // prevent this task from being considered as a top task for the roots, we need to override // the visibility of the soon-to-be-hidden task Loading