Do not reuse non-leaf tasks for the starting activity
TV Settings activities were started in home stack because home stack was originally created from TV Settings FallbackHome activity. So, it was being reused for the Settings activities. Only looks for the reused task from leaf tasks and also not setting task affinity on non-leaf tasks. Bug: 154517501 Test: start Settings activities and not landing on home stack Change-Id: I07cb0e40248fd2a37f8e9cfe71d13651aed25207
This commit is contained in:
@@ -327,7 +327,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
|
||||
documentData = isDocument ? intent.getData() : null;
|
||||
|
||||
if (DEBUG_TASKS) Slog.d(TAG_TASKS, "Looking for task of " + target + " in " + parent);
|
||||
parent.forAllTasks(this);
|
||||
parent.forAllLeafTasks(this);
|
||||
}
|
||||
|
||||
void clear() {
|
||||
|
||||
@@ -942,7 +942,7 @@ class Task extends WindowContainer<WindowContainer> {
|
||||
return;
|
||||
}
|
||||
|
||||
affinity = info.taskAffinity;
|
||||
affinity = isLeafTask() ? info.taskAffinity : null;
|
||||
if (intent == null) {
|
||||
// If this task already has an intent associated with it, don't set the root
|
||||
// affinity -- we don't want it changing after initially set, but the initially
|
||||
@@ -3399,6 +3399,24 @@ class Task extends WindowContainer<WindowContainer> {
|
||||
return callback.apply(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean forAllLeafTasks(Function<Task, Boolean> callback) {
|
||||
boolean isLeafTask = true;
|
||||
for (int i = mChildren.size() - 1; i >= 0; --i) {
|
||||
final Task child = mChildren.get(i).asTask();
|
||||
if (child != null) {
|
||||
isLeafTask = false;
|
||||
if (child.forAllLeafTasks(callback)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isLeafTask) {
|
||||
return callback.apply(this);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
Task getTask(Predicate<Task> callback, boolean traverseTopToBottom) {
|
||||
final Task t = super.getTask(callback, traverseTopToBottom);
|
||||
|
||||
@@ -1552,6 +1552,15 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean forAllLeafTasks(Function<Task, Boolean> callback) {
|
||||
for (int i = mChildren.size() - 1; i >= 0; --i) {
|
||||
if (mChildren.get(i).forAllLeafTasks(callback)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* For all tasks at or below this container call the callback.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user