Verify that a11y overlays are marked trusted.

Bug: 271488755
Test: atest AccessibilityOverlayTest
Change-Id: I0ae8994b6c1449a97d7eee1b77304770b1dc0433
(cherry picked from commit e4cb3624778d37e53740480aebead335e9d0cc0b)
diff --git a/tests/accessibilityservice/Android.bp b/tests/accessibilityservice/Android.bp
index f77cc63..6e67857 100644
--- a/tests/accessibilityservice/Android.bp
+++ b/tests/accessibilityservice/Android.bp
@@ -21,6 +21,7 @@
     defaults: ["cts_defaults"],
     static_libs: [
         "ctstestrunner-axt",
+        "cts-wm-util",
         "hamcrest-library",
         "mockito-target-minus-junit4",
         "compatibility-device-util-axt",
diff --git a/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityOverlayTest.java b/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityOverlayTest.java
index d74af47..6e143c4 100644
--- a/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityOverlayTest.java
+++ b/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityOverlayTest.java
@@ -19,6 +19,7 @@
 import static android.accessibilityservice.cts.utils.ActivityLaunchUtils.launchActivityOnSpecifiedDisplayAndWaitForItToBeOnscreen;
 
 import static com.google.common.truth.Truth.assertThat;
+import static com.google.common.truth.Truth.assertWithMessage;
 
 import static org.junit.Assert.assertThrows;
 import static org.junit.Assume.assumeTrue;
@@ -41,6 +42,8 @@
 import android.hardware.display.DisplayManager;
 import android.os.Binder;
 import android.platform.test.annotations.Presubmit;
+import android.server.wm.CtsWindowInfoUtils;
+import android.text.TextUtils;
 import android.util.SparseArray;
 import android.view.Display;
 import android.view.SurfaceControl;
@@ -50,6 +53,7 @@
 import android.view.accessibility.AccessibilityWindowInfo;
 import android.widget.Button;
 import android.widget.FrameLayout;
+import android.window.WindowInfosListenerForTest;
 
 import androidx.test.platform.app.InstrumentationRegistry;
 import androidx.test.runner.AndroidJUnit4;
@@ -65,7 +69,9 @@
 import org.junit.runner.RunWith;
 
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 import java.util.function.Function;
+import java.util.function.Predicate;
 
 // Test that an AccessibilityService can display an accessibility overlay
 @RunWith(AndroidJUnit4.class)
@@ -200,6 +206,7 @@
                 (event) ->
                         ActivityLaunchUtils.findWindowByTitle(sUiAutomation, overlayTitle) != null,
                 AsyncUtils.DEFAULT_TIMEOUT_MS);
+        checkTrustedOverlayExists(overlayTitle);
         // Remove the overlay.
         sUiAutomation.executeAndWaitForEvent(
                 () ->
@@ -306,6 +313,8 @@
                     },
                     AsyncUtils.DEFAULT_TIMEOUT_MS);
 
+            checkTrustedOverlayExists(overlayTitle);
+
             // Remove the overlay.
             sUiAutomation.executeAndWaitForEvent(
                     () ->
@@ -327,6 +336,22 @@
         }
     }
 
+    private void checkTrustedOverlayExists(String overlayTitle) throws Exception {
+        try {
+            sUiAutomation.adoptShellPermissionIdentity(
+                    android.Manifest.permission.ACCESS_SURFACE_FLINGER);
+            Predicate<List<WindowInfosListenerForTest.WindowInfo>> windowPredicate =
+                    windows -> windows.stream().anyMatch(
+                            window -> window.name.contains(overlayTitle)
+                                    && window.isTrustedOverlay);
+            assertWithMessage("Expected to find trusted overlay window").that(
+                    CtsWindowInfoUtils.waitForWindowInfos(windowPredicate,
+                            AsyncUtils.DEFAULT_TIMEOUT_MS, TimeUnit.MILLISECONDS)).isTrue();
+        } finally {
+            sUiAutomation.dropShellPermissionIdentity();
+        }
+    }
+
     private void addOverlayWindow(Context context, String overlayTitle) {
         final Button button = new Button(context);
         button.setText("Button");