Loading packages/SystemUI/src/com/android/systemui/qs/tiles/base/viewmodel/QSTileViewModelFactory.kt +12 −5 Original line number Original line Diff line number Diff line Loading @@ -26,6 +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.interactor.QSTileUserActionInteractor import com.android.systemui.qs.tiles.base.logging.QSTileLogger import com.android.systemui.qs.tiles.base.logging.QSTileLogger import com.android.systemui.qs.tiles.impl.di.QSTileComponent 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.QSTileConfigProvider import com.android.systemui.qs.tiles.viewmodel.QSTileState import com.android.systemui.qs.tiles.viewmodel.QSTileState import com.android.systemui.user.data.repository.UserRepository import com.android.systemui.user.data.repository.UserRepository Loading Loading @@ -60,12 +61,17 @@ sealed interface QSTileViewModelFactory<T> { ) : QSTileViewModelFactory<T> { ) : QSTileViewModelFactory<T> { /** /** * Creates [QSTileViewModelImpl] based on the interactors obtained from [component]. * Creates [QSTileViewModelImpl] based on the interactors obtained from [QSTileComponent]. * Reference of that [component] is then stored along the view model. * Reference of that [QSTileComponent] is then stored along the view model. */ */ fun create(tileSpec: TileSpec, component: QSTileComponent<T>): QSTileViewModelImpl<T> = fun create( QSTileViewModelImpl( tileSpec: TileSpec, qsTileConfigProvider.getConfig(tileSpec.spec), componentFactory: (config: QSTileConfig) -> QSTileComponent<T> ): QSTileViewModelImpl<T> { val config = qsTileConfigProvider.getConfig(tileSpec.spec) val component = componentFactory(config) return QSTileViewModelImpl( config, component::userActionInteractor, component::userActionInteractor, component::dataInteractor, component::dataInteractor, component::dataToStateMapper, component::dataToStateMapper, Loading @@ -78,6 +84,7 @@ sealed interface QSTileViewModelFactory<T> { backgroundDispatcher, backgroundDispatcher, ) ) } } } /** /** * This factory passes by necessary implementations to the [QSTileViewModelImpl]. This is a * This factory passes by necessary implementations to the [QSTileViewModelImpl]. This is a Loading packages/SystemUI/src/com/android/systemui/qs/tiles/di/NewQSTileFactory.kt +24 −6 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,11 @@ package com.android.systemui.qs.tiles.di import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.SysUISingleton import com.android.systemui.plugins.qs.QSFactory import com.android.systemui.plugins.qs.QSFactory import com.android.systemui.plugins.qs.QSTile import com.android.systemui.plugins.qs.QSTile import com.android.systemui.qs.pipeline.shared.TileSpec import com.android.systemui.qs.tiles.base.viewmodel.QSTileViewModelFactory import com.android.systemui.qs.tiles.impl.custom.di.CustomTileComponent import com.android.systemui.qs.tiles.impl.custom.di.QSTileConfigModule import com.android.systemui.qs.tiles.impl.custom.domain.entity.CustomTileDataModel import com.android.systemui.qs.tiles.viewmodel.QSTileConfigProvider import com.android.systemui.qs.tiles.viewmodel.QSTileConfigProvider import com.android.systemui.qs.tiles.viewmodel.QSTileViewModel import com.android.systemui.qs.tiles.viewmodel.QSTileViewModel import com.android.systemui.qs.tiles.viewmodel.QSTileViewModelAdapter import com.android.systemui.qs.tiles.viewmodel.QSTileViewModelAdapter Loading @@ -34,18 +39,31 @@ constructor( private val adapterFactory: QSTileViewModelAdapter.Factory, private val adapterFactory: QSTileViewModelAdapter.Factory, private val tileMap: private val tileMap: Map<String, @JvmSuppressWildcards Provider<@JvmSuppressWildcards QSTileViewModel>>, Map<String, @JvmSuppressWildcards Provider<@JvmSuppressWildcards QSTileViewModel>>, private val customTileComponentBuilder: CustomTileComponent.Builder, private val customTileViewModelFactory: QSTileViewModelFactory.Component<CustomTileDataModel>, ) : QSFactory { ) : QSFactory { init { init { for (viewModelTileSpec in tileMap.keys) { for (viewModelTileSpec in tileMap.keys) { // throws an exception when there is no config for a tileSpec of an injected viewModel require(qsTileConfigProvider.hasConfig(viewModelTileSpec)) { qsTileConfigProvider.getConfig(viewModelTileSpec) "No config for $viewModelTileSpec" } } } } } override fun createTile(tileSpec: String): QSTile? { val viewModel: QSTileViewModel = when (val spec = TileSpec.create(tileSpec)) { is TileSpec.CustomTileSpec -> createCustomTileViewModel(spec) is TileSpec.PlatformTileSpec -> tileMap[tileSpec]?.get() is TileSpec.Invalid -> null } ?: return null return adapterFactory.create(viewModel) } override fun createTile(tileSpec: String): QSTile? = private fun createCustomTileViewModel(spec: TileSpec.CustomTileSpec): QSTileViewModel = tileMap[tileSpec]?.let { customTileViewModelFactory.create(spec) { config -> val tile = it.get() customTileComponentBuilder.qsTileConfigModule(QSTileConfigModule(config)).build() adapterFactory.create(tile) } } } } packages/SystemUI/src/com/android/systemui/qs/tiles/impl/custom/CustomTileInteractor.kt +3 −2 Original line number Original line Diff line number Diff line Loading @@ -19,17 +19,18 @@ package com.android.systemui.qs.tiles.impl.custom import android.os.UserHandle import android.os.UserHandle import com.android.systemui.qs.tiles.base.interactor.DataUpdateTrigger import com.android.systemui.qs.tiles.base.interactor.DataUpdateTrigger import com.android.systemui.qs.tiles.base.interactor.QSTileDataInteractor import com.android.systemui.qs.tiles.base.interactor.QSTileDataInteractor import com.android.systemui.qs.tiles.impl.custom.domain.entity.CustomTileDataModel import com.android.systemui.qs.tiles.impl.di.QSTileScope import com.android.systemui.qs.tiles.impl.di.QSTileScope import javax.inject.Inject import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow @QSTileScope @QSTileScope class CustomTileInteractor @Inject constructor() : QSTileDataInteractor<CustomTileData> { class CustomTileInteractor @Inject constructor() : QSTileDataInteractor<CustomTileDataModel> { override fun tileData( override fun tileData( user: UserHandle, user: UserHandle, triggers: Flow<DataUpdateTrigger> triggers: Flow<DataUpdateTrigger> ): Flow<CustomTileData> { ): Flow<CustomTileDataModel> { TODO("Not yet implemented") TODO("Not yet implemented") } } Loading packages/SystemUI/src/com/android/systemui/qs/tiles/impl/custom/CustomTileMapper.kt +3 −2 Original line number Original line Diff line number Diff line Loading @@ -17,15 +17,16 @@ package com.android.systemui.qs.tiles.impl.custom package com.android.systemui.qs.tiles.impl.custom import com.android.systemui.qs.tiles.base.interactor.QSTileDataToStateMapper import com.android.systemui.qs.tiles.base.interactor.QSTileDataToStateMapper import com.android.systemui.qs.tiles.impl.custom.domain.entity.CustomTileDataModel import com.android.systemui.qs.tiles.impl.di.QSTileScope import com.android.systemui.qs.tiles.impl.di.QSTileScope import com.android.systemui.qs.tiles.viewmodel.QSTileConfig import com.android.systemui.qs.tiles.viewmodel.QSTileConfig import com.android.systemui.qs.tiles.viewmodel.QSTileState import com.android.systemui.qs.tiles.viewmodel.QSTileState import javax.inject.Inject import javax.inject.Inject @QSTileScope @QSTileScope class CustomTileMapper @Inject constructor() : QSTileDataToStateMapper<CustomTileData> { class CustomTileMapper @Inject constructor() : QSTileDataToStateMapper<CustomTileDataModel> { override fun map(config: QSTileConfig, data: CustomTileData): QSTileState { override fun map(config: QSTileConfig, data: CustomTileDataModel): QSTileState { TODO("Not yet implemented") TODO("Not yet implemented") } } } } packages/SystemUI/src/com/android/systemui/qs/tiles/impl/custom/CustomTileUserActionInteractor.kt +3 −2 Original line number Original line Diff line number Diff line Loading @@ -18,14 +18,15 @@ package com.android.systemui.qs.tiles.impl.custom import com.android.systemui.qs.tiles.base.interactor.QSTileInput import com.android.systemui.qs.tiles.base.interactor.QSTileInput import com.android.systemui.qs.tiles.base.interactor.QSTileUserActionInteractor import com.android.systemui.qs.tiles.base.interactor.QSTileUserActionInteractor import com.android.systemui.qs.tiles.impl.custom.domain.entity.CustomTileDataModel import com.android.systemui.qs.tiles.impl.di.QSTileScope import com.android.systemui.qs.tiles.impl.di.QSTileScope import javax.inject.Inject import javax.inject.Inject @QSTileScope @QSTileScope class CustomTileUserActionInteractor @Inject constructor() : class CustomTileUserActionInteractor @Inject constructor() : QSTileUserActionInteractor<CustomTileData> { QSTileUserActionInteractor<CustomTileDataModel> { override suspend fun handleInput(input: QSTileInput<CustomTileData>) { override suspend fun handleInput(input: QSTileInput<CustomTileDataModel>) { TODO("Not yet implemented") TODO("Not yet implemented") } } } } Loading
packages/SystemUI/src/com/android/systemui/qs/tiles/base/viewmodel/QSTileViewModelFactory.kt +12 −5 Original line number Original line Diff line number Diff line Loading @@ -26,6 +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.interactor.QSTileUserActionInteractor import com.android.systemui.qs.tiles.base.logging.QSTileLogger import com.android.systemui.qs.tiles.base.logging.QSTileLogger import com.android.systemui.qs.tiles.impl.di.QSTileComponent 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.QSTileConfigProvider import com.android.systemui.qs.tiles.viewmodel.QSTileState import com.android.systemui.qs.tiles.viewmodel.QSTileState import com.android.systemui.user.data.repository.UserRepository import com.android.systemui.user.data.repository.UserRepository Loading Loading @@ -60,12 +61,17 @@ sealed interface QSTileViewModelFactory<T> { ) : QSTileViewModelFactory<T> { ) : QSTileViewModelFactory<T> { /** /** * Creates [QSTileViewModelImpl] based on the interactors obtained from [component]. * Creates [QSTileViewModelImpl] based on the interactors obtained from [QSTileComponent]. * Reference of that [component] is then stored along the view model. * Reference of that [QSTileComponent] is then stored along the view model. */ */ fun create(tileSpec: TileSpec, component: QSTileComponent<T>): QSTileViewModelImpl<T> = fun create( QSTileViewModelImpl( tileSpec: TileSpec, qsTileConfigProvider.getConfig(tileSpec.spec), componentFactory: (config: QSTileConfig) -> QSTileComponent<T> ): QSTileViewModelImpl<T> { val config = qsTileConfigProvider.getConfig(tileSpec.spec) val component = componentFactory(config) return QSTileViewModelImpl( config, component::userActionInteractor, component::userActionInteractor, component::dataInteractor, component::dataInteractor, component::dataToStateMapper, component::dataToStateMapper, Loading @@ -78,6 +84,7 @@ sealed interface QSTileViewModelFactory<T> { backgroundDispatcher, backgroundDispatcher, ) ) } } } /** /** * This factory passes by necessary implementations to the [QSTileViewModelImpl]. This is a * This factory passes by necessary implementations to the [QSTileViewModelImpl]. This is a Loading
packages/SystemUI/src/com/android/systemui/qs/tiles/di/NewQSTileFactory.kt +24 −6 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,11 @@ package com.android.systemui.qs.tiles.di import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.SysUISingleton import com.android.systemui.plugins.qs.QSFactory import com.android.systemui.plugins.qs.QSFactory import com.android.systemui.plugins.qs.QSTile import com.android.systemui.plugins.qs.QSTile import com.android.systemui.qs.pipeline.shared.TileSpec import com.android.systemui.qs.tiles.base.viewmodel.QSTileViewModelFactory import com.android.systemui.qs.tiles.impl.custom.di.CustomTileComponent import com.android.systemui.qs.tiles.impl.custom.di.QSTileConfigModule import com.android.systemui.qs.tiles.impl.custom.domain.entity.CustomTileDataModel import com.android.systemui.qs.tiles.viewmodel.QSTileConfigProvider import com.android.systemui.qs.tiles.viewmodel.QSTileConfigProvider import com.android.systemui.qs.tiles.viewmodel.QSTileViewModel import com.android.systemui.qs.tiles.viewmodel.QSTileViewModel import com.android.systemui.qs.tiles.viewmodel.QSTileViewModelAdapter import com.android.systemui.qs.tiles.viewmodel.QSTileViewModelAdapter Loading @@ -34,18 +39,31 @@ constructor( private val adapterFactory: QSTileViewModelAdapter.Factory, private val adapterFactory: QSTileViewModelAdapter.Factory, private val tileMap: private val tileMap: Map<String, @JvmSuppressWildcards Provider<@JvmSuppressWildcards QSTileViewModel>>, Map<String, @JvmSuppressWildcards Provider<@JvmSuppressWildcards QSTileViewModel>>, private val customTileComponentBuilder: CustomTileComponent.Builder, private val customTileViewModelFactory: QSTileViewModelFactory.Component<CustomTileDataModel>, ) : QSFactory { ) : QSFactory { init { init { for (viewModelTileSpec in tileMap.keys) { for (viewModelTileSpec in tileMap.keys) { // throws an exception when there is no config for a tileSpec of an injected viewModel require(qsTileConfigProvider.hasConfig(viewModelTileSpec)) { qsTileConfigProvider.getConfig(viewModelTileSpec) "No config for $viewModelTileSpec" } } } } } override fun createTile(tileSpec: String): QSTile? { val viewModel: QSTileViewModel = when (val spec = TileSpec.create(tileSpec)) { is TileSpec.CustomTileSpec -> createCustomTileViewModel(spec) is TileSpec.PlatformTileSpec -> tileMap[tileSpec]?.get() is TileSpec.Invalid -> null } ?: return null return adapterFactory.create(viewModel) } override fun createTile(tileSpec: String): QSTile? = private fun createCustomTileViewModel(spec: TileSpec.CustomTileSpec): QSTileViewModel = tileMap[tileSpec]?.let { customTileViewModelFactory.create(spec) { config -> val tile = it.get() customTileComponentBuilder.qsTileConfigModule(QSTileConfigModule(config)).build() adapterFactory.create(tile) } } } }
packages/SystemUI/src/com/android/systemui/qs/tiles/impl/custom/CustomTileInteractor.kt +3 −2 Original line number Original line Diff line number Diff line Loading @@ -19,17 +19,18 @@ package com.android.systemui.qs.tiles.impl.custom import android.os.UserHandle import android.os.UserHandle import com.android.systemui.qs.tiles.base.interactor.DataUpdateTrigger import com.android.systemui.qs.tiles.base.interactor.DataUpdateTrigger import com.android.systemui.qs.tiles.base.interactor.QSTileDataInteractor import com.android.systemui.qs.tiles.base.interactor.QSTileDataInteractor import com.android.systemui.qs.tiles.impl.custom.domain.entity.CustomTileDataModel import com.android.systemui.qs.tiles.impl.di.QSTileScope import com.android.systemui.qs.tiles.impl.di.QSTileScope import javax.inject.Inject import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow @QSTileScope @QSTileScope class CustomTileInteractor @Inject constructor() : QSTileDataInteractor<CustomTileData> { class CustomTileInteractor @Inject constructor() : QSTileDataInteractor<CustomTileDataModel> { override fun tileData( override fun tileData( user: UserHandle, user: UserHandle, triggers: Flow<DataUpdateTrigger> triggers: Flow<DataUpdateTrigger> ): Flow<CustomTileData> { ): Flow<CustomTileDataModel> { TODO("Not yet implemented") TODO("Not yet implemented") } } Loading
packages/SystemUI/src/com/android/systemui/qs/tiles/impl/custom/CustomTileMapper.kt +3 −2 Original line number Original line Diff line number Diff line Loading @@ -17,15 +17,16 @@ package com.android.systemui.qs.tiles.impl.custom package com.android.systemui.qs.tiles.impl.custom import com.android.systemui.qs.tiles.base.interactor.QSTileDataToStateMapper import com.android.systemui.qs.tiles.base.interactor.QSTileDataToStateMapper import com.android.systemui.qs.tiles.impl.custom.domain.entity.CustomTileDataModel import com.android.systemui.qs.tiles.impl.di.QSTileScope import com.android.systemui.qs.tiles.impl.di.QSTileScope import com.android.systemui.qs.tiles.viewmodel.QSTileConfig import com.android.systemui.qs.tiles.viewmodel.QSTileConfig import com.android.systemui.qs.tiles.viewmodel.QSTileState import com.android.systemui.qs.tiles.viewmodel.QSTileState import javax.inject.Inject import javax.inject.Inject @QSTileScope @QSTileScope class CustomTileMapper @Inject constructor() : QSTileDataToStateMapper<CustomTileData> { class CustomTileMapper @Inject constructor() : QSTileDataToStateMapper<CustomTileDataModel> { override fun map(config: QSTileConfig, data: CustomTileData): QSTileState { override fun map(config: QSTileConfig, data: CustomTileDataModel): QSTileState { TODO("Not yet implemented") TODO("Not yet implemented") } } } }
packages/SystemUI/src/com/android/systemui/qs/tiles/impl/custom/CustomTileUserActionInteractor.kt +3 −2 Original line number Original line Diff line number Diff line Loading @@ -18,14 +18,15 @@ package com.android.systemui.qs.tiles.impl.custom import com.android.systemui.qs.tiles.base.interactor.QSTileInput import com.android.systemui.qs.tiles.base.interactor.QSTileInput import com.android.systemui.qs.tiles.base.interactor.QSTileUserActionInteractor import com.android.systemui.qs.tiles.base.interactor.QSTileUserActionInteractor import com.android.systemui.qs.tiles.impl.custom.domain.entity.CustomTileDataModel import com.android.systemui.qs.tiles.impl.di.QSTileScope import com.android.systemui.qs.tiles.impl.di.QSTileScope import javax.inject.Inject import javax.inject.Inject @QSTileScope @QSTileScope class CustomTileUserActionInteractor @Inject constructor() : class CustomTileUserActionInteractor @Inject constructor() : QSTileUserActionInteractor<CustomTileData> { QSTileUserActionInteractor<CustomTileDataModel> { override suspend fun handleInput(input: QSTileInput<CustomTileData>) { override suspend fun handleInput(input: QSTileInput<CustomTileDataModel>) { TODO("Not yet implemented") TODO("Not yet implemented") } } } }