From 9669e3af6500ffd1041df7c4197865a001cdc055 Mon Sep 17 00:00:00 2001 From: Eugene Susla Date: Thu, 8 Feb 2018 15:14:06 -0800 Subject: [PATCH] Use structural equality for A11yNodeInfo#mChildNodeIds This reintroduces I508df9e4346e304b8ae56cc38b17e9a940d941f1 with the addition of missing nullchecks A11yNodeInfo#writeToParcel relied on LongArray#equals to avoid storing it if it's the default value, but because the equality is be by reference, it would store it every time. This fixes that. Test: a11y cts Change-Id: I8fadffb2508d819ae9a9db8c4298e8941a349627 Fixes: 72460870 --- core/java/android/util/LongArray.java | 20 ++++++++++++++++++- .../accessibility/AccessibilityNodeInfo.java | 2 +- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/core/java/android/util/LongArray.java b/core/java/android/util/LongArray.java index 9b0489ca5c6ed..fa980966802f6 100644 --- a/core/java/android/util/LongArray.java +++ b/core/java/android/util/LongArray.java @@ -16,11 +16,15 @@ package android.util; +import android.annotation.Nullable; + import com.android.internal.util.ArrayUtils; import com.android.internal.util.Preconditions; -import java.util.Arrays; + import libcore.util.EmptyArray; +import java.util.Arrays; + /** * Implements a growing array of long primitives. * @@ -216,4 +220,18 @@ public class LongArray implements Cloneable { throw new ArrayIndexOutOfBoundsException(mSize, index); } } + + /** + * Test if each element of {@code a} equals corresponding element from {@code b} + */ + public static boolean elementsEqual(@Nullable LongArray a, @Nullable LongArray b) { + if (a == null || b == null) return a == b; + if (a.mSize != b.mSize) return false; + for (int i = 0; i < a.mSize; i++) { + if (a.get(i) != b.get(i)) { + return false; + } + } + return true; + } } diff --git a/core/java/android/view/accessibility/AccessibilityNodeInfo.java b/core/java/android/view/accessibility/AccessibilityNodeInfo.java index 23e7d61912765..e770a8b9d4148 100644 --- a/core/java/android/view/accessibility/AccessibilityNodeInfo.java +++ b/core/java/android/view/accessibility/AccessibilityNodeInfo.java @@ -3194,7 +3194,7 @@ public class AccessibilityNodeInfo implements Parcelable { fieldIndex++; if (mConnectionId != DEFAULT.mConnectionId) nonDefaultFields |= bitAt(fieldIndex); fieldIndex++; - if (!Objects.equals(mChildNodeIds, DEFAULT.mChildNodeIds)) { + if (!LongArray.elementsEqual(mChildNodeIds, DEFAULT.mChildNodeIds)) { nonDefaultFields |= bitAt(fieldIndex); } fieldIndex++;