Track recents like home for times when it is separated

when using 3p launchers, recents is a separate stack. As
such we need to make sure that the recents root is provided
when asked for just like home is.

Bug: 158851728
Test: Using 3p launcher in split-secondary, open recents
Change-Id: I90dc6e75a718aa142c870b87bd93081e259acdea
This commit is contained in:
Evan Rosky
2020-06-12 14:58:41 -07:00
parent 0b2bb19db4
commit 910089a8ab

View File

@@ -17,6 +17,7 @@
package com.android.server.wm;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
@@ -99,6 +100,9 @@ final class TaskDisplayArea extends DisplayArea<ActivityStack> {
private ActivityStack mRootPinnedTask;
private ActivityStack mRootSplitScreenPrimaryTask;
// TODO(b/159029784): Remove when getStack() behavior is cleaned-up
private ActivityStack mRootRecentsTask;
private final ArrayList<ActivityStack> mTmpAlwaysOnTopStacks = new ArrayList<>();
private final ArrayList<ActivityStack> mTmpNormalStacks = new ArrayList<>();
private final ArrayList<ActivityStack> mTmpHomeStacks = new ArrayList<>();
@@ -163,6 +167,8 @@ final class TaskDisplayArea extends DisplayArea<ActivityStack> {
ActivityStack getStack(int windowingMode, int activityType) {
if (activityType == ACTIVITY_TYPE_HOME) {
return mRootHomeTask;
} else if (activityType == ACTIVITY_TYPE_RECENTS) {
return mRootRecentsTask;
}
if (windowingMode == WINDOWING_MODE_PINNED) {
return mRootPinnedTask;
@@ -199,6 +205,10 @@ final class TaskDisplayArea extends DisplayArea<ActivityStack> {
return mRootHomeTask;
}
@Nullable ActivityStack getRootRecentsTask() {
return mRootRecentsTask;
}
ActivityStack getRootPinnedTask() {
return mRootPinnedTask;
}
@@ -237,6 +247,16 @@ final class TaskDisplayArea extends DisplayArea<ActivityStack> {
} else {
mRootHomeTask = stack;
}
} else if (stack.isActivityTypeRecents()) {
if (mRootRecentsTask != null) {
if (!stack.isDescendantOf(mRootRecentsTask)) {
throw new IllegalArgumentException("addStackReferenceIfNeeded: recents stack="
+ mRootRecentsTask + " already exist on display=" + this
+ " stack=" + stack);
}
} else {
mRootRecentsTask = stack;
}
}
if (!stack.isRootTask()) {
@@ -264,6 +284,8 @@ final class TaskDisplayArea extends DisplayArea<ActivityStack> {
void removeStackReferenceIfNeeded(ActivityStack stack) {
if (stack == mRootHomeTask) {
mRootHomeTask = null;
} else if (stack == mRootRecentsTask) {
mRootRecentsTask = null;
} else if (stack == mRootPinnedTask) {
mRootPinnedTask = null;
} else if (stack == mRootSplitScreenPrimaryTask) {