diff options
| -rw-r--r-- | core/java/android/view/accessibility/AccessibilityNodeInfo.java | 10 | 
1 files changed, 10 insertions, 0 deletions
| diff --git a/core/java/android/view/accessibility/AccessibilityNodeInfo.java b/core/java/android/view/accessibility/AccessibilityNodeInfo.java index 158ac6b0cdb5..28550ee61fbb 100644 --- a/core/java/android/view/accessibility/AccessibilityNodeInfo.java +++ b/core/java/android/view/accessibility/AccessibilityNodeInfo.java @@ -40,6 +40,7 @@ import android.text.style.AccessibilityURLSpan;  import android.text.style.ClickableSpan;  import android.text.style.URLSpan;  import android.util.ArraySet; +import android.util.Log;  import android.util.LongArray;  import android.util.Pools.SynchronizedPool;  import android.view.View; @@ -85,6 +86,8 @@ public class AccessibilityNodeInfo implements Parcelable {      private static final boolean DEBUG = false; +    private static final String TAG = "AccessibilityNodeInfo"; +      /** @hide */      public static final int UNDEFINED_CONNECTION_ID = -1; @@ -990,6 +993,7 @@ public class AccessibilityNodeInfo implements Parcelable {       * <strong>Note:</strong> Cannot be called from an       * {@link android.accessibilityservice.AccessibilityService}.       * This class is made immutable before being delivered to an AccessibilityService. +     * Note that a view cannot be made its own child.       * </p>       *       * @param child The child. @@ -1037,6 +1041,7 @@ public class AccessibilityNodeInfo implements Parcelable {       * hierarchy for accessibility purposes. This enables custom views that draw complex       * content to report them selves as a tree of virtual views, thus conveying their       * logical structure. +     * Note that a view cannot be made its own child.       * </p>       *       * @param root The root of the virtual subtree. @@ -1054,6 +1059,11 @@ public class AccessibilityNodeInfo implements Parcelable {          final int rootAccessibilityViewId =              (root != null) ? root.getAccessibilityViewId() : UNDEFINED_ITEM_ID;          final long childNodeId = makeNodeId(rootAccessibilityViewId, virtualDescendantId); +        if (childNodeId == mSourceNodeId) { +            Log.e(TAG, "Rejecting attempt to make a View its own child"); +            return; +        } +          // If we're checking uniqueness and the ID already exists, abort.          if (checked && mChildNodeIds.indexOf(childNodeId) >= 0) {              return; |