2929import android .util .PoolableManager ;
3030import android .util .Pools ;
3131import android .util .SparseLongArray ;
32- import android .view .ViewGroup .ChildListForAccessibility ;
3332import android .view .accessibility .AccessibilityInteractionClient ;
3433import android .view .accessibility .AccessibilityNodeInfo ;
3534import android .view .accessibility .AccessibilityNodeProvider ;
@@ -623,6 +622,8 @@ private class AccessibilityNodePrefetcher {
623622
624623 private static final int MAX_ACCESSIBILITY_NODE_INFO_BATCH_SIZE = 50 ;
625624
625+ private final ArrayList <View > mTempViewList = new ArrayList <View >();
626+
626627 public void prefetchAccessibilityNodeInfos (View view , int virtualViewId , int prefetchFlags ,
627628 List <AccessibilityNodeInfo > outInfos ) {
628629 AccessibilityNodeProvider provider = view .getAccessibilityNodeProvider ();
@@ -663,8 +664,6 @@ private void prefetchPredecessorsOfRealNode(View view,
663664 while (parent instanceof View
664665 && outInfos .size () < MAX_ACCESSIBILITY_NODE_INFO_BATCH_SIZE ) {
665666 View parentView = (View ) parent ;
666- final long parentNodeId = AccessibilityNodeInfo .makeNodeId (
667- parentView .getAccessibilityViewId (), AccessibilityNodeInfo .UNDEFINED );
668667 AccessibilityNodeInfo info = parentView .createAccessibilityNodeInfo ();
669668 if (info != null ) {
670669 outInfos .add (info );
@@ -678,19 +677,21 @@ private void prefetchSiblingsOfRealNode(View current,
678677 ViewParent parent = current .getParentForAccessibility ();
679678 if (parent instanceof ViewGroup ) {
680679 ViewGroup parentGroup = (ViewGroup ) parent ;
681- ChildListForAccessibility children = ChildListForAccessibility . obtain ( parentGroup ,
682- false );
680+ ArrayList < View > children = mTempViewList ;
681+ children . clear ( );
683682 try {
684- final int childCount = children .getChildCount ();
683+ parentGroup .addChildrenForAccessibility (children );
684+ final int childCount = children .size ();
685685 for (int i = 0 ; i < childCount ; i ++) {
686686 if (outInfos .size () >= MAX_ACCESSIBILITY_NODE_INFO_BATCH_SIZE ) {
687687 return ;
688688 }
689- View child = children .getChildAt (i );
689+ View child = children .get (i );
690690 if (child .getAccessibilityViewId () != current .getAccessibilityViewId ()
691691 && isShown (child )) {
692692 AccessibilityNodeInfo info = null ;
693- AccessibilityNodeProvider provider = child .getAccessibilityNodeProvider ();
693+ AccessibilityNodeProvider provider =
694+ child .getAccessibilityNodeProvider ();
694695 if (provider == null ) {
695696 info = child .createAccessibilityNodeInfo ();
696697 } else {
@@ -703,7 +704,7 @@ && isShown(child)) {
703704 }
704705 }
705706 } finally {
706- children .recycle ();
707+ children .clear ();
707708 }
708709 }
709710 }
@@ -716,14 +717,16 @@ private void prefetchDescendantsOfRealNode(View root,
716717 ViewGroup rootGroup = (ViewGroup ) root ;
717718 HashMap <View , AccessibilityNodeInfo > addedChildren =
718719 new HashMap <View , AccessibilityNodeInfo >();
719- ChildListForAccessibility children = ChildListForAccessibility .obtain (rootGroup , false );
720+ ArrayList <View > children = mTempViewList ;
721+ children .clear ();
720722 try {
721- final int childCount = children .getChildCount ();
723+ root .addChildrenForAccessibility (children );
724+ final int childCount = children .size ();
722725 for (int i = 0 ; i < childCount ; i ++) {
723726 if (outInfos .size () >= MAX_ACCESSIBILITY_NODE_INFO_BATCH_SIZE ) {
724727 return ;
725728 }
726- View child = children .getChildAt (i );
729+ View child = children .get (i );
727730 if (isShown (child )) {
728731 AccessibilityNodeProvider provider = child .getAccessibilityNodeProvider ();
729732 if (provider == null ) {
@@ -743,7 +746,7 @@ private void prefetchDescendantsOfRealNode(View root,
743746 }
744747 }
745748 } finally {
746- children .recycle ();
749+ children .clear ();
747750 }
748751 if (outInfos .size () < MAX_ACCESSIBILITY_NODE_INFO_BATCH_SIZE ) {
749752 for (Map .Entry <View , AccessibilityNodeInfo > entry : addedChildren .entrySet ()) {
0 commit comments