Make AppIconCacheManager instance volatile to prevent thread caching
issue

Bug: 378525195
Test: atest
Flag: EXEMPT bug fix
Change-Id: I09c8eedfe05ef17affa910d6cfbc940bb4e29115
diff --git a/packages/SettingsLib/src/com/android/settingslib/applications/AppIconCacheManager.java b/packages/SettingsLib/src/com/android/settingslib/applications/AppIconCacheManager.java
index c0117b9..30ce13b 100644
--- a/packages/SettingsLib/src/com/android/settingslib/applications/AppIconCacheManager.java
+++ b/packages/SettingsLib/src/com/android/settingslib/applications/AppIconCacheManager.java
@@ -22,6 +22,7 @@
 import android.util.Log;
 import android.util.LruCache;
 
+import androidx.annotation.NonNull;
 import androidx.annotation.VisibleForTesting;
 
 /**
@@ -33,7 +34,7 @@
     @VisibleForTesting
     static final int MAX_CACHE_SIZE_IN_KB = getMaxCacheInKb();
     private static final String DELIMITER = ":";
-    private static AppIconCacheManager sAppIconCacheManager;
+    private static volatile AppIconCacheManager sAppIconCacheManager;
     private final LruCache<String, Drawable> mDrawableCache;
 
     private AppIconCacheManager() {
@@ -52,11 +53,18 @@
     /**
      * Get an {@link AppIconCacheManager} instance.
      */
-    public static synchronized AppIconCacheManager getInstance() {
-        if (sAppIconCacheManager == null) {
-            sAppIconCacheManager = new AppIconCacheManager();
+    public static @NonNull AppIconCacheManager getInstance() {
+        AppIconCacheManager result = sAppIconCacheManager;
+        if (result == null) {
+            synchronized (AppIconCacheManager.class) {
+                result = sAppIconCacheManager;
+                if (result == null) {
+                    result = new AppIconCacheManager();
+                    sAppIconCacheManager = result;
+                }
+            }
         }
-        return sAppIconCacheManager;
+        return result;
     }
 
     /**
@@ -118,7 +126,7 @@
      *
      * @see android.content.ComponentCallbacks2#onTrimMemory(int)
      */
-    public void trimMemory(int level) {
+    public static void trimMemory(int level) {
         if (level >= android.content.ComponentCallbacks2.TRIM_MEMORY_BACKGROUND) {
             // Time to clear everything
             if (sAppIconCacheManager != null) {