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

Commit ea644d1d authored by Zekan Qian's avatar Zekan Qian
Browse files

Refactor SliceDataRepository

Pass EntryRepository as input
Change it to lazy loading

Bug: 244122804
Test: unit-test & local build gallery
Change-Id: I99a7f2c005594a62a5bba1e35a8f7ece4f06cc8c
parent 777db868
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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()
+2 −1
Original line number Diff line number Diff line
@@ -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? {
+1 −1
Original line number Diff line number Diff line
@@ -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
+2 −5
Original line number Diff line number Diff line
@@ -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)
    }