Hiding windows for suspended packages

Suspended packages get their activities intercepted at start, but they
can still show system_alert or toast_windows from other components.
These need to be hidden when the app goes into suspend and unhidden when
it is unsuspended.

Test: atest com.android.server.wm.WindowStateTests

Bug: 77498821
Change-Id: I9ac446f20feb23e2090ba306b4435c46b9aeec95
diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java
index 52d8177..fd965fb 100644
--- a/services/core/java/com/android/server/wm/RootWindowContainer.java
+++ b/services/core/java/com/android/server/wm/RootWindowContainer.java
@@ -417,6 +417,14 @@
         }, true /* traverseTopToBottom */);
     }
 
+    void updateHiddenWhileSuspendedState(final ArraySet<String> packages, final boolean suspended) {
+        forAllWindows((w) -> {
+            if (packages.contains(w.getOwningPackage())) {
+                w.setHiddenWhileSuspended(suspended);
+            }
+        }, false);
+    }
+
     void updateAppOpsState() {
         forAllWindows((w) -> {
             w.updateAppOpsState();