diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/SpaSliceBroadcastReceiver.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/SpaSliceBroadcastReceiver.kt index 8c038c811bb0e..58131e69d329b 100644 --- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/SpaSliceBroadcastReceiver.kt +++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/SpaSliceBroadcastReceiver.kt @@ -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() diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/SpaSliceProvider.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/SpaSliceProvider.kt index d800e507b35a4..faa04fda19046 100644 --- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/SpaSliceProvider.kt +++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/SpaSliceProvider.kt @@ -32,7 +32,8 @@ private const val TAG = "SpaSliceProvider" class SpaSliceProvider : SliceProvider(), Observer { 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? { diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SpaEnvironment.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SpaEnvironment.kt index 9bb06f02c1b68..945add47b9655 100644 --- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SpaEnvironment.kt +++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SpaEnvironment.kt @@ -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 diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/slice/SettingsSliceDataRepository.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/slice/SettingsSliceDataRepository.kt index d8d23788c204b..14855a8aed599 100644 --- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/slice/SettingsSliceDataRepository.kt +++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/slice/SettingsSliceDataRepository.kt @@ -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 private val sliceDataMap: MutableMap = 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) }