diff options
| -rw-r--r-- | services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index 9ddf7a4fb79b..d71b919818ea 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -941,10 +941,19 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub if (resolvedUserId != mCurrentUserId) { return null; } - if (mA11yWindowManager.findA11yWindowInfoByIdLocked(windowId) == null) { + final AccessibilityWindowInfo accessibilityWindowInfo = mA11yWindowManager + .findA11yWindowInfoByIdLocked(windowId); + if (accessibilityWindowInfo == null) { return null; } - return mA11yWindowManager.getWindowTokenForUserAndWindowIdLocked(userId, windowId); + // We use AccessibilityWindowInfo#getId instead of windowId. When the windowId comes + // from an embedded hierarchy, the system can't find correct window token because + // embedded hierarchy doesn't have windowInfo. Calling + // AccessibilityWindowManager#findA11yWindowInfoByIdLocked can look for its parent's + // windowInfo, so it is safer to use AccessibilityWindowInfo#getId + // to get window token to find real window. + return mA11yWindowManager.getWindowTokenForUserAndWindowIdLocked(userId, + accessibilityWindowInfo.getId()); } } |