Changing ThemeManager to take IconControllerFactory as a parameter

This allows customizing different parts of ThemeManager independently

Bug: 381897614
Flag: com.android.launcher3.extendible_theme_manager
Test: Presubmit
Change-Id: Iea266793eff47ac54e5c4fcddbab1c36c955dbb7
This commit is contained in:
Sunny Goyal
2025-02-14 11:19:35 -08:00
parent 17c250e9d5
commit 33bf137ee9
@@ -19,6 +19,7 @@ package com.android.launcher3.graphics
import android.content.Context
import android.content.res.Resources
import com.android.launcher3.EncryptionType
import com.android.launcher3.Item
import com.android.launcher3.LauncherPrefChangeListener
import com.android.launcher3.LauncherPrefs
import com.android.launcher3.LauncherPrefs.Companion.backedUpItem
@@ -38,11 +39,12 @@ import javax.inject.Inject
/** Centralized class for managing Launcher icon theming */
@LauncherAppSingleton
open class ThemeManager
class ThemeManager
@Inject
constructor(
@ApplicationContext protected val context: Context,
protected val prefs: LauncherPrefs,
@ApplicationContext private val context: Context,
private val prefs: LauncherPrefs,
private val iconControllerFactory: IconControllerFactory,
lifecycle: DaggerSingletonTracker,
) {
@@ -72,21 +74,21 @@ constructor(
val receiver = SimpleBroadcastReceiver(context, MAIN_EXECUTOR) { verifyIconState() }
receiver.registerPkgActions("android", ACTION_OVERLAY_CHANGED)
val prefListener = LauncherPrefChangeListener { key ->
when (key) {
KEY_THEMED_ICONS,
KEY_ICON_SHAPE -> verifyIconState()
}
}
prefs.addListener(prefListener, THEMED_ICONS, PREF_ICON_SHAPE)
val keys = (iconControllerFactory.prefKeys + PREF_ICON_SHAPE)
val keysArray = keys.toTypedArray()
val prefKeySet = keys.map { it.sharedPrefKey }
val prefListener = LauncherPrefChangeListener { key ->
if (prefKeySet.contains(key)) verifyIconState()
}
prefs.addListener(prefListener, *keysArray)
lifecycle.addCloseable {
receiver.unregisterReceiverSafely()
prefs.removeListener(prefListener)
prefs.removeListener(prefListener, *keysArray)
}
}
protected fun verifyIconState() {
private fun verifyIconState() {
val newState = parseIconState(iconState)
if (newState == iconState) return
iconState = newState
@@ -126,17 +128,13 @@ constructor(
return IconState(
iconMask = iconMask,
folderShapeMask = folderShapeMask,
themeController = createThemeController(),
themeController = iconControllerFactory.createThemeController(),
iconScale = shapeModel?.iconScale ?: 1f,
iconShape = iconShape,
folderShape = folderShape,
)
}
protected open fun createThemeController(): IconThemeController? {
return if (isMonoThemeEnabled) MONO_THEME_CONTROLLER else null
}
data class IconState(
val iconMask: String,
val folderShapeMask: String,
@@ -154,6 +152,15 @@ constructor(
fun onThemeChanged()
}
open class IconControllerFactory @Inject constructor(protected val prefs: LauncherPrefs) {
open val prefKeys: List<Item> = listOf(THEMED_ICONS)
open fun createThemeController(): IconThemeController? {
return if (prefs.get(THEMED_ICONS)) MONO_THEME_CONTROLLER else null
}
}
companion object {
@JvmField val INSTANCE = DaggerSingletonObject(LauncherAppComponent::getThemeManager)