From 6c8a43b6858d5f958c110c2e956c30bb5954ca7b Mon Sep 17 00:00:00 2001 From: Rhed Jao Date: Mon, 25 Mar 2019 20:52:38 +0800 Subject: [PATCH] Update active window when a11y client is removed Bug: 119844696 Test: all a11y cts & framework tests Change-Id: I9d826db034d2a61d61304fce9dcfc9ef4d319058 --- .../AccessibilityManagerService.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index 47cd917bf84ee..904817e1763e0 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -777,6 +777,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub final int removedWindowId = removeAccessibilityInteractionConnectionInternalLocked( token, mGlobalWindowTokens, mGlobalInteractionConnections); if (removedWindowId >= 0) { + mSecurityPolicy.onAccessibilityClientRemovedLocked(removedWindowId); if (DEBUG) { Slog.i(LOG_TAG, "Removed global connection for pid:" + Binder.getCallingPid() + " with windowId: " + removedWindowId + " and token: " + window.asBinder()); @@ -790,6 +791,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub removeAccessibilityInteractionConnectionInternalLocked( token, userState.mWindowTokens, userState.mInteractionConnections); if (removedWindowIdForUser >= 0) { + mSecurityPolicy.onAccessibilityClientRemovedLocked(removedWindowIdForUser); if (DEBUG) { Slog.i(LOG_TAG, "Removed user connection for pid:" + Binder.getCallingPid() + " with windowId: " + removedWindowIdForUser + " and userId:" @@ -1332,6 +1334,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub userState.mWindowTokens.remove(windowId); userState.mInteractionConnections.remove(windowId); } + mSecurityPolicy.onAccessibilityClientRemovedLocked(windowId); if (DEBUG) { Slog.i(LOG_TAG, "Removing interaction connection to windowId: " + windowId); } @@ -3266,6 +3269,18 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub mWindows = null; } + /** + * A callback when accessibility interaction client is removed. + */ + public void onAccessibilityClientRemovedLocked(int windowId) { + // Active window cannot update immediately, if windows callback is unregistered. + // Update active window to invalid, when its a11y interaction client is removed. + if (mWindowsForAccessibilityCallback == null && windowId >= 0 + && mActiveWindowId == windowId) { + mActiveWindowId = INVALID_WINDOW_ID; + } + } + public void updateWindowsLocked(List windows) { if (mWindows == null) { mWindows = new ArrayList<>();