diff options
3 files changed, 30 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index 9925ba0e5dfe..79448cae7bc1 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -650,6 +650,13 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai return topRunningActivityLocked(false /* focusableOnly */); } + void getAllRunningVisibleActivitiesLocked(ArrayList<ActivityRecord> outActivities) { + outActivities.clear(); + for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { + mTaskHistory.get(taskNdx).getAllRunningVisibleActivitiesLocked(outActivities); + } + } + private ActivityRecord topRunningActivityLocked(boolean focusableOnly) { for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { ActivityRecord r = mTaskHistory.get(taskNdx).topRunningActivityLocked(); diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index 5f42cdba39e0..e8bc68f21981 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -441,6 +441,8 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D final ActivityMetricsLogger mActivityMetricsLogger; + private final ArrayList<ActivityRecord> mTmpActivityList = new ArrayList<>(); + @Override protected int getChildCount() { return mActivityDisplays.size(); @@ -954,17 +956,21 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D if (!isFocusedStack(stack)) { continue; } - ActivityRecord hr = stack.topRunningActivityLocked(); - if (hr != null) { - if (hr.app == null && app.uid == hr.info.applicationInfo.uid - && processName.equals(hr.processName)) { + stack.getAllRunningVisibleActivitiesLocked(mTmpActivityList); + final ActivityRecord top = stack.topRunningActivityLocked(); + final int size = mTmpActivityList.size(); + for (int i = 0; i < size; i++) { + final ActivityRecord activity = mTmpActivityList.get(i); + if (activity.app == null && app.uid == activity.info.applicationInfo.uid + && processName.equals(activity.processName)) { try { - if (realStartActivityLocked(hr, app, true, true)) { + if (realStartActivityLocked(activity, app, + top == activity /* andResume */, true /* checkConfig */)) { didSomething = true; } } catch (RemoteException e) { Slog.w(TAG, "Exception in new application when starting activity " - + hr.intent.getComponent().flattenToShortString(), e); + + top.intent.getComponent().flattenToShortString(), e); throw e; } } diff --git a/services/core/java/com/android/server/am/TaskRecord.java b/services/core/java/com/android/server/am/TaskRecord.java index 5753fbc5a92d..be0a1d9b3c45 100644 --- a/services/core/java/com/android/server/am/TaskRecord.java +++ b/services/core/java/com/android/server/am/TaskRecord.java @@ -1159,6 +1159,17 @@ final class TaskRecord extends ConfigurationContainer implements TaskWindowConta return null; } + void getAllRunningVisibleActivitiesLocked(ArrayList<ActivityRecord> outActivities) { + if (mStack != null) { + for (int activityNdx = mActivities.size() - 1; activityNdx >= 0; --activityNdx) { + ActivityRecord r = mActivities.get(activityNdx); + if (!r.finishing && r.okToShowLocked() && r.visible) { + outActivities.add(r); + } + } + } + } + ActivityRecord topRunningActivityWithStartingWindowLocked() { if (mStack != null) { for (int activityNdx = mActivities.size() - 1; activityNdx >= 0; --activityNdx) { |