From 53454a1c84815141734413b7d0e452b055ea5d28 Mon Sep 17 00:00:00 2001 From: Phil Weaver Date: Fri, 9 Mar 2018 16:00:24 -0800 Subject: [PATCH] Don't let non-touchable windows retain a11y focus Accessibility services can't see non-touchable windows, so those windows should not be allowed to have accessibility focus. Bug: 70986605 Test: Manually went through bug steps, verified that double-tapping on the screen has no effect. Change-Id: I7be72331c5704f7aa99714a01bbb2e336eea15e1 --- .../accessibility/AccessibilityManagerService.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index b0b95868600fa..ecd47e8dd39e7 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -3129,6 +3129,11 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub boolean activeWindowGone = true; final int windowCount = windows.size(); + + // We'll clear accessibility focus if the window with focus is no longer visible to + // accessibility services + boolean shouldClearAccessibilityFocus = + mAccessibilityFocusedWindowId != INVALID_WINDOW_ID; if (windowCount > 0) { for (int i = 0; i < windowCount; i++) { WindowInfo windowInfo = windows.get(i); @@ -3166,6 +3171,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub } if (window.getId() == mAccessibilityFocusedWindowId) { window.setAccessibilityFocused(true); + shouldClearAccessibilityFocus = false; } } } @@ -3176,6 +3182,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub for (int i = oldWindowCount - 1; i >= 0; i--) { oldWindowList.remove(i).recycle(); } + + if (shouldClearAccessibilityFocus) { + clearAccessibilityFocus(mAccessibilityFocusedWindowId); + } } private void sendEventsForChangedWindowsLocked(List oldWindows,