From f3f01c731f22382930a074a3e6db25a6b680fbb7 Mon Sep 17 00:00:00 2001 From: sallyyuen Date: Wed, 14 Dec 2022 08:24:20 -0800 Subject: [PATCH] Clear caches when an A11yDisplayProxy is registered. This removes any cached instances of the display and its windows that now belong to the proxy. Test: atestAccessibilityDisplayProxyTest Bug: 241429275 Change-Id: Ie81eb4cd99d3732eeb69f28d4987ce01e734fabf --- .../accessibility/AccessibilityManagerService.java | 6 ++++++ .../android/server/accessibility/ProxyManager.java | 11 +++++++++++ 2 files changed, 17 insertions(+) diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index b496ba1233a4a..6af76b8718ec5 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -1757,6 +1757,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub AccessibilityServiceConnection service = state.mBoundServices.get(i); service.notifyClearAccessibilityNodeInfoCache(); } + + mProxyManager.clearCacheLocked(); } private void notifyMagnificationChangedLocked(int displayId, @NonNull Region region, @@ -3700,6 +3702,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub mProxyManager.registerProxy(client, displayId, mContext, sIdCounter++, mMainHandler, mSecurityPolicy, this, getTraceManager(), mWindowManagerService, mA11yWindowManager); + + synchronized (mLock) { + notifyClearAccessibilityCacheLocked(); + } return true; } diff --git a/services/accessibility/java/com/android/server/accessibility/ProxyManager.java b/services/accessibility/java/com/android/server/accessibility/ProxyManager.java index 85273586e5dcb..fcbdc4e19fe57 100644 --- a/services/accessibility/java/com/android/server/accessibility/ProxyManager.java +++ b/services/accessibility/java/com/android/server/accessibility/ProxyManager.java @@ -235,4 +235,15 @@ public class ProxyManager { } } } + + /** + * Clears all proxy caches. + */ + public void clearCacheLocked() { + for (int i = 0; i < mProxyA11yServiceConnections.size(); i++) { + final ProxyAccessibilityServiceConnection proxy = + mProxyA11yServiceConnections.valueAt(i); + proxy.notifyClearAccessibilityNodeInfoCache(); + } + } } \ No newline at end of file