From 941c4e2fba6a4f78136eb7f7db1e513cf9e9cf7d Mon Sep 17 00:00:00 2001 From: sallyyuen Date: Wed, 21 Dec 2022 10:11:09 -0800 Subject: [PATCH] Check proxy status when determining whether to track windows Marking DisplayWindowsObserver as belonging to a proxy when the proxy is registered will not work since the observer may be removed immediately (the proxy service info may not be propagated yet, so a11y is off and tracking is stopped) Mark the observer when the a11y system decides to track windows. Test: manual check with sample app, atest AccessibilityDisplayProxy Bug: 263375218 Change-Id: I3042b0c77b341251c5590d9e9f2fb9677574d128 --- .../AccessibilityManagerService.java | 3 ++- .../AccessibilityWindowManager.java | 19 ++++--------------- .../server/accessibility/ProxyManager.java | 1 - .../AccessibilityWindowManagerTest.java | 2 +- 4 files changed, 7 insertions(+), 18 deletions(-) diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index 1183d6b96b02c..184348c762b55 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -2508,7 +2508,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub final Display display = displays.get(i); if (display != null) { if (observingWindows) { - mA11yWindowManager.startTrackingWindows(display.getDisplayId()); + mA11yWindowManager.startTrackingWindows(display.getDisplayId(), + mProxyManager.isProxyed(display.getDisplayId())); } else { mA11yWindowManager.stopTrackingWindows(display.getDisplayId()); } diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java index 8af5e111d8bf2..c050449e01d97 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java @@ -988,12 +988,15 @@ public class AccessibilityWindowManager { * * @param displayId The logical display id. */ - public void startTrackingWindows(int displayId) { + public void startTrackingWindows(int displayId, boolean proxyed) { synchronized (mLock) { DisplayWindowsObserver observer = mDisplayWindowsObservers.get(displayId); if (observer == null) { observer = new DisplayWindowsObserver(displayId); } + if (proxyed && !observer.mIsProxy) { + observer.mIsProxy = true; + } if (observer.isTrackingWindowsLocked()) { return; } @@ -1018,20 +1021,6 @@ public class AccessibilityWindowManager { } } - /** - * Starts tracking a display as belonging to a proxy. Creates the window observer if necessary. - * @param displayId - */ - public void startTrackingDisplayProxy(int displayId) { - startTrackingWindows(displayId); - synchronized (mLock) { - DisplayWindowsObserver observer = mDisplayWindowsObservers.get(displayId); - if (observer != null) { - observer.mIsProxy = true; - } - } - } - /** * Stops tracking a display as belonging to a proxy. * @param displayId diff --git a/services/accessibility/java/com/android/server/accessibility/ProxyManager.java b/services/accessibility/java/com/android/server/accessibility/ProxyManager.java index fcbdc4e19fe57..fed0932df2178 100644 --- a/services/accessibility/java/com/android/server/accessibility/ProxyManager.java +++ b/services/accessibility/java/com/android/server/accessibility/ProxyManager.java @@ -103,7 +103,6 @@ public class ProxyManager { }; client.asBinder().linkToDeath(deathRecipient, 0); - mA11yWindowManager.startTrackingDisplayProxy(displayId); // Notify apps that the service state has changed. // A11yManager#A11yServicesStateChangeListener synchronized (mLock) { diff --git a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityWindowManagerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityWindowManagerTest.java index e66a1d4ea679f..7b7e1e0c9affd 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityWindowManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityWindowManagerTest.java @@ -1019,7 +1019,7 @@ public class AccessibilityWindowManagerTest { windowInfosForDisplay.get(DEFAULT_FOCUSED_INDEX).focused = true; } // Turns on windows tracking, and update window info. - mA11yWindowManager.startTrackingWindows(displayId); + mA11yWindowManager.startTrackingWindows(displayId, false); // Puts window lists into array. mWindowInfos.put(displayId, windowInfosForDisplay); // Sets the default display is the top focused display and