Merge "Remove split pair according to last visible task" into tm-qpr-dev am: d4ae1a52ab

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21334258

Change-Id: Ia1f01d8278357d914eee54c07b7210e5ec1b8f8c
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
TreeHugger Robot
2023-02-15 06:22:19 +00:00
committed by Automerger Merge Worker
2 changed files with 16 additions and 2 deletions

View File

@@ -1222,8 +1222,8 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
// Notify recents if we are exiting in a way that breaks the pair, and disable further
// updates to splits in the recents until we enter split again
if (shouldBreakPairedTaskInRecents(exitReason) && mShouldUpdateRecents) {
recentTasks.removeSplitPair(mMainStage.getTopVisibleChildTaskId());
recentTasks.removeSplitPair(mSideStage.getTopVisibleChildTaskId());
recentTasks.removeSplitPair(mMainStage.getLastVisibleTaskId());
recentTasks.removeSplitPair(mSideStage.getLastVisibleTaskId());
}
});
mShouldUpdateRecents = false;

View File

@@ -92,6 +92,7 @@ class StageTaskListener implements ShellTaskOrganizer.TaskListener {
protected SurfaceControl mDimLayer;
protected SparseArray<ActivityManager.RunningTaskInfo> mChildrenTaskInfo = new SparseArray<>();
private final SparseArray<SurfaceControl> mChildrenLeashes = new SparseArray<>();
private int mLastVisibleTaskId = INVALID_TASK_ID;
// TODO(b/204308910): Extracts SplitDecorManager related code to common package.
private SplitDecorManager mSplitDecorManager;
@@ -122,6 +123,13 @@ class StageTaskListener implements ShellTaskOrganizer.TaskListener {
return contains(t -> t.token.asBinder() == binder);
}
/**
* Returns the last visible task's id.
*/
int getLastVisibleTaskId() {
return mLastVisibleTaskId;
}
/**
* Returns the top visible child task's id.
*/
@@ -221,6 +229,9 @@ class StageTaskListener implements ShellTaskOrganizer.TaskListener {
return;
}
mChildrenTaskInfo.put(taskInfo.taskId, taskInfo);
if (taskInfo.isVisible && taskInfo.taskId != mLastVisibleTaskId) {
mLastVisibleTaskId = taskInfo.taskId;
}
mCallbacks.onChildTaskStatusChanged(taskInfo.taskId, true /* present */,
taskInfo.isVisible);
if (!ENABLE_SHELL_TRANSITIONS) {
@@ -253,6 +264,9 @@ class StageTaskListener implements ShellTaskOrganizer.TaskListener {
} else if (mChildrenTaskInfo.contains(taskId)) {
mChildrenTaskInfo.remove(taskId);
mChildrenLeashes.remove(taskId);
if (taskId == mLastVisibleTaskId) {
mLastVisibleTaskId = INVALID_TASK_ID;
}
mCallbacks.onChildTaskStatusChanged(taskId, false /* present */, taskInfo.isVisible);
if (ENABLE_SHELL_TRANSITIONS) {
// Status is managed/synchronized by the transition lifecycle.