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

Skip to content
Snippets Groups Projects
Commit 0bcc2b8a authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Make ClockRegistry and its provider singleton" into udc-dev am: df602e63

parents 5cb12ba0 df602e63
Branches
No related tags found
No related merge requests found
......@@ -99,11 +99,6 @@ open class ThemePickerInjector : WallpaperPicker2Injector(), CustomizationInject
private var keyguardQuickAffordanceSnapshotRestorer: KeyguardQuickAffordanceSnapshotRestorer? =
null
private var notificationsSnapshotRestorer: NotificationsSnapshotRestorer? = null
/**
* Mapping from LifeCycleOwner's hashcode to ClockRegistry as we need to keep different
* ClockRegistries per LifeCycle to ensure proper cleanup
*/
private var clockRegistries: MutableMap<Int, ClockRegistry> = HashMap()
private var clockPickerInteractor: ClockPickerInteractor? = null
private var clockSectionViewModel: ClockSectionViewModel? = null
private var clockCarouselViewModelFactory: ClockCarouselViewModel.Factory? = null
......@@ -122,6 +117,7 @@ open class ThemePickerInjector : WallpaperPicker2Injector(), CustomizationInject
private var gridInteractor: GridInteractor? = null
private var gridSnapshotRestorer: GridSnapshotRestorer? = null
private var gridScreenViewModelFactory: GridScreenViewModel.Factory? = null
private var clockRegistryProvider: ClockRegistryProvider? = null
override fun getCustomizationSections(activity: ComponentActivity): CustomizationSections {
return customizationSections
......@@ -344,26 +340,15 @@ open class ThemePickerInjector : WallpaperPicker2Injector(), CustomizationInject
}
override fun getClockRegistry(context: Context, lifecycleOwner: LifecycleOwner): ClockRegistry {
return clockRegistries[lifecycleOwner.hashCode()]
?: ClockRegistryProvider(
context = context,
coroutineScope = getApplicationCoroutineScope(),
mainDispatcher = Dispatchers.Main,
backgroundDispatcher = Dispatchers.IO,
)
.get()
.also {
clockRegistries[lifecycleOwner.hashCode()] = it
lifecycleOwner.lifecycle.addObserver(
object : DefaultLifecycleObserver {
override fun onDestroy(owner: LifecycleOwner) {
super.onDestroy(owner)
clockRegistries[lifecycleOwner.hashCode()]?.unregisterListeners()
clockRegistries.remove(lifecycleOwner.hashCode())
}
}
return (clockRegistryProvider
?: ClockRegistryProvider(
context = context,
coroutineScope = getApplicationCoroutineScope(),
mainDispatcher = Dispatchers.Main,
backgroundDispatcher = Dispatchers.IO,
)
}
.also { clockRegistryProvider = it })
.getForOwner(lifecycleOwner)
}
override fun getClockPickerInteractor(
......
......@@ -19,6 +19,8 @@ import android.app.NotificationManager
import android.content.ComponentName
import android.content.Context
import android.view.LayoutInflater
import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.LifecycleOwner
import com.android.systemui.plugins.Plugin
import com.android.systemui.plugins.PluginManager
import com.android.systemui.shared.clocks.ClockRegistry
......@@ -43,6 +45,7 @@ class ClockRegistryProvider(
private val mainDispatcher: CoroutineDispatcher,
private val backgroundDispatcher: CoroutineDispatcher,
) {
private val lifecycleOwners = mutableSetOf<Int>()
private val pluginManager: PluginManager by lazy { createPluginManager(context) }
private val clockRegistry: ClockRegistry by lazy {
ClockRegistry(
......@@ -60,10 +63,32 @@ class ClockRegistryProvider(
.apply { registerListeners() }
}
fun get(): ClockRegistry {
fun getForOwner(lifecycleOwner: LifecycleOwner): ClockRegistry {
registerLifecycleOwner(lifecycleOwner)
return clockRegistry
}
private fun registerLifecycleOwner(lifecycleOwner: LifecycleOwner) {
lifecycleOwners.add(lifecycleOwner.hashCode())
lifecycleOwner.lifecycle.addObserver(
object : DefaultLifecycleObserver {
override fun onDestroy(owner: LifecycleOwner) {
super.onDestroy(owner)
unregisterLifecycleOwner(owner)
}
}
)
}
private fun unregisterLifecycleOwner(lifecycleOwner: LifecycleOwner) {
lifecycleOwners.remove(lifecycleOwner.hashCode())
if (lifecycleOwners.isEmpty()) {
clockRegistry.unregisterListeners()
}
}
private fun createPluginManager(context: Context): PluginManager {
val privilegedPlugins = listOf<String>()
val isDebugDevice = true
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment