diff options
author | Svetoslav <svetoslavganov@google.com> | 2014-09-26 15:20:40 -0700 |
---|---|---|
committer | Svetoslav <svetoslavganov@google.com> | 2014-09-26 15:23:36 -0700 |
commit | b3ba1d4e717d6292df4273108f0da61dac4f7b10 (patch) | |
tree | df6785c3bdadf178713cc76cc3f3b8ab5709a9a3 /core/java/android/view | |
parent | 6b0a880e13b217b670f27bfe8ef3a13b3bb51af0 (diff) | |
download | frameworks_base-b3ba1d4e717d6292df4273108f0da61dac4f7b10.zip frameworks_base-b3ba1d4e717d6292df4273108f0da61dac4f7b10.tar.gz frameworks_base-b3ba1d4e717d6292df4273108f0da61dac4f7b10.tar.bz2 |
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
Diffstat (limited to 'core/java/android/view')
-rw-r--r-- | core/java/android/view/ViewRootImpl.java | 21 |
1 files changed, 17 insertions, 4 deletions
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 @@ public final class ViewRootImpl implements ViewParent, 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 @@ public final class ViewRootImpl implements ViewParent, 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); + } } } } |