summaryrefslogtreecommitdiffstats
path: root/core/java/android/view/AccessibilityInteractionController.java
diff options
context:
space:
mode:
authorSvetoslav Ganov <svetoslavganov@google.com>2012-05-15 18:56:45 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-05-15 18:56:45 -0700
commit67d10a5867ac26155117f2ffda84f9d2a21dbcf0 (patch)
tree8fd4e85980612ca5ffca2eb0feea8384d80fae30 /core/java/android/view/AccessibilityInteractionController.java
parent0763e01c78a0febd02e344db5755479f57349a26 (diff)
parent4528b4e882584745f48263fa6626987e63832a2a (diff)
downloadframeworks_base-67d10a5867ac26155117f2ffda84f9d2a21dbcf0.zip
frameworks_base-67d10a5867ac26155117f2ffda84f9d2a21dbcf0.tar.gz
frameworks_base-67d10a5867ac26155117f2ffda84f9d2a21dbcf0.tar.bz2
Merge "Prefetching of accessibility node infos getting incorrect views." into jb-dev
Diffstat (limited to 'core/java/android/view/AccessibilityInteractionController.java')
-rw-r--r--core/java/android/view/AccessibilityInteractionController.java29
1 files changed, 16 insertions, 13 deletions
diff --git a/core/java/android/view/AccessibilityInteractionController.java b/core/java/android/view/AccessibilityInteractionController.java
index 16f9a18..6dc31dd 100644
--- a/core/java/android/view/AccessibilityInteractionController.java
+++ b/core/java/android/view/AccessibilityInteractionController.java
@@ -29,7 +29,6 @@ import android.util.Poolable;
import android.util.PoolableManager;
import android.util.Pools;
import android.util.SparseLongArray;
-import android.view.ViewGroup.ChildListForAccessibility;
import android.view.accessibility.AccessibilityInteractionClient;
import android.view.accessibility.AccessibilityNodeInfo;
import android.view.accessibility.AccessibilityNodeProvider;
@@ -623,6 +622,8 @@ final class AccessibilityInteractionController {
private static final int MAX_ACCESSIBILITY_NODE_INFO_BATCH_SIZE = 50;
+ private final ArrayList<View> mTempViewList = new ArrayList<View>();
+
public void prefetchAccessibilityNodeInfos(View view, int virtualViewId, int prefetchFlags,
List<AccessibilityNodeInfo> outInfos) {
AccessibilityNodeProvider provider = view.getAccessibilityNodeProvider();
@@ -663,8 +664,6 @@ final class AccessibilityInteractionController {
while (parent instanceof View
&& outInfos.size() < MAX_ACCESSIBILITY_NODE_INFO_BATCH_SIZE) {
View parentView = (View) parent;
- final long parentNodeId = AccessibilityNodeInfo.makeNodeId(
- parentView.getAccessibilityViewId(), AccessibilityNodeInfo.UNDEFINED);
AccessibilityNodeInfo info = parentView.createAccessibilityNodeInfo();
if (info != null) {
outInfos.add(info);
@@ -678,19 +677,21 @@ final class AccessibilityInteractionController {
ViewParent parent = current.getParentForAccessibility();
if (parent instanceof ViewGroup) {
ViewGroup parentGroup = (ViewGroup) parent;
- ChildListForAccessibility children = ChildListForAccessibility.obtain(parentGroup,
- false);
+ ArrayList<View> children = mTempViewList;
+ children.clear();
try {
- final int childCount = children.getChildCount();
+ parentGroup.addChildrenForAccessibility(children);
+ final int childCount = children.size();
for (int i = 0; i < childCount; i++) {
if (outInfos.size() >= MAX_ACCESSIBILITY_NODE_INFO_BATCH_SIZE) {
return;
}
- View child = children.getChildAt(i);
+ View child = children.get(i);
if (child.getAccessibilityViewId() != current.getAccessibilityViewId()
&& isShown(child)) {
AccessibilityNodeInfo info = null;
- AccessibilityNodeProvider provider = child.getAccessibilityNodeProvider();
+ AccessibilityNodeProvider provider =
+ child.getAccessibilityNodeProvider();
if (provider == null) {
info = child.createAccessibilityNodeInfo();
} else {
@@ -703,7 +704,7 @@ final class AccessibilityInteractionController {
}
}
} finally {
- children.recycle();
+ children.clear();
}
}
}
@@ -716,14 +717,16 @@ final class AccessibilityInteractionController {
ViewGroup rootGroup = (ViewGroup) root;
HashMap<View, AccessibilityNodeInfo> addedChildren =
new HashMap<View, AccessibilityNodeInfo>();
- ChildListForAccessibility children = ChildListForAccessibility.obtain(rootGroup, false);
+ ArrayList<View> children = mTempViewList;
+ children.clear();
try {
- final int childCount = children.getChildCount();
+ root.addChildrenForAccessibility(children);
+ final int childCount = children.size();
for (int i = 0; i < childCount; i++) {
if (outInfos.size() >= MAX_ACCESSIBILITY_NODE_INFO_BATCH_SIZE) {
return;
}
- View child = children.getChildAt(i);
+ View child = children.get(i);
if (isShown(child)) {
AccessibilityNodeProvider provider = child.getAccessibilityNodeProvider();
if (provider == null) {
@@ -743,7 +746,7 @@ final class AccessibilityInteractionController {
}
}
} finally {
- children.recycle();
+ children.clear();
}
if (outInfos.size() < MAX_ACCESSIBILITY_NODE_INFO_BATCH_SIZE) {
for (Map.Entry<View, AccessibilityNodeInfo> entry : addedChildren.entrySet()) {