From 91e5c886c88cc8c55ba452f692e8117627a3f822 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Fri, 21 Apr 2017 14:44:38 -0700 Subject: [PATCH] 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 --- .../com/android/server/am/ActivityStack.java | 5 +++++ .../server/am/ActivityStackSupervisor.java | 20 +++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index 824ec68a86605..c3f346b09443b 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -23,6 +23,7 @@ import static android.app.ActivityManager.StackId.FULLSCREEN_WORKSPACE_STACK_ID; import static android.app.ActivityManager.StackId.HOME_STACK_ID; import static android.app.ActivityManager.StackId.INVALID_STACK_ID; import static android.app.ActivityManager.StackId.PINNED_STACK_ID; +import static android.app.ActivityManager.StackId.RECENTS_STACK_ID; import static android.content.pm.ActivityInfo.CONFIG_SCREEN_LAYOUT; import static android.content.pm.ActivityInfo.FLAG_RESUME_WHILE_PAUSING; import static android.content.pm.ActivityInfo.FLAG_SHOW_FOR_ALL_USERS; @@ -800,6 +801,10 @@ class ActivityStack extends ConfigurationContai return mStackId == HOME_STACK_ID; } + final boolean isRecentsStack() { + return mStackId == RECENTS_STACK_ID; + } + final boolean isHomeOrRecentsStack() { return StackId.isHomeOrRecentsStack(mStackId); } diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index 6010befc11710..fb8c161ea35db 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 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D final ArrayList 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 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D 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) {