From 119dd01b497b5e6e25009785ec36c9877675deef Mon Sep 17 00:00:00 2001 From: Jing Ji Date: Tue, 24 Aug 2021 11:42:58 -0700 Subject: [PATCH] Use ArrayMap instead of SparseArray to manage the ProviderKey As the ArrayMap handles the hash code collision properly. Bug: 197647956 Test: atest CtsContentTestCases:android.content.cts Change-Id: Ibb57a22c08b0fa5462505d586d5fb0aaf908c80f --- core/java/android/app/ActivityThread.java | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 0c64c86daf3ee..de0fef0e74a22 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -464,11 +464,7 @@ public final class ActivityThread extends ClientTransactionHandler @Override public int hashCode() { - return hashCode(authority, userId); - } - - public static int hashCode(final String auth, final int userIdent) { - return ((auth != null) ? auth.hashCode() : 0) ^ userIdent; + return ((authority != null) ? authority.hashCode() : 0) ^ userId; } } @@ -490,7 +486,7 @@ public final class ActivityThread extends ClientTransactionHandler // Note we never removes items from this map but that's okay because there are only so many // users and so many authorities. @GuardedBy("mGetProviderKeys") - final SparseArray mGetProviderKeys = new SparseArray<>(); + final ArrayMap mGetProviderKeys = new ArrayMap<>(); final ArrayMap> mOnPauseListeners = new ArrayMap>(); @@ -7015,11 +7011,11 @@ public final class ActivityThread extends ClientTransactionHandler } private ProviderKey getGetProviderKey(String auth, int userId) { - final int key = ProviderKey.hashCode(auth, userId); + final ProviderKey key = new ProviderKey(auth, userId); synchronized (mGetProviderKeys) { ProviderKey lock = mGetProviderKeys.get(key); if (lock == null) { - lock = new ProviderKey(auth, userId); + lock = key; mGetProviderKeys.put(key, lock); } return lock;