From 87ca32eb79e698acbff7fd2977a5f433a8caf711 Mon Sep 17 00:00:00 2001 From: Louis Chang Date: Thu, 14 May 2020 13:40:16 +0800 Subject: [PATCH] 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 --- .../server/wm/RootWindowContainer.java | 2 +- .../core/java/com/android/server/wm/Task.java | 20 ++++++++++++++++++- .../android/server/wm/WindowContainer.java | 9 +++++++++ 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 c93b7354999bd..2aa85c30166b9 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 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 b9e65137665aa..db419c1aae994 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 { 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 { return callback.apply(this); } + @Override + boolean forAllLeafTasks(Function 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 callback, boolean traverseTopToBottom) { final Task t = super.getTask(callback, traverseTopToBottom); diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java index 3f8d7b5710aad..5d7ec127da464 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 extends ConfigurationContainer< return false; } + boolean forAllLeafTasks(Function 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. *