Merge "Fixes to handleAppDiedLocked." into klp-dev
diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java
index 4d66946..dd2f4c4 100644
--- a/services/java/com/android/server/am/ActivityStack.java
+++ b/services/java/com/android/server/am/ActivityStack.java
@@ -3438,23 +3438,22 @@
// Determine if the top task is exiting and should return to home. Do this before it gets
// removed in removeHistoryRecordsForAppsLocked.
boolean launchHomeNext = false;
- int top = mTaskHistory.size() - 1;
- while (top >= 0) {
- final TaskRecord topTask = mTaskHistory.get(top);
- if (topTask.mActivities.isEmpty()) {
- // Not possible, but just in case.
- --top;
+ TaskRecord topTask = mTaskHistory.get(mTaskHistory.size() - 1);
+ ArrayList<ActivityRecord> activities = topTask.mActivities;
+ int activityNdx;
+ for (activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) {
+ ActivityRecord r = activities.get(activityNdx);
+ if (r.finishing) {
continue;
}
- ActivityRecord r = topTask.topRunningActivityLocked(null);
- if (r != null) {
- // r will be launched next.
+ if (r.app != app) {
+ // This is the dying activity.
break;
}
- // There is an activity in topTask that is finishing. If topTask belongs to the app
- // return to home depending on the task flag.
+ }
+ if (activityNdx < 0) {
+ // All activities in task belong to app. Set launchHomeNext to task's value.
launchHomeNext = topTask.mOnTopOfHome;
- break;
}
removeHistoryRecordsForAppLocked(app);
diff --git a/services/java/com/android/server/am/ActivityStackSupervisor.java b/services/java/com/android/server/am/ActivityStackSupervisor.java
index f718706..2db67d5 100644
--- a/services/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/java/com/android/server/am/ActivityStackSupervisor.java
@@ -1932,7 +1932,7 @@
for (int stackNdx = 0; stackNdx < numStacks; ++stackNdx) {
final ActivityStack stack = mStacks.get(stackNdx);
// Only update launchHomeTaskNext for the focused stack.
- launchHomeTaskNext |= (stack == focusedStack && stack.handleAppDiedLocked(app));
+ launchHomeTaskNext |= (stack.handleAppDiedLocked(app) && stack == focusedStack);
}
if (!restarting) {