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; |