diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index be01173415a57..5c3c071fc9f8d 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -3080,6 +3080,11 @@ class Task extends WindowContainer { focusableTask = mRootWindowContainer.getNextFocusableRootTask(this, !allowFocusSelf); } if (focusableTask == null) { + final TaskDisplayArea taskDisplayArea = getDisplayArea(); + if (taskDisplayArea != null) { + // Clear the recorded task since there is no next focusable task. + taskDisplayArea.clearPreferredTopFocusableRootTask(); + } return null; } diff --git a/services/core/java/com/android/server/wm/TaskDisplayArea.java b/services/core/java/com/android/server/wm/TaskDisplayArea.java index 368e6dd610e8c..9cbb764aee810 100644 --- a/services/core/java/com/android/server/wm/TaskDisplayArea.java +++ b/services/core/java/com/android/server/wm/TaskDisplayArea.java @@ -143,6 +143,7 @@ final class TaskDisplayArea extends DisplayArea { * unable to resume target root task properly when there are other focusable always-on-top * root tasks. */ + @VisibleForTesting Task mPreferredTopFocusableRootTask; /** @@ -2128,6 +2129,10 @@ final class TaskDisplayArea extends DisplayArea { && mDisplayContent.getOrientationRequestingTaskDisplayArea() == this; } + void clearPreferredTopFocusableRootTask() { + mPreferredTopFocusableRootTask = null; + } + @Override protected boolean isTaskDisplayArea() { return true;