Adding ThemeManager as a centralized place for controlling icon theming
Bug: 381897614
Flag: EXEMPT refactor
Test: atest ThemeManagerTest
Change-Id: Ib1dafdcc303f05f78cf586741c3d35243ab06e69
diff --git a/src/com/android/launcher3/LauncherAppState.java b/src/com/android/launcher3/LauncherAppState.java
index 5989e4c..e560a14 100644
--- a/src/com/android/launcher3/LauncherAppState.java
+++ b/src/com/android/launcher3/LauncherAppState.java
@@ -20,12 +20,6 @@
import static android.content.Context.RECEIVER_EXPORTED;
import static com.android.launcher3.Flags.enableSmartspaceRemovalToggle;
-import static com.android.launcher3.InvariantDeviceProfile.GRID_NAME_PREFS_KEY;
-import static com.android.launcher3.LauncherPrefs.DB_FILE;
-import static com.android.launcher3.LauncherPrefs.GRID_NAME;
-import static com.android.launcher3.LauncherPrefs.ICON_STATE;
-import static com.android.launcher3.LauncherPrefs.THEMED_ICONS;
-import static com.android.launcher3.model.DeviceGridState.KEY_DB_FILE;
import static com.android.launcher3.model.LoaderTask.SMARTSPACE_ON_HOME_SCREEN;
import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR;
@@ -38,18 +32,17 @@
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.content.pm.LauncherApps;
import android.content.pm.LauncherApps.ArchiveCompatibilityParams;
-import android.os.UserHandle;
import android.util.Log;
import androidx.annotation.Nullable;
import androidx.core.os.BuildCompat;
-import com.android.launcher3.graphics.IconShape;
+import com.android.launcher3.graphics.ThemeManager;
+import com.android.launcher3.graphics.ThemeManager.ThemeChangeListener;
import com.android.launcher3.icons.IconCache;
import com.android.launcher3.icons.IconProvider;
import com.android.launcher3.icons.LauncherIconProvider;
import com.android.launcher3.icons.LauncherIcons;
-import com.android.launcher3.logging.FileLog;
import com.android.launcher3.model.ModelLauncherCallbacks;
import com.android.launcher3.model.WidgetsFilterDataProvider;
import com.android.launcher3.notification.NotificationListener;
@@ -64,7 +57,6 @@
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.util.TraceHelper;
import com.android.launcher3.widget.custom.CustomWidgetManager;
@@ -108,6 +100,11 @@
}
});
+ ThemeChangeListener themeChangeListener = this::refreshAndReloadLauncher;
+ ThemeManager.INSTANCE.get(context).addChangeListener(themeChangeListener);
+ mOnTerminateCallback.add(() ->
+ ThemeManager.INSTANCE.get(context).removeChangeListener(themeChangeListener));
+
ModelLauncherCallbacks callbacks = mModel.newModelCallbacks();
LauncherApps launcherApps = mContext.getSystemService(LauncherApps.class);
launcherApps.registerCallback(callbacks);
@@ -156,14 +153,9 @@
CustomWidgetManager cwm = CustomWidgetManager.INSTANCE.get(mContext);
mOnTerminateCallback.add(cwm.addWidgetRefreshCallback(mModel::rebindCallbacks)::close);
- IconObserver observer = new IconObserver();
SafeCloseable iconChangeTracker = mIconProvider.registerIconChangeListener(
- observer, MODEL_EXECUTOR.getHandler());
+ mModel::onAppIconChanged, MODEL_EXECUTOR.getHandler());
mOnTerminateCallback.add(iconChangeTracker::close);
- MODEL_EXECUTOR.execute(observer::verifyIconChanged);
- LauncherPrefs.get(context).addListener(observer, THEMED_ICONS);
- mOnTerminateCallback.add(
- () -> LauncherPrefs.get(mContext).removeListener(observer, THEMED_ICONS));
InstallSessionTracker installSessionTracker =
InstallSessionHelper.INSTANCE.get(context).registerInstallTracker(callbacks);
@@ -255,41 +247,4 @@
public static InvariantDeviceProfile getIDP(Context context) {
return InvariantDeviceProfile.INSTANCE.get(context);
}
-
- private class IconObserver
- implements IconProvider.IconChangeListener, LauncherPrefChangeListener {
-
- @Override
- public void onAppIconChanged(String packageName, UserHandle user) {
- mModel.onAppIconChanged(packageName, user);
- }
-
- @Override
- public void onSystemIconStateChanged(String iconState) {
- IconShape.INSTANCE.get(mContext).pickBestShape(mContext);
- refreshAndReloadLauncher();
- LauncherPrefs.get(mContext).put(ICON_STATE, iconState);
- }
-
- void verifyIconChanged() {
- String iconState = mIconProvider.getSystemIconState();
- if (!iconState.equals(LauncherPrefs.get(mContext).get(ICON_STATE))) {
- onSystemIconStateChanged(iconState);
- }
- }
-
- @Override
- public void onPrefChanged(String key) {
- if (Themes.KEY_THEMED_ICONS.equals(key)) {
- mIconProvider.setIconThemeSupported(Themes.isThemedIconEnabled(mContext));
- verifyIconChanged();
- } else if (GRID_NAME_PREFS_KEY.equals(key)) {
- FileLog.d(TAG, "onPrefChanged GRID_NAME changed: "
- + LauncherPrefs.get(mContext).get(GRID_NAME));
- } else if (KEY_DB_FILE.equals(key)) {
- FileLog.d(TAG, "onPrefChanged DB_FILE changed: "
- + LauncherPrefs.get(mContext).get(DB_FILE));
- }
- }
- }
}