OSDN Git Service

Don't get struct of children of !laidout viewGroup
authorPhilip P. Moltmann <moltmann@google.com>
Tue, 15 Aug 2017 22:22:37 +0000 (15:22 -0700)
committerPhilip P. Moltmann <moltmann@google.com>
Wed, 16 Aug 2017 16:03:15 +0000 (16:03 +0000)
Some view groups (e.g. the support.v4.viewPager) need to be laid out
to determine the order of it's children. As we need the order before
being able to collect the structure of the children we need to skip
their collection until they are laid out.

Fixes: 38198484
Test: cts-tradefed run cts-dev -m CtsAutoFillServiceTestCases
      cts-tradefed run cts-dev -m CtsAccessibilityTestCases
      cts-tradefed run cts-dev -m CtsAccessibilityServiceTestCases

Change-Id: I1f7bee1505edaf70c9d9a686be6f9a76d8aedd0b

core/java/android/view/View.java
core/java/android/view/ViewGroup.java

index 2b4015f..8a9b14e 100644 (file)
@@ -8078,10 +8078,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
             boolean forAutofill, @AutofillFlags int flags) {
         if (forAutofill) {
             structure.setAutofillId(getAutofillId());
-            if (!isLaidOut()) {
-                Log.w(VIEW_LOG_TAG, "dispatchProvideAutofillStructure(): not laid out, ignoring");
-                return;
-            }
             onProvideAutofillStructure(structure, flags);
             onProvideAutofillVirtualStructure(structure, flags);
         } else if (!isAssistBlocked()) {
index ecdfa3f..18b7334 100644 (file)
@@ -3400,6 +3400,13 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
         if (childrenCount <= 0) {
             return;
         }
+
+        if (!isLaidOut()) {
+            Log.v(VIEW_LOG_TAG, "dispatchProvideStructure(): not laid out, ignoring "
+                    + childrenCount + " children of " + getAccessibilityViewId());
+            return;
+        }
+
         structure.setChildCount(childrenCount);
         ArrayList<View> preorderedList = buildOrderedChildList();
         boolean customOrder = preorderedList == null
@@ -3476,6 +3483,13 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
         if (structure.getChildCount() != 0) {
             return;
         }
+
+        if (!isLaidOut()) {
+            Log.v(VIEW_LOG_TAG, "dispatchProvideAutofillStructure(): not laid out, ignoring "
+                    + mChildrenCount + " children of " + getAutofillId());
+            return;
+        }
+
         final ChildListForAutoFill children = getChildrenForAutofill(flags);
         final int childrenCount = children.size();
         structure.setChildCount(childrenCount);