Merge "Keep splitting tasks in the background with shell transition" into udc-dev

This commit is contained in:
Jerry Chang
2023-05-04 13:34:17 +00:00
committed by Android (Google) Code Review
2 changed files with 32 additions and 10 deletions

View File

@@ -1476,6 +1476,8 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
mSideStage.removeAllTasks(wct, false /* toTop */);
mMainStage.deactivate(wct, false /* toTop */);
}
wct.setReparentLeafTaskIfRelaunch(mRootTaskInfo.token,
false /* reparentLeafTaskIfRelaunch */);
}
private void prepareEnterSplitScreen(WindowContainerTransaction wct) {
@@ -2327,6 +2329,15 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
// the remote handler.
return null;
}
if ((mMainStage.containsTask(triggerTask.taskId)
&& mMainStage.getChildCount() == 1)
|| (mSideStage.containsTask(triggerTask.taskId)
&& mSideStage.getChildCount() == 1)) {
// A splitting task is opening to fullscreen causes one side of the split empty,
// so appends operations to exit split.
prepareExitSplitScreen(STAGE_TYPE_UNDEFINED, out);
}
}
} else {
if (isOpening && getStageOfTask(triggerTask) != null) {
@@ -2409,9 +2420,23 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
if (isOpeningType(change.getMode())) {
// Split is opened by someone so set it as visible.
setSplitsVisible(true);
// TODO(b/275664132): Find a way to integrate this with finishWct.
// This is setting the flag to a task and not interfering with the
// transition.
final WindowContainerTransaction wct = new WindowContainerTransaction();
wct.setReparentLeafTaskIfRelaunch(mRootTaskInfo.token,
false /* reparentLeafTaskIfRelaunch */);
mTaskOrganizer.applyTransaction(wct);
} else if (isClosingType(change.getMode())) {
// Split is closed by someone so set it as invisible.
setSplitsVisible(false);
// TODO(b/275664132): Find a way to integrate this with finishWct.
// This is setting the flag to a task and not interfering with the
// transition.
final WindowContainerTransaction wct = new WindowContainerTransaction();
wct.setReparentLeafTaskIfRelaunch(mRootTaskInfo.token,
true /* reparentLeafTaskIfRelaunch */);
mTaskOrganizer.applyTransaction(wct);
}
continue;
}
@@ -2812,16 +2837,9 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
}
}
// TODO(b/275664132): Remove dismissing split screen here to fit in back-to-split support.
// Dismiss the split screen if it's not returning to split.
prepareExitSplitScreen(STAGE_TYPE_UNDEFINED, finishWct);
for (TransitionInfo.Change change : info.getChanges()) {
if (change.getTaskInfo() != null && TransitionUtil.isClosingType(change.getMode())) {
finishT.setCrop(change.getLeash(), null).hide(change.getLeash());
}
}
setSplitsVisible(false);
setDividerVisibility(false, finishT);
finishWct.setReparentLeafTaskIfRelaunch(mRootTaskInfo.token,
true /* reparentLeafTaskIfRelaunch */);
logExit(EXIT_REASON_UNKNOWN);
}

View File

@@ -2909,6 +2909,9 @@ class ActivityStarter {
private void setTargetRootTaskIfNeeded(ActivityRecord intentActivity) {
intentActivity.getTaskFragment().clearLastPausedActivity();
Task intentTask = intentActivity.getTask();
// The intent task might be reparented while in getOrCreateRootTask, caches the original
// root task to distinguish if it is moving to front or not.
final Task origRootTask = intentTask != null ? intentTask.getRootTask() : null;
if (mTargetRootTask == null) {
// Update launch target task when it is not indicated.
@@ -2941,7 +2944,8 @@ class ActivityStarter {
? null : focusRootTask.topRunningNonDelayedActivityLocked(mNotTop);
final Task topTask = curTop != null ? curTop.getTask() : null;
differentTopTask = topTask != intentTask
|| (focusRootTask != null && topTask != focusRootTask.getTopMostTask());
|| (focusRootTask != null && topTask != focusRootTask.getTopMostTask())
|| (focusRootTask != null && focusRootTask != origRootTask);
} else {
// The existing task should always be different from those in other displays.
differentTopTask = true;