Fix check when finding tasks to reuse.
- Since we added a new assistant activity type, we need to update the check
for which stack to match the activity to.
Bug: 37526597
Test: android.server.cts.ActivityManagerAssistantStackTests
Test: #testLaunchIntoSameTask
Change-Id: I2d77ba8b026ee1ae692b026d20703fa56c061704
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
index 6010bef..fb8c161 100644
--- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
@@ -3025,8 +3025,9 @@
final ArrayList<ActivityStack> stacks = mActivityDisplays.valueAt(displayNdx).mStacks;
for (int stackNdx = stacks.size() - 1; stackNdx >= 0; --stackNdx) {
final ActivityStack stack = stacks.get(stackNdx);
- if (!r.isApplicationActivity() && !stack.isHomeOrRecentsStack()) {
- if (DEBUG_TASKS) Slog.d(TAG_TASKS, "Skipping stack: (home activity) " + stack);
+ if (!checkActivityBelongsInStack(r, stack)) {
+ if (DEBUG_TASKS) Slog.d(TAG_TASKS, "Skipping stack: (mismatch activity/stack) "
+ + stack);
continue;
}
if (!stack.mActivityContainer.isEligibleForNewTasks()) {
@@ -3053,6 +3054,21 @@
return affinityMatch;
}
+ /**
+ * Checks that for the given activity {@param r}, its activity type matches the {@param stack}
+ * type.
+ */
+ private boolean checkActivityBelongsInStack(ActivityRecord r, ActivityStack stack) {
+ if (r.isHomeActivity()) {
+ return stack.isHomeStack();
+ } else if (r.isRecentsActivity()) {
+ return stack.isRecentsStack();
+ } else if (r.isAssistantActivity()) {
+ return stack.isAssistantStack();
+ }
+ return true;
+ }
+
ActivityRecord findActivityLocked(Intent intent, ActivityInfo info,
boolean compareIntentFilters) {
for (int displayNdx = mActivityDisplays.size() - 1; displayNdx >= 0; --displayNdx) {