diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 497eb914174f1..2c67e0c6f60d0 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -3071,6 +3071,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 ae90a7d00fa9b..a32f4904b2296 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; /** @@ -2130,6 +2131,10 @@ final class TaskDisplayArea extends DisplayArea { && mDisplayContent.getOrientationRequestingTaskDisplayArea() == this; } + void clearPreferredTopFocusableRootTask() { + mPreferredTopFocusableRootTask = null; + } + @Override boolean isTaskDisplayArea() { return true;