Merge "[ActivityManager] Set appropriate relation of task to home"

This commit is contained in:
Craig Mautner
2015-02-03 17:54:25 +00:00
committed by Gerrit Code Review

View File

@@ -1928,9 +1928,31 @@ final class ActivityStack {
return true;
}
private TaskRecord getNextTask(TaskRecord targetTask) {
final int index = mTaskHistory.indexOf(targetTask);
if (index >= 0) {
final int numTasks = mTaskHistory.size();
for (int i = index + 1; i < numTasks; ++i) {
TaskRecord task = mTaskHistory.get(i);
if (task.userId == targetTask.userId) {
return task;
}
}
}
return null;
}
private void insertTaskAtTop(TaskRecord task) {
// If the moving task is over home stack, transfer its return type to next task
if (task.isOverHomeStack()) {
final TaskRecord nextTask = getNextTask(task);
if (nextTask != null) {
nextTask.setTaskToReturnTo(task.getTaskToReturnTo());
}
}
// If this is being moved to the top by another activity or being launched from the home
// activity, set mOnTopOfHome accordingly.
// activity, set mTaskToReturnTo accordingly.
if (isOnHomeDisplay()) {
ActivityStack lastStack = mStackSupervisor.getLastStack();
final boolean fromHome = lastStack.isHomeStack();
@@ -3591,6 +3613,15 @@ final class ActivityStack {
if (DEBUG_TRANSITION) Slog.v(TAG,
"Prepare to back transition: task=" + taskId);
boolean prevIsHome = false;
if (tr.isOverHomeStack()) {
final TaskRecord nextTask = getNextTask(tr);
if (nextTask != null) {
nextTask.setTaskToReturnTo(tr.getTaskToReturnTo());
} else {
prevIsHome = true;
}
}
mTaskHistory.remove(tr);
mTaskHistory.add(0, tr);
updateTaskMovement(tr, false);
@@ -3626,7 +3657,8 @@ final class ActivityStack {
}
final TaskRecord task = mResumedActivity != null ? mResumedActivity.task : null;
if (task == tr && tr.isOverHomeStack() || numTasks <= 1 && isOnHomeDisplay()) {
if (prevIsHome || task == tr && tr.isOverHomeStack()
|| numTasks <= 1 && isOnHomeDisplay()) {
if (!mService.mBooting && !mService.mBooted) {
// Not ready yet!
return false;