diff --git a/services/core/java/com/android/server/wm/ResetTargetTaskHelper.java b/services/core/java/com/android/server/wm/ResetTargetTaskHelper.java index 2f61ca05ada5b..63346b9a3e5bc 100644 --- a/services/core/java/com/android/server/wm/ResetTargetTaskHelper.java +++ b/services/core/java/com/android/server/wm/ResetTargetTaskHelper.java @@ -67,7 +67,7 @@ class ResetTargetTaskHelper { final PooledConsumer c = PooledLambda.obtainConsumer( ResetTargetTaskHelper::processTask, this, PooledLambda.__(Task.class)); - targetTask.mWmService.mRoot.forAllTasks(c); + targetTask.mWmService.mRoot.forAllTasks(c, true /*traverseTopToBottom*/, mTargetStack); c.recycle(); processPendingReparentActivities(); diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 9c23ed36708e1..0aed691c36a60 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -3070,17 +3070,11 @@ class Task extends WindowContainer { return matchParentBounds(); } + @Override void forAllTasks(Consumer callback, boolean traverseTopToBottom, Task excludedTask) { - if (traverseTopToBottom) { - super.forAllTasks(callback, traverseTopToBottom); - if (excludedTask != this) { - callback.accept(this); - } - } else { - super.forAllTasks(callback, traverseTopToBottom); - if (excludedTask != this) { - callback.accept(this); - } + super.forAllTasks(callback, traverseTopToBottom, excludedTask); + if (excludedTask != this) { + callback.accept(this); } } diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java index 504aa2dc7b4c7..0bb4e03e2cb01 100644 --- a/services/core/java/com/android/server/wm/WindowContainer.java +++ b/services/core/java/com/android/server/wm/WindowContainer.java @@ -1425,6 +1425,19 @@ class WindowContainer extends ConfigurationContainer< } } + void forAllTasks(Consumer callback, boolean traverseTopToBottom, Task excludedTask) { + final int count = mChildren.size(); + if (traverseTopToBottom) { + for (int i = count - 1; i >= 0; --i) { + mChildren.get(i).forAllTasks(callback, traverseTopToBottom, excludedTask); + } + } else { + for (int i = 0; i < count; i++) { + mChildren.get(i).forAllTasks(callback, traverseTopToBottom, excludedTask); + } + } + } + Task getTaskAbove(Task t) { return getTask( (above) -> true, t, false /*includeBoundary*/, false /*traverseTopToBottom*/);