Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dfa6e25b authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Synchronize the ArrayMap.put method calls." into main

parents 7ad12f9f a9753891
Loading
Loading
Loading
Loading
+33 −22
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import android.telephony.TelephonyManager;
import android.util.ArrayMap;
import android.view.WindowManagerPolicyConstants;

import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.ArrayUtils;

@@ -71,8 +72,10 @@ public class BroadcastStickyCache {
    @VisibleForTesting
    public static final ArrayMap<String, String> sActionApiNameMap = new ArrayMap<>();

    @GuardedBy("BroadcastStickyCache.class")
    private static final ArrayMap<String, IpcDataCache.Config> sActionConfigMap = new ArrayMap<>();

    @GuardedBy("BroadcastStickyCache.class")
    private static final ArrayMap<StickyBroadcastFilter, IpcDataCache<Void, Intent>>
            sFilterCacheMap = new ArrayMap<>();

@@ -154,7 +157,10 @@ public class BroadcastStickyCache {
            @Nullable String broadcastPermission,
            @UserIdInt int userId,
            @RegisterReceiverFlags int flags) {
        IpcDataCache<Void, Intent> intentDataCache = findIpcDataCache(filter);
        IpcDataCache<Void, Intent> intentDataCache;

        synchronized (BroadcastStickyCache.class) {
            intentDataCache = findIpcDataCache(filter);

            if (intentDataCache == null) {
                final String action = filter.getAction(0);
@@ -176,15 +182,19 @@ public class BroadcastStickyCache {
                                        flags));
                sFilterCacheMap.put(stickyBroadcastFilter, intentDataCache);
            }
        }
        return intentDataCache.query(null);
    }

    @VisibleForTesting
    public static void clearCacheForTest() {
        synchronized (BroadcastStickyCache.class) {
            sFilterCacheMap.clear();
        }
    }

    @Nullable
    @GuardedBy("BroadcastStickyCache.class")
    private static IpcDataCache<Void, Intent> findIpcDataCache(
            @NonNull IntentFilter filter) {
        for (int i = sFilterCacheMap.size() - 1; i >= 0; i--) {
@@ -198,6 +208,7 @@ public class BroadcastStickyCache {
    }

    @NonNull
    @GuardedBy("BroadcastStickyCache.class")
    private static IpcDataCache.Config getConfig(@NonNull String action) {
        if (!sActionConfigMap.containsKey(action)) {
            // We only need 1 entry per cache but just to be on the safer side we are choosing 32