Adding a shared-pref to control icon theming

Bug: 183641907
Test: Manual
Change-Id: I640a8473c9ca4acfded9ebbfa823e437c3a42b45
diff --git a/src/com/android/launcher3/LauncherAppState.java b/src/com/android/launcher3/LauncherAppState.java
index 834b5a7..b6cc6d6 100644
--- a/src/com/android/launcher3/LauncherAppState.java
+++ b/src/com/android/launcher3/LauncherAppState.java
@@ -24,6 +24,8 @@
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
 import android.content.pm.LauncherApps;
 import android.os.UserHandle;
 import android.util.Log;
@@ -45,6 +47,7 @@
 import com.android.launcher3.util.SafeCloseable;
 import com.android.launcher3.util.SettingsCache;
 import com.android.launcher3.util.SimpleBroadcastReceiver;
+import com.android.launcher3.util.Themes;
 import com.android.launcher3.widget.custom.CustomWidgetManager;
 
 public class LauncherAppState {
@@ -108,6 +111,12 @@
                 observer, MODEL_EXECUTOR.getHandler());
         mOnTerminateCallback.add(iconChangeTracker::close);
         MODEL_EXECUTOR.execute(observer::verifyIconChanged);
+        if (ENABLE_THEMED_ICONS.get()) {
+            SharedPreferences prefs = Utilities.getPrefs(mContext);
+            prefs.registerOnSharedPreferenceChangeListener(observer);
+            mOnTerminateCallback.add(
+                    () -> prefs.unregisterOnSharedPreferenceChangeListener(observer));
+        }
 
         InstallSessionTracker installSessionTracker =
                 InstallSessionHelper.INSTANCE.get(context).registerInstallTracker(mModel);
@@ -128,7 +137,7 @@
         mContext = context;
 
         mInvariantDeviceProfile = InvariantDeviceProfile.INSTANCE.get(context);
-        mIconProvider =  new IconProvider(context, ENABLE_THEMED_ICONS.get());
+        mIconProvider =  new IconProvider(context, Themes.isThemedIconEnabled(context));
         mIconCache = new IconCache(mContext, mInvariantDeviceProfile,
                 iconCacheFileName, mIconProvider);
         mWidgetCache = new WidgetPreviewLoader(mContext, mIconCache);
@@ -187,7 +196,8 @@
         return InvariantDeviceProfile.INSTANCE.get(context);
     }
 
-    private class IconObserver implements IconProvider.IconChangeListener {
+    private class IconObserver
+            implements IconProvider.IconChangeListener, OnSharedPreferenceChangeListener {
 
         @Override
         public void onAppIconChanged(String packageName, UserHandle user) {
@@ -207,5 +217,13 @@
                 onSystemIconStateChanged(iconState);
             }
         }
+
+        @Override
+        public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
+            if (Themes.KEY_THEMED_ICONS.equals(key)) {
+                mIconProvider.setIconThemeSupported(Themes.isThemedIconEnabled(mContext));
+                verifyIconChanged();
+            }
+        }
     }
 }