Merge "Check if task was top of stack before it's removed" into nyc-dev
This commit is contained in:
@@ -3764,7 +3764,8 @@ final class ActivityStack {
|
|||||||
r.finishLaunchTickingLocked();
|
r.finishLaunchTickingLocked();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void removeActivityFromHistoryLocked(ActivityRecord r, String reason) {
|
private void removeActivityFromHistoryLocked(
|
||||||
|
ActivityRecord r, TaskRecord oldTop, String reason) {
|
||||||
mStackSupervisor.removeChildActivityContainers(r);
|
mStackSupervisor.removeChildActivityContainers(r);
|
||||||
finishActivityResultsLocked(r, Activity.RESULT_CANCELED, null);
|
finishActivityResultsLocked(r, Activity.RESULT_CANCELED, null);
|
||||||
r.makeFinishingLocked();
|
r.makeFinishingLocked();
|
||||||
@@ -3783,10 +3784,11 @@ final class ActivityStack {
|
|||||||
validateAppTokensLocked();
|
validateAppTokensLocked();
|
||||||
}
|
}
|
||||||
final TaskRecord task = r.task;
|
final TaskRecord task = r.task;
|
||||||
|
final TaskRecord topTask = oldTop != null ? oldTop : topTask();
|
||||||
if (task != null && task.removeActivity(r)) {
|
if (task != null && task.removeActivity(r)) {
|
||||||
if (DEBUG_STACK) Slog.i(TAG_STACK,
|
if (DEBUG_STACK) Slog.i(TAG_STACK,
|
||||||
"removeActivityFromHistoryLocked: last activity removed from " + this);
|
"removeActivityFromHistoryLocked: last activity removed from " + this);
|
||||||
if (mStackSupervisor.isFocusedStack(this) && task == topTask() &&
|
if (mStackSupervisor.isFocusedStack(this) && task == topTask &&
|
||||||
task.isOverHomeStack()) {
|
task.isOverHomeStack()) {
|
||||||
mStackSupervisor.moveHomeStackTaskToTop(task.getTaskToReturnTo(), reason);
|
mStackSupervisor.moveHomeStackTaskToTop(task.getTaskToReturnTo(), reason);
|
||||||
}
|
}
|
||||||
@@ -3922,6 +3924,12 @@ final class ActivityStack {
|
|||||||
|
|
||||||
boolean removedFromHistory = false;
|
boolean removedFromHistory = false;
|
||||||
|
|
||||||
|
// If the activity is finishing, it's no longer considered in topRunningActivityLocked,
|
||||||
|
// and cleanUpActivityLocked() may change focus to another activity (or task).
|
||||||
|
// Get the current top task now, as removeActivityFromHistoryLocked() below need this
|
||||||
|
// to decide whether to return to home stack after removal.
|
||||||
|
final TaskRecord topTask = topTask();
|
||||||
|
|
||||||
cleanUpActivityLocked(r, false, false);
|
cleanUpActivityLocked(r, false, false);
|
||||||
|
|
||||||
final boolean hadApp = r.app != null;
|
final boolean hadApp = r.app != null;
|
||||||
@@ -3956,7 +3964,8 @@ final class ActivityStack {
|
|||||||
// up.
|
// up.
|
||||||
//Slog.w(TAG, "Exception thrown during finish", e);
|
//Slog.w(TAG, "Exception thrown during finish", e);
|
||||||
if (r.finishing) {
|
if (r.finishing) {
|
||||||
removeActivityFromHistoryLocked(r, reason + " exceptionInScheduleDestroy");
|
removeActivityFromHistoryLocked(
|
||||||
|
r, topTask, reason + " exceptionInScheduleDestroy");
|
||||||
removedFromHistory = true;
|
removedFromHistory = true;
|
||||||
skipDestroy = true;
|
skipDestroy = true;
|
||||||
}
|
}
|
||||||
@@ -3987,7 +3996,7 @@ final class ActivityStack {
|
|||||||
} else {
|
} else {
|
||||||
// remove this record from the history.
|
// remove this record from the history.
|
||||||
if (r.finishing) {
|
if (r.finishing) {
|
||||||
removeActivityFromHistoryLocked(r, reason + " hadNoApp");
|
removeActivityFromHistoryLocked(r, topTask, reason + " hadNoApp");
|
||||||
removedFromHistory = true;
|
removedFromHistory = true;
|
||||||
} else {
|
} else {
|
||||||
if (DEBUG_STATES) Slog.v(TAG_STATES, "Moving to DESTROYED: " + r + " (no app)");
|
if (DEBUG_STATES) Slog.v(TAG_STATES, "Moving to DESTROYED: " + r + " (no app)");
|
||||||
@@ -4018,7 +4027,7 @@ final class ActivityStack {
|
|||||||
if (isInStackLocked(r) != null) {
|
if (isInStackLocked(r) != null) {
|
||||||
if (r.state == ActivityState.DESTROYING) {
|
if (r.state == ActivityState.DESTROYING) {
|
||||||
cleanUpActivityLocked(r, true, false);
|
cleanUpActivityLocked(r, true, false);
|
||||||
removeActivityFromHistoryLocked(r, reason);
|
removeActivityFromHistoryLocked(r, null, reason);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mStackSupervisor.resumeFocusedStackTopActivityLocked();
|
mStackSupervisor.resumeFocusedStackTopActivityLocked();
|
||||||
@@ -4176,7 +4185,7 @@ final class ActivityStack {
|
|||||||
}
|
}
|
||||||
cleanUpActivityLocked(r, true, true);
|
cleanUpActivityLocked(r, true, true);
|
||||||
if (remove) {
|
if (remove) {
|
||||||
removeActivityFromHistoryLocked(r, "appDied");
|
removeActivityFromHistoryLocked(r, null, "appDied");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user