Refactor SliceDataRepository

Pass EntryRepository as input
Change it to lazy loading

Bug: 244122804
Test: unit-test & local build gallery
Change-Id: I99a7f2c005594a62a5bba1e35a8f7ece4f06cc8c
This commit is contained in:
Zekan Qian
2022-11-15 14:42:32 +08:00
parent 777db8680a
commit ea644d1dde
4 changed files with 6 additions and 8 deletions

View File

@@ -23,7 +23,7 @@ import com.android.settingslib.spa.framework.common.SpaEnvironmentFactory
class SpaSliceBroadcastReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
val sliceRepository = SpaEnvironmentFactory.instance.sliceDataRepository
val sliceRepository by SpaEnvironmentFactory.instance.sliceDataRepository
val sliceUri = intent?.data ?: return
val sliceData = sliceRepository.getActiveSliceData(sliceUri) ?: return
sliceData.doAction()

View File

@@ -32,7 +32,8 @@ private const val TAG = "SpaSliceProvider"
class SpaSliceProvider : SliceProvider(), Observer<Slice?> {
private fun getOrPutSliceData(sliceUri: Uri): EntrySliceData? {
if (!SpaEnvironmentFactory.isReady()) return null
return SpaEnvironmentFactory.instance.sliceDataRepository.getOrBuildSliceData(sliceUri)
val sliceRepository by SpaEnvironmentFactory.instance.sliceDataRepository
return sliceRepository.getOrBuildSliceData(sliceUri)
}
override fun onBindSlice(sliceUri: Uri): Slice? {

View File

@@ -65,7 +65,7 @@ abstract class SpaEnvironment(context: Context) {
val entryRepository = lazy { SettingsEntryRepository(pageProviderRepository.value) }
val sliceDataRepository = SettingsSliceDataRepository()
val sliceDataRepository = lazy { SettingsSliceDataRepository(entryRepository.value) }
// In Robolectric test, applicationContext is not available. Use context as fallback.
val appContext: Context = context.applicationContext ?: context

View File

@@ -19,11 +19,11 @@ package com.android.settingslib.spa.slice
import android.net.Uri
import android.util.Log
import com.android.settingslib.spa.framework.common.EntrySliceData
import com.android.settingslib.spa.framework.common.SpaEnvironmentFactory
import com.android.settingslib.spa.framework.common.SettingsEntryRepository
private const val TAG = "SliceDataRepository"
class SettingsSliceDataRepository {
class SettingsSliceDataRepository(private val entryRepository: SettingsEntryRepository) {
// The map of slice uri to its EntrySliceData, a.k.a. LiveData<Slice?>
private val sliceDataMap: MutableMap<String, EntrySliceData> = mutableMapOf()
@@ -46,13 +46,10 @@ class SettingsSliceDataRepository {
private fun buildLiveDataImpl(sliceUri: Uri): EntrySliceData? {
Log.d(TAG, "buildLiveData: $sliceUri")
if (!SpaEnvironmentFactory.isReady()) return null
val entryRepository by SpaEnvironmentFactory.instance.entryRepository
val entryId = sliceUri.getEntryId() ?: return null
val entry = entryRepository.getEntry(entryId) ?: return null
if (!entry.hasSliceSupport) return null
val arguments = sliceUri.getRuntimeArguments()
return entry.getSliceData(runtimeArguments = arguments, sliceUri = sliceUri)
}