diff options
| author | 2024-03-21 01:43:11 +0000 | |
|---|---|---|
| committer | 2024-03-21 01:43:11 +0000 | |
| commit | 599d6368d1ba6ae7a257b8325fab12fad617a735 (patch) | |
| tree | b2f1ad7da0fd8f560bbfa2f85823c3c5fc3926fb | |
| parent | 261ad46b06c5fa6c51456a7105f61c2660831ca2 (diff) | |
| parent | b3aaef9ff5c004720f4f94da6137db6677106a01 (diff) | |
Merge "Use Region#op instead of #quickReject for intersection check" into main
2 files changed, 24 insertions, 1 deletions
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java index c570d65d8f57..d30748478741 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java @@ -79,6 +79,8 @@ public class AccessibilityWindowManager { private static int sNextWindowId; + private final Region mTmpRegion = new Region(); + private final Object mLock; private final Handler mHandler; private final WindowManagerInternal mWindowManagerInternal; @@ -613,7 +615,7 @@ public class AccessibilityWindowManager { } // If the window is completely covered by other windows - ignore. - if (unaccountedSpace.quickReject(regionInScreen)) { + if (!mTmpRegion.op(unaccountedSpace, regionInScreen, Region.Op.INTERSECT)) { return false; } diff --git a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityWindowManagerWithAccessibilityWindowTest.java b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityWindowManagerWithAccessibilityWindowTest.java index 6e8d6dc3c120..f44879fa54d9 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityWindowManagerWithAccessibilityWindowTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityWindowManagerWithAccessibilityWindowTest.java @@ -470,6 +470,27 @@ public class AccessibilityWindowManagerWithAccessibilityWindowTest { } @Test + public void onWindowsChanged_shouldNotReportfullyOccludedWindow() { + final AccessibilityWindow frontWindow = mWindows.get(Display.DEFAULT_DISPLAY).get(0); + setRegionForMockAccessibilityWindow(frontWindow, new Region(100, 100, 300, 300)); + final int frontWindowId = mA11yWindowManager.findWindowIdLocked( + USER_SYSTEM_ID, frontWindow.getWindowInfo().token); + + // index 1 is focused. Let's use the next one for this test. + final AccessibilityWindow occludedWindow = mWindows.get(Display.DEFAULT_DISPLAY).get(2); + setRegionForMockAccessibilityWindow(occludedWindow, new Region(150, 150, 250, 250)); + final int occludedWindowId = mA11yWindowManager.findWindowIdLocked( + USER_SYSTEM_ID, occludedWindow.getWindowInfo().token); + + onAccessibilityWindowsChanged(Display.DEFAULT_DISPLAY, SEND_ON_WINDOW_CHANGES); + + final List<AccessibilityWindowInfo> a11yWindows = + mA11yWindowManager.getWindowListLocked(Display.DEFAULT_DISPLAY); + assertThat(a11yWindows, hasItem(windowId(frontWindowId))); + assertThat(a11yWindows, not(hasItem(windowId(occludedWindowId)))); + } + + @Test public void onWindowsChangedAndForceSend_shouldUpdateWindows() { assertNotEquals("new title", toString(mA11yWindowManager.getWindowListLocked(Display.DEFAULT_DISPLAY) |