Accessibility node provider getting invalid virtual view id.
If the virtual child id is not specified we should ask the node
provider to create a node info for the hosting view bu passing
the special host node id.
bug:17664111
Change-Id: I9c2d3195ad813eed7ea4108fe0d7ccb9cc32a1a0
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index b1d3d45..81fc966 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -6096,8 +6096,15 @@
if (source != null) {
AccessibilityNodeProvider provider = source.getAccessibilityNodeProvider();
if (provider != null) {
- AccessibilityNodeInfo node = provider.createAccessibilityNodeInfo(
- AccessibilityNodeInfo.getVirtualDescendantId(sourceNodeId));
+ final int virtualNodeId = AccessibilityNodeInfo.getVirtualDescendantId(
+ sourceNodeId);
+ final AccessibilityNodeInfo node;
+ if (virtualNodeId == AccessibilityNodeInfo.UNDEFINED_ITEM_ID) {
+ node = provider.createAccessibilityNodeInfo(
+ AccessibilityNodeProvider.HOST_VIEW_ID);
+ } else {
+ node = provider.createAccessibilityNodeInfo(virtualNodeId);
+ }
setAccessibilityFocus(source, node);
}
}
@@ -6135,8 +6142,14 @@
if (provider != null) {
final int virtualChildId = AccessibilityNodeInfo.getVirtualDescendantId(
mAccessibilityFocusedVirtualView.getSourceNodeId());
- mAccessibilityFocusedVirtualView = provider.createAccessibilityNodeInfo(
- virtualChildId);
+ if (virtualChildId == AccessibilityNodeInfo.UNDEFINED_ITEM_ID) {
+ mAccessibilityFocusedVirtualView = provider
+ .createAccessibilityNodeInfo(
+ AccessibilityNodeProvider.HOST_VIEW_ID);
+ } else {
+ mAccessibilityFocusedVirtualView = provider
+ .createAccessibilityNodeInfo(virtualChildId);
+ }
}
}
}