summaryrefslogtreecommitdiff
path: root/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityEmbeddedHierarchyTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityEmbeddedHierarchyTest.java')
-rw-r--r--tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityEmbeddedHierarchyTest.java65
1 files changed, 47 insertions, 18 deletions
diff --git a/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityEmbeddedHierarchyTest.java b/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityEmbeddedHierarchyTest.java
index ba7a0ddc6ab..999b392627e 100644
--- a/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityEmbeddedHierarchyTest.java
+++ b/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityEmbeddedHierarchyTest.java
@@ -25,6 +25,7 @@ import static com.google.common.truth.Truth.assertWithMessage;
import android.accessibility.cts.common.AccessibilityDumpOnFailureRule;
import android.accessibilityservice.AccessibilityServiceInfo;
import android.accessibilityservice.cts.activities.AccessibilityTestActivity;
+import android.accessibilityservice.cts.utils.DisplayUtils;
import android.app.Instrumentation;
import android.app.UiAutomation;
import android.graphics.Point;
@@ -34,13 +35,13 @@ import android.os.Bundle;
import android.platform.test.annotations.Presubmit;
import android.server.wm.CtsWindowInfoUtils;
import android.util.DisplayMetrics;
+import android.util.Log;
import android.view.Display;
import android.view.SurfaceControlViewHost;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.accessibility.AccessibilityNodeInfo;
-import android.view.accessibility.AccessibilityWindowInfo;
import androidx.test.InstrumentationRegistry;
import androidx.test.rule.ActivityTestRule;
@@ -56,6 +57,7 @@ import org.junit.Test;
import org.junit.rules.RuleChain;
import org.junit.runner.RunWith;
+import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
@@ -157,6 +159,8 @@ public class AccessibilityEmbeddedHierarchyTest {
final Rect hostViewBoundsInScreen = new Rect();
final Rect embeddedViewBoundsInScreen = new Rect();
+ parent.refresh();
+ target.refresh();
parent.getBoundsInScreen(hostViewBoundsInScreen);
target.getBoundsInScreen(embeddedViewBoundsInScreen);
@@ -164,35 +168,38 @@ public class AccessibilityEmbeddedHierarchyTest {
"hostViewBoundsInScreen" + hostViewBoundsInScreen.toShortString()
+ " doesn't contain embeddedViewBoundsInScreen"
+ embeddedViewBoundsInScreen.toShortString()).that(
- hostViewBoundsInScreen.contains(embeddedViewBoundsInScreen)).isTrue();
+ DisplayUtils.fuzzyBoundsInScreenContains(
+ hostViewBoundsInScreen, embeddedViewBoundsInScreen)).isTrue();
}
@Test
public void testEmbeddedViewHasCorrectBoundAfterHostViewMove() throws TimeoutException {
final AccessibilityNodeInfo target =
findEmbeddedAccessibilityNodeInfo(sUiAutomation.getRootInActiveWindow());
+ final AccessibilityNodeInfo parent = target.getParent();
final Rect hostViewBoundsInScreen = new Rect();
final Rect newEmbeddedViewBoundsInScreen = new Rect();
final Rect oldEmbeddedViewBoundsInScreen = new Rect();
+ target.refresh();
target.getBoundsInScreen(oldEmbeddedViewBoundsInScreen);
// Move the host's SurfaceView away from (0,0).
int moveAmountPx = mActivity.getResources().getDimensionPixelSize(
R.dimen.embedded_hierarchy_embedded_layout_movement_size);
- mActivity.moveSurfaceViewLayoutPosition(moveAmountPx, moveAmountPx);
+ mActivity.moveSurfaceViewLayoutPosition(moveAmountPx, moveAmountPx, false);
+ parent.refresh();
target.refresh();
- final AccessibilityNodeInfo parent = target.getParent();
-
- target.getBoundsInScreen(newEmbeddedViewBoundsInScreen);
parent.getBoundsInScreen(hostViewBoundsInScreen);
+ target.getBoundsInScreen(newEmbeddedViewBoundsInScreen);
assertWithMessage(
"hostViewBoundsInScreen" + hostViewBoundsInScreen.toShortString()
+ " doesn't contain newEmbeddedViewBoundsInScreen"
+ newEmbeddedViewBoundsInScreen.toShortString()).that(
- hostViewBoundsInScreen.contains(newEmbeddedViewBoundsInScreen)).isTrue();
+ DisplayUtils.fuzzyBoundsInScreenContains(hostViewBoundsInScreen,
+ newEmbeddedViewBoundsInScreen)).isTrue();
assertWithMessage(
"newEmbeddedViewBoundsInScreen" + newEmbeddedViewBoundsInScreen.toShortString()
+ " shouldn't be the same with oldEmbeddedViewBoundsInScreen"
@@ -209,7 +216,7 @@ public class AccessibilityEmbeddedHierarchyTest {
// Move Host SurfaceView out of screen
final Point screenSize = getScreenSize();
- mActivity.moveSurfaceViewLayoutPosition(screenSize.x, screenSize.y);
+ mActivity.moveSurfaceViewLayoutPosition(screenSize.x * 2, screenSize.y * 2, true);
target.refresh();
assertWithMessage("Embedded view should be invisible after moving out of screen.").that(
@@ -233,6 +240,13 @@ public class AccessibilityEmbeddedHierarchyTest {
return null;
}
+ private static AccessibilityNodeInfo findHostAccessibilityNodeInfo(
+ AccessibilityNodeInfo root) {
+ List<AccessibilityNodeInfo> nodes =
+ root.findAccessibilityNodeInfosByViewId(HOST_PARENT_RESOURCE_NAME);
+ return nodes.isEmpty() ? null : nodes.get(0);
+ }
+
private Point getScreenSize() {
final DisplayManager dm = sInstrumentation.getContext().getSystemService(
DisplayManager.class);
@@ -288,7 +302,7 @@ public class AccessibilityEmbeddedHierarchyTest {
// No-op
}
- public void waitForEmbeddedHierarchy() {
+ private void waitForEmbeddedHierarchy() {
try {
assertWithMessage("timed out waiting for embedded hierarchy to init.").that(
mCountDownLatch.await(3, TimeUnit.SECONDS)).isTrue();
@@ -297,19 +311,34 @@ public class AccessibilityEmbeddedHierarchyTest {
}
}
- public void moveSurfaceViewLayoutPosition(int x, int y) throws TimeoutException {
+ private void moveSurfaceViewLayoutPosition(int x, int y, boolean offScreen)
+ throws TimeoutException {
+ final AccessibilityNodeInfo surfaceViewNode = findHostAccessibilityNodeInfo(
+ sUiAutomation.getRootInActiveWindow());
+ final Rect expectedBounds = new Rect(), boundsAfter = new Rect();
+ surfaceViewNode.getBoundsInScreen(expectedBounds);
+ expectedBounds.offset(x, y);
sUiAutomation.executeAndWaitForEvent(
() -> sInstrumentation.runOnMainSync(() -> {
- mSurfaceView.setX(x);
- mSurfaceView.setY(y);
- mSurfaceView.requestLayout();
+ mSurfaceView.setTranslationX(x);
+ mSurfaceView.setTranslationY(y);
}),
(event) -> {
- final Rect boundsInScreen = new Rect();
- final AccessibilityWindowInfo window =
- sUiAutomation.getRootInActiveWindow().getWindow();
- window.getBoundsInScreen(boundsInScreen);
- return !boundsInScreen.isEmpty();
+ surfaceViewNode.refresh();
+ surfaceViewNode.getBoundsInScreen(boundsAfter);
+ final boolean hasExpectedPosition;
+ if (offScreen) {
+ hasExpectedPosition = !surfaceViewNode.isVisibleToUser();
+ } else {
+ hasExpectedPosition = DisplayUtils.fuzzyBoundsInScreenSameOrigin(
+ expectedBounds, boundsAfter);
+ }
+ if (!hasExpectedPosition) {
+ Log.i(AccessibilityEmbeddedHierarchyTest.class.getSimpleName(),
+ "mSurfaceView expected bounds: " + expectedBounds
+ + "\tActual bounds: " + boundsAfter);
+ }
+ return hasExpectedPosition;
}, DEFAULT_TIMEOUT_MS);
}
}