Reset top focused root task when task hidden

The focused app was not updated when bubble minimized and causing
ANR.

Bug: 179676966
Test: expand and minimize bubbles
Change-Id: If04de21b954d074b045e76d7d23e02dade60cdbe
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index d360916..d60b6e0 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -5373,11 +5373,11 @@
         }
         final boolean wasHidden = isForceHidden();
         mForceHiddenFlags = newFlags;
-        if (wasHidden && isFocusableAndVisible()) {
+        if (wasHidden != isForceHidden() && isTopActivityFocusable()) {
             // The change in force-hidden state will change visibility without triggering a root
             // task order change, so we should reset the preferred top focusable root task to ensure
             // it's not used if a new activity is started from this task.
-            getDisplayArea().resetPreferredTopFocusableRootTaskIfBelow(this);
+            getDisplayArea().resetPreferredTopFocusableRootTaskIfNeeded(this);
         }
         return true;
     }
diff --git a/services/core/java/com/android/server/wm/TaskDisplayArea.java b/services/core/java/com/android/server/wm/TaskDisplayArea.java
index 40248c4..badd7fd 100644
--- a/services/core/java/com/android/server/wm/TaskDisplayArea.java
+++ b/services/core/java/com/android/server/wm/TaskDisplayArea.java
@@ -974,9 +974,10 @@
         onRootTaskOrderChanged(rootTask);
     }
 
-    void resetPreferredTopFocusableRootTaskIfBelow(Task task) {
+    /** Reset the mPreferredTopFocusableRootTask if it is or below the given task. */
+    void resetPreferredTopFocusableRootTaskIfNeeded(Task task) {
         if (mPreferredTopFocusableRootTask != null
-                && mPreferredTopFocusableRootTask.compareTo(task) < 0) {
+                && mPreferredTopFocusableRootTask.compareTo(task) <= 0) {
             mPreferredTopFocusableRootTask = null;
         }
     }