summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author lucychang <lucychang@google.com> 2020-10-07 12:34:19 +0800
committer Lucy Chang <lucychang@google.com> 2020-10-13 06:23:31 +0000
commit12e1ea6a42b837b918e8f643d04d79e69db07737 (patch)
treef56b7098e4f5db4c78b277302a94cf45e9f455aa
parent168d7918b807477084a84cb365d0d72d45cfdd9a (diff)
Using windowId from A11yWindowInfo instead
AccessibilityManagerService#getWindowBounds would return null if using the windowId comes from the embedded hierarchy, and EventDispatch#computeClickLocation will return CLICK_LOCATION_NONE and can't perform long-click action. The fix try to use AccessibilityWindowInfo's windowId to get correct window token to get window bounds. Bug: 161857059 Test: a11y CTS & unit tests Change-Id: I5a978177352e973f06a856826a43910a9b655b29
-rw-r--r--services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java13
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());
}
}