am 477897ad: Merge "Fix incorrect setting of TaskRecord.frontOfTask. DO NOT MERGE." into klp-dev

* commit '477897ad7b0725fa68d32a94bf8c24264068fd5c':
  Fix incorrect setting of TaskRecord.frontOfTask.  DO NOT MERGE.
This commit is contained in:
Craig Mautner
2014-03-14 22:36:15 +00:00
committed by Android Git Automerger
2 changed files with 23 additions and 21 deletions

View File

@@ -1288,17 +1288,7 @@ final class ActivityStack {
if (prevTask != null && prevTask.mOnTopOfHome && prev.finishing && prev.frontOfTask) {
if (DEBUG_STACK) mStackSupervisor.validateTopActivitiesLocked();
if (prevTask == nextTask) {
ArrayList<ActivityRecord> activities = prevTask.mActivities;
final int numActivities = activities.size();
for (int activityNdx = 0; activityNdx < numActivities; ++activityNdx) {
final ActivityRecord r = activities.get(activityNdx);
// r is usually the same as next, but what if two activities were launched
// before prev finished?
if (!r.finishing) {
r.frontOfTask = true;
break;
}
}
prevTask.setFrontOfTask();
} else if (prevTask != topTask()) {
// This task is going away but it was supposed to return to the home task.
// Now the task above it has to return to the home task instead.
@@ -1750,9 +1740,9 @@ final class ActivityStack {
if (DEBUG_ADD_REMOVE) Slog.i(TAG, "Adding activity " + r + " to stack to task " + task,
new RuntimeException("here").fillInStackTrace());
task.addActivityToTop(r);
task.setFrontOfTask();
r.putInHistory();
r.frontOfTask = newTask;
if (!isHomeStack() || numActivities() > 0) {
// We want to show the starting preview window if we are
// switching to a new task, or the next activity's process is
@@ -2413,15 +2403,12 @@ final class ActivityStack {
final ArrayList<ActivityRecord> activities = r.task.mActivities;
final int index = activities.indexOf(r);
if (index < (activities.size() - 1)) {
ActivityRecord next = activities.get(index+1);
if (r.frontOfTask) {
// The next activity is now the front of the task.
next.frontOfTask = true;
}
r.task.setFrontOfTask();
if ((r.intent.getFlags()&Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET) != 0) {
// If the caller asked that this activity (and all above it)
// be cleared when the task is reset, don't lose that information,
// but propagate it up to the next activity.
ActivityRecord next = activities.get(index+1);
next.intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
}
}

View File

@@ -159,18 +159,33 @@ final class TaskRecord extends ThumbnailHolder {
return null;
}
/** Call after activity movement or finish to make sure that frontOfTask is set correctly */
final void setFrontOfTask() {
boolean foundFront = false;
final int numActivities = mActivities.size();
for (int activityNdx = 0; numActivities < activityNdx; ++activityNdx) {
final ActivityRecord r = mActivities.get(activityNdx);
if (foundFront || r.finishing) {
r.frontOfTask = false;
} else {
r.frontOfTask = true;
// Set frontOfTask false for every following activity.
foundFront = true;
}
}
}
/**
* Reorder the history stack so that the activity at the given index is
* brought to the front.
* Reorder the history stack so that the passed activity is brought to the front.
*/
final void moveActivityToFrontLocked(ActivityRecord newTop) {
if (DEBUG_ADD_REMOVE) Slog.i(TAG, "Removing and adding activity " + newTop
+ " to stack at top", new RuntimeException("here").fillInStackTrace());
getTopActivity().frontOfTask = false;
mActivities.remove(newTop);
mActivities.add(newTop);
newTop.frontOfTask = true;
setFrontOfTask();
}
void addActivityAtBottom(ActivityRecord r) {