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");