Merge "[ActivityManager] Set appropriate relation of task to home"
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user