Loading packages/SystemUI/src/com/android/systemui/qs/dagger/QSModule.java +0 −8 Original line number Diff line number Diff line Loading @@ -32,7 +32,6 @@ import com.android.systemui.qs.external.QSExternalModule; import com.android.systemui.qs.pipeline.dagger.QSPipelineModule; import com.android.systemui.qs.tileimpl.QSTileImpl; import com.android.systemui.qs.tiles.di.QSTilesModule; import com.android.systemui.qs.tiles.viewmodel.QSTileViewModel; import com.android.systemui.statusbar.phone.AutoTileManager; import com.android.systemui.statusbar.phone.ManagedProfileController; import com.android.systemui.statusbar.policy.CastController; Loading Loading @@ -73,13 +72,6 @@ public interface QSModule { @Multibinds Map<String, QSTileImpl<?>> tileMap(); /** * A map of internal QS tile ViewModels. Ensures that this can be injected even if * it is empty */ @Multibinds Map<String, QSTileViewModel> tileViewModelMap(); @Provides @SysUISingleton static AutoTileManager provideAutoTileManager( Loading packages/SystemUI/src/com/android/systemui/qs/tiles/base/viewmodel/QSTileViewModelFactory.kt +9 −6 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.systemui.qs.tiles.base.viewmodel import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.plugins.FalsingManager import com.android.systemui.qs.pipeline.shared.TileSpec import com.android.systemui.qs.tiles.base.analytics.QSTileAnalytics import com.android.systemui.qs.tiles.base.interactor.DisabledByPolicyInteractor import com.android.systemui.qs.tiles.base.interactor.QSTileDataInteractor Loading @@ -25,7 +26,7 @@ import com.android.systemui.qs.tiles.base.interactor.QSTileDataToStateMapper import com.android.systemui.qs.tiles.base.interactor.QSTileUserActionInteractor import com.android.systemui.qs.tiles.base.logging.QSTileLogger import com.android.systemui.qs.tiles.impl.di.QSTileComponent import com.android.systemui.qs.tiles.viewmodel.QSTileConfig import com.android.systemui.qs.tiles.viewmodel.QSTileConfigProvider import com.android.systemui.qs.tiles.viewmodel.QSTileState import com.android.systemui.user.data.repository.UserRepository import com.android.systemui.util.time.SystemClock Loading Loading @@ -53,6 +54,7 @@ sealed interface QSTileViewModelFactory<T> { private val falsingManager: FalsingManager, private val qsTileAnalytics: QSTileAnalytics, private val qsTileLogger: QSTileLogger, private val qsTileConfigProvider: QSTileConfigProvider, private val systemClock: SystemClock, @Background private val backgroundDispatcher: CoroutineDispatcher, ) : QSTileViewModelFactory<T> { Loading @@ -61,9 +63,9 @@ sealed interface QSTileViewModelFactory<T> { * Creates [QSTileViewModelImpl] based on the interactors obtained from [component]. * Reference of that [component] is then stored along the view model. */ fun create(component: QSTileComponent<T>): QSTileViewModelImpl<T> = fun create(tileSpec: TileSpec, component: QSTileComponent<T>): QSTileViewModelImpl<T> = QSTileViewModelImpl( component::config, qsTileConfigProvider.getConfig(tileSpec.spec), component::userActionInteractor, component::dataInteractor, component::dataToStateMapper, Loading @@ -89,12 +91,13 @@ sealed interface QSTileViewModelFactory<T> { private val falsingManager: FalsingManager, private val qsTileAnalytics: QSTileAnalytics, private val qsTileLogger: QSTileLogger, private val qsTileConfigProvider: QSTileConfigProvider, private val systemClock: SystemClock, @Background private val backgroundDispatcher: CoroutineDispatcher, ) : QSTileViewModelFactory<T> { /** * @param config contains all the static information (like TileSpec) about the tile. * @param tileSpec of the created tile. * @param userActionInteractor encapsulates user input processing logic. Use it to start * activities, show dialogs or otherwise update the tile state. * @param tileDataInteractor provides [DATA_TYPE] and its availability. Loading @@ -103,13 +106,13 @@ sealed interface QSTileViewModelFactory<T> { * operations there. */ fun create( config: QSTileConfig, tileSpec: TileSpec, userActionInteractor: QSTileUserActionInteractor<T>, tileDataInteractor: QSTileDataInteractor<T>, mapper: QSTileDataToStateMapper<T>, ): QSTileViewModelImpl<T> = QSTileViewModelImpl( { config }, qsTileConfigProvider.getConfig(tileSpec.spec), { userActionInteractor }, { tileDataInteractor }, { mapper }, Loading packages/SystemUI/src/com/android/systemui/qs/tiles/base/viewmodel/QSTileViewModelImpl.kt +1 −3 Original line number Diff line number Diff line Loading @@ -67,7 +67,7 @@ import kotlinx.coroutines.flow.stateIn */ @OptIn(ExperimentalCoroutinesApi::class) class QSTileViewModelImpl<DATA_TYPE>( val tileConfig: () -> QSTileConfig, override val config: QSTileConfig, private val userActionInteractor: () -> QSTileUserActionInteractor<DATA_TYPE>, private val tileDataInteractor: () -> QSTileDataInteractor<DATA_TYPE>, private val mapper: () -> QSTileDataToStateMapper<DATA_TYPE>, Loading @@ -92,8 +92,6 @@ class QSTileViewModelImpl<DATA_TYPE>( private val tileData: SharedFlow<DATA_TYPE> = createTileDataFlow() override val config get() = tileConfig() override val state: SharedFlow<QSTileState> = tileData .map { data -> Loading packages/SystemUI/src/com/android/systemui/qs/tiles/di/NewQSTileFactory.kt +9 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.systemui.qs.tiles.di import com.android.systemui.dagger.SysUISingleton import com.android.systemui.plugins.qs.QSFactory import com.android.systemui.plugins.qs.QSTile import com.android.systemui.qs.tiles.viewmodel.QSTileConfigProvider import com.android.systemui.qs.tiles.viewmodel.QSTileViewModel import com.android.systemui.qs.tiles.viewmodel.QSTileViewModelAdapter import javax.inject.Inject Loading @@ -29,11 +30,19 @@ import javax.inject.Provider class NewQSTileFactory @Inject constructor( qsTileConfigProvider: QSTileConfigProvider, private val adapterFactory: QSTileViewModelAdapter.Factory, private val tileMap: Map<String, @JvmSuppressWildcards Provider<@JvmSuppressWildcards QSTileViewModel>>, ) : QSFactory { init { for (viewModelTileSpec in tileMap.keys) { // throws an exception when there is no config for a tileSpec of an injected viewModel qsTileConfigProvider.getConfig(viewModelTileSpec) } } override fun createTile(tileSpec: String): QSTile? = tileMap[tileSpec]?.let { val tile = it.get() Loading packages/SystemUI/src/com/android/systemui/qs/tiles/di/QSTilesModule.kt +20 −1 Original line number Diff line number Diff line Loading @@ -17,7 +17,13 @@ package com.android.systemui.qs.tiles.di import com.android.systemui.qs.tiles.impl.custom.di.CustomTileComponent import com.android.systemui.qs.tiles.viewmodel.QSTileConfig import com.android.systemui.qs.tiles.viewmodel.QSTileConfigProvider import com.android.systemui.qs.tiles.viewmodel.QSTileConfigProviderImpl import com.android.systemui.qs.tiles.viewmodel.QSTileViewModel import dagger.Binds import dagger.Module import dagger.multibindings.Multibinds /** Module listing subcomponents */ @Module( Loading @@ -26,4 +32,17 @@ import dagger.Module CustomTileComponent::class, ] ) interface QSTilesModule interface QSTilesModule { /** * A map of internal QS tile ViewModels. Ensures that this can be injected even if it is empty */ @Multibinds fun tileViewModelConfigs(): Map<String, QSTileConfig> /** * A map of internal QS tile ViewModels. Ensures that this can be injected even if it is empty */ @Multibinds fun tileViewModelMap(): Map<String, QSTileViewModel> @Binds fun bindQSTileConfigProvider(impl: QSTileConfigProviderImpl): QSTileConfigProvider } Loading
packages/SystemUI/src/com/android/systemui/qs/dagger/QSModule.java +0 −8 Original line number Diff line number Diff line Loading @@ -32,7 +32,6 @@ import com.android.systemui.qs.external.QSExternalModule; import com.android.systemui.qs.pipeline.dagger.QSPipelineModule; import com.android.systemui.qs.tileimpl.QSTileImpl; import com.android.systemui.qs.tiles.di.QSTilesModule; import com.android.systemui.qs.tiles.viewmodel.QSTileViewModel; import com.android.systemui.statusbar.phone.AutoTileManager; import com.android.systemui.statusbar.phone.ManagedProfileController; import com.android.systemui.statusbar.policy.CastController; Loading Loading @@ -73,13 +72,6 @@ public interface QSModule { @Multibinds Map<String, QSTileImpl<?>> tileMap(); /** * A map of internal QS tile ViewModels. Ensures that this can be injected even if * it is empty */ @Multibinds Map<String, QSTileViewModel> tileViewModelMap(); @Provides @SysUISingleton static AutoTileManager provideAutoTileManager( Loading
packages/SystemUI/src/com/android/systemui/qs/tiles/base/viewmodel/QSTileViewModelFactory.kt +9 −6 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.systemui.qs.tiles.base.viewmodel import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.plugins.FalsingManager import com.android.systemui.qs.pipeline.shared.TileSpec import com.android.systemui.qs.tiles.base.analytics.QSTileAnalytics import com.android.systemui.qs.tiles.base.interactor.DisabledByPolicyInteractor import com.android.systemui.qs.tiles.base.interactor.QSTileDataInteractor Loading @@ -25,7 +26,7 @@ import com.android.systemui.qs.tiles.base.interactor.QSTileDataToStateMapper import com.android.systemui.qs.tiles.base.interactor.QSTileUserActionInteractor import com.android.systemui.qs.tiles.base.logging.QSTileLogger import com.android.systemui.qs.tiles.impl.di.QSTileComponent import com.android.systemui.qs.tiles.viewmodel.QSTileConfig import com.android.systemui.qs.tiles.viewmodel.QSTileConfigProvider import com.android.systemui.qs.tiles.viewmodel.QSTileState import com.android.systemui.user.data.repository.UserRepository import com.android.systemui.util.time.SystemClock Loading Loading @@ -53,6 +54,7 @@ sealed interface QSTileViewModelFactory<T> { private val falsingManager: FalsingManager, private val qsTileAnalytics: QSTileAnalytics, private val qsTileLogger: QSTileLogger, private val qsTileConfigProvider: QSTileConfigProvider, private val systemClock: SystemClock, @Background private val backgroundDispatcher: CoroutineDispatcher, ) : QSTileViewModelFactory<T> { Loading @@ -61,9 +63,9 @@ sealed interface QSTileViewModelFactory<T> { * Creates [QSTileViewModelImpl] based on the interactors obtained from [component]. * Reference of that [component] is then stored along the view model. */ fun create(component: QSTileComponent<T>): QSTileViewModelImpl<T> = fun create(tileSpec: TileSpec, component: QSTileComponent<T>): QSTileViewModelImpl<T> = QSTileViewModelImpl( component::config, qsTileConfigProvider.getConfig(tileSpec.spec), component::userActionInteractor, component::dataInteractor, component::dataToStateMapper, Loading @@ -89,12 +91,13 @@ sealed interface QSTileViewModelFactory<T> { private val falsingManager: FalsingManager, private val qsTileAnalytics: QSTileAnalytics, private val qsTileLogger: QSTileLogger, private val qsTileConfigProvider: QSTileConfigProvider, private val systemClock: SystemClock, @Background private val backgroundDispatcher: CoroutineDispatcher, ) : QSTileViewModelFactory<T> { /** * @param config contains all the static information (like TileSpec) about the tile. * @param tileSpec of the created tile. * @param userActionInteractor encapsulates user input processing logic. Use it to start * activities, show dialogs or otherwise update the tile state. * @param tileDataInteractor provides [DATA_TYPE] and its availability. Loading @@ -103,13 +106,13 @@ sealed interface QSTileViewModelFactory<T> { * operations there. */ fun create( config: QSTileConfig, tileSpec: TileSpec, userActionInteractor: QSTileUserActionInteractor<T>, tileDataInteractor: QSTileDataInteractor<T>, mapper: QSTileDataToStateMapper<T>, ): QSTileViewModelImpl<T> = QSTileViewModelImpl( { config }, qsTileConfigProvider.getConfig(tileSpec.spec), { userActionInteractor }, { tileDataInteractor }, { mapper }, Loading
packages/SystemUI/src/com/android/systemui/qs/tiles/base/viewmodel/QSTileViewModelImpl.kt +1 −3 Original line number Diff line number Diff line Loading @@ -67,7 +67,7 @@ import kotlinx.coroutines.flow.stateIn */ @OptIn(ExperimentalCoroutinesApi::class) class QSTileViewModelImpl<DATA_TYPE>( val tileConfig: () -> QSTileConfig, override val config: QSTileConfig, private val userActionInteractor: () -> QSTileUserActionInteractor<DATA_TYPE>, private val tileDataInteractor: () -> QSTileDataInteractor<DATA_TYPE>, private val mapper: () -> QSTileDataToStateMapper<DATA_TYPE>, Loading @@ -92,8 +92,6 @@ class QSTileViewModelImpl<DATA_TYPE>( private val tileData: SharedFlow<DATA_TYPE> = createTileDataFlow() override val config get() = tileConfig() override val state: SharedFlow<QSTileState> = tileData .map { data -> Loading
packages/SystemUI/src/com/android/systemui/qs/tiles/di/NewQSTileFactory.kt +9 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.systemui.qs.tiles.di import com.android.systemui.dagger.SysUISingleton import com.android.systemui.plugins.qs.QSFactory import com.android.systemui.plugins.qs.QSTile import com.android.systemui.qs.tiles.viewmodel.QSTileConfigProvider import com.android.systemui.qs.tiles.viewmodel.QSTileViewModel import com.android.systemui.qs.tiles.viewmodel.QSTileViewModelAdapter import javax.inject.Inject Loading @@ -29,11 +30,19 @@ import javax.inject.Provider class NewQSTileFactory @Inject constructor( qsTileConfigProvider: QSTileConfigProvider, private val adapterFactory: QSTileViewModelAdapter.Factory, private val tileMap: Map<String, @JvmSuppressWildcards Provider<@JvmSuppressWildcards QSTileViewModel>>, ) : QSFactory { init { for (viewModelTileSpec in tileMap.keys) { // throws an exception when there is no config for a tileSpec of an injected viewModel qsTileConfigProvider.getConfig(viewModelTileSpec) } } override fun createTile(tileSpec: String): QSTile? = tileMap[tileSpec]?.let { val tile = it.get() Loading
packages/SystemUI/src/com/android/systemui/qs/tiles/di/QSTilesModule.kt +20 −1 Original line number Diff line number Diff line Loading @@ -17,7 +17,13 @@ package com.android.systemui.qs.tiles.di import com.android.systemui.qs.tiles.impl.custom.di.CustomTileComponent import com.android.systemui.qs.tiles.viewmodel.QSTileConfig import com.android.systemui.qs.tiles.viewmodel.QSTileConfigProvider import com.android.systemui.qs.tiles.viewmodel.QSTileConfigProviderImpl import com.android.systemui.qs.tiles.viewmodel.QSTileViewModel import dagger.Binds import dagger.Module import dagger.multibindings.Multibinds /** Module listing subcomponents */ @Module( Loading @@ -26,4 +32,17 @@ import dagger.Module CustomTileComponent::class, ] ) interface QSTilesModule interface QSTilesModule { /** * A map of internal QS tile ViewModels. Ensures that this can be injected even if it is empty */ @Multibinds fun tileViewModelConfigs(): Map<String, QSTileConfig> /** * A map of internal QS tile ViewModels. Ensures that this can be injected even if it is empty */ @Multibinds fun tileViewModelMap(): Map<String, QSTileViewModel> @Binds fun bindQSTileConfigProvider(impl: QSTileConfigProviderImpl): QSTileConfigProvider }