diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt index c961422086f81..f9a154bef82cd 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt @@ -16,6 +16,7 @@ package com.android.systemui.statusbar.pipeline.dagger +import com.android.systemui.CoreStartable import com.android.systemui.dagger.SysUISingleton import com.android.systemui.log.table.TableLogBuffer import com.android.systemui.log.table.TableLogBufferFactory @@ -27,6 +28,7 @@ import com.android.systemui.statusbar.pipeline.mobile.data.repository.UserSetupR import com.android.systemui.statusbar.pipeline.mobile.data.repository.UserSetupRepositoryImpl import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.MobileIconsInteractor import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.MobileIconsInteractorImpl +import com.android.systemui.statusbar.pipeline.mobile.ui.MobileUiAdapter import com.android.systemui.statusbar.pipeline.mobile.util.MobileMappingsProxy import com.android.systemui.statusbar.pipeline.mobile.util.MobileMappingsProxyImpl import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepository @@ -36,6 +38,8 @@ import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiReposito import dagger.Binds import dagger.Module import dagger.Provides +import dagger.multibindings.ClassKey +import dagger.multibindings.IntoMap @Module abstract class StatusBarPipelineModule { @@ -45,23 +49,25 @@ abstract class StatusBarPipelineModule { @Binds abstract fun connectivityRepository(impl: ConnectivityRepositoryImpl): ConnectivityRepository - @Binds - abstract fun wifiRepository(impl: WifiRepositoryImpl): WifiRepository + @Binds abstract fun wifiRepository(impl: WifiRepositoryImpl): WifiRepository @Binds abstract fun mobileConnectionsRepository( impl: MobileConnectionsRepositoryImpl ): MobileConnectionsRepository - @Binds - abstract fun userSetupRepository(impl: UserSetupRepositoryImpl): UserSetupRepository + @Binds abstract fun userSetupRepository(impl: UserSetupRepositoryImpl): UserSetupRepository - @Binds - abstract fun mobileMappingsProxy(impl: MobileMappingsProxyImpl): MobileMappingsProxy + @Binds abstract fun mobileMappingsProxy(impl: MobileMappingsProxyImpl): MobileMappingsProxy @Binds abstract fun mobileIconsInteractor(impl: MobileIconsInteractorImpl): MobileIconsInteractor + @Binds + @IntoMap + @ClassKey(MobileUiAdapter::class) + abstract fun bindFeature(impl: MobileUiAdapter): CoreStartable + @Module companion object { @JvmStatic diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/MobileUiAdapter.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/MobileUiAdapter.kt index c7e0ce173ece1..d9487bf922609 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/MobileUiAdapter.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/MobileUiAdapter.kt @@ -16,6 +16,7 @@ package com.android.systemui.statusbar.pipeline.mobile.ui +import com.android.systemui.CoreStartable import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.statusbar.phone.StatusBarIconController @@ -29,9 +30,10 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.mapLatest -import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.stateIn +import kotlinx.coroutines.launch /** * This class is intended to provide a context to collect on the @@ -50,9 +52,9 @@ constructor( interactor: MobileIconsInteractor, private val iconController: StatusBarIconController, private val iconsViewModelFactory: MobileIconsViewModel.Factory, - @Application scope: CoroutineScope, + @Application private val scope: CoroutineScope, private val statusBarPipelineFlags: StatusBarPipelineFlags, -) { +) : CoreStartable { private val mobileSubIds: Flow> = interactor.filteredSubscriptions.mapLatest { infos -> infos.map { subscriptionInfo -> subscriptionInfo.subscriptionId } @@ -66,18 +68,19 @@ constructor( * NOTE: this should go away as the view presenter learns more about this data pipeline */ private val mobileSubIdsState: StateFlow> = - mobileSubIds - .onEach { - // Only notify the icon controller if we want to *render* the new icons. - // Note that this flow may still run if - // [statusBarPipelineFlags.runNewMobileIconsBackend] is true because we may want to - // get the logging data without rendering. - if (statusBarPipelineFlags.useNewMobileIcons()) { - // Notify the icon controller here so that it knows to add icons - iconController.setNewMobileIconSubIds(it) - } + mobileSubIds.stateIn(scope, SharingStarted.WhileSubscribed(), listOf()) + + override fun start() { + // Only notify the icon controller if we want to *render* the new icons. + // Note that this flow may still run if + // [statusBarPipelineFlags.runNewMobileIconsBackend] is true because we may want to + // get the logging data without rendering. + if (statusBarPipelineFlags.useNewMobileIcons()) { + scope.launch { + mobileSubIds.collectLatest { iconController.setNewMobileIconSubIds(it) } } - .stateIn(scope, SharingStarted.WhileSubscribed(), listOf()) + } + } /** * Create a MobileIconsViewModel for a given [IconManager], and bind it to to the manager's