diff options
3 files changed, 29 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java index 76403c24e652..a2979e6ec286 100644 --- a/services/core/java/com/android/server/wm/RootWindowContainer.java +++ b/services/core/java/com/android/server/wm/RootWindowContainer.java @@ -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() { diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index d06e87511f77..cc72dcfb0be2 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -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> { } @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); if (t != null) return t; diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java index 3f8d7b5710aa..5d7ec127da46 100644 --- a/services/core/java/com/android/server/wm/WindowContainer.java +++ b/services/core/java/com/android/server/wm/WindowContainer.java @@ -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. * |