xref: /aosp_15_r20/frameworks/base/packages/SystemUI/src/com/android/systemui/battery/BatterySaverModule.kt (revision d57664e9bc4670b3ecf6748a746a57c557b6bc9e)
1 package com.android.systemui.battery
2 
3 import com.android.systemui.qs.QsEventLogger
4 import com.android.systemui.qs.pipeline.shared.TileSpec
5 import com.android.systemui.qs.shared.model.TileCategory
6 import com.android.systemui.qs.tileimpl.QSTileImpl
7 import com.android.systemui.qs.tiles.BatterySaverTile
8 import com.android.systemui.qs.tiles.base.interactor.QSTileAvailabilityInteractor
9 import com.android.systemui.qs.tiles.base.viewmodel.QSTileViewModelFactory
10 import com.android.systemui.qs.tiles.impl.battery.domain.interactor.BatterySaverTileDataInteractor
11 import com.android.systemui.qs.tiles.impl.battery.domain.interactor.BatterySaverTileUserActionInteractor
12 import com.android.systemui.qs.tiles.impl.battery.domain.model.BatterySaverTileModel
13 import com.android.systemui.qs.tiles.impl.battery.ui.BatterySaverTileMapper
14 import com.android.systemui.qs.tiles.viewmodel.QSTileConfig
15 import com.android.systemui.qs.tiles.viewmodel.QSTileUIConfig
16 import com.android.systemui.qs.tiles.viewmodel.QSTileViewModel
17 import com.android.systemui.res.R
18 import dagger.Binds
19 import dagger.Module
20 import dagger.Provides
21 import dagger.multibindings.IntoMap
22 import dagger.multibindings.StringKey
23 
24 @Module
25 interface BatterySaverModule {
26 
27     /** Inject BatterySaverTile into tileMap in QSModule */
28     @Binds
29     @IntoMap
30     @StringKey(BatterySaverTile.TILE_SPEC)
bindBatterySaverTilenull31     fun bindBatterySaverTile(batterySaverTile: BatterySaverTile): QSTileImpl<*>
32 
33     @Binds
34     @IntoMap
35     @StringKey(BATTERY_SAVER_TILE_SPEC)
36     fun provideBatterySaverAvailabilityInteractor(
37         impl: BatterySaverTileDataInteractor
38     ): QSTileAvailabilityInteractor
39 
40     companion object {
41         private const val BATTERY_SAVER_TILE_SPEC = "battery"
42 
43         @Provides
44         @IntoMap
45         @StringKey(BATTERY_SAVER_TILE_SPEC)
46         fun provideBatterySaverTileConfig(uiEventLogger: QsEventLogger): QSTileConfig =
47             QSTileConfig(
48                 tileSpec = TileSpec.create(BATTERY_SAVER_TILE_SPEC),
49                 uiConfig =
50                     QSTileUIConfig.Resource(
51                         iconRes = R.drawable.qs_battery_saver_icon_off,
52                         labelRes = R.string.battery_detail_switch_title,
53                     ),
54                 instanceId = uiEventLogger.getNewInstanceId(),
55                 category = TileCategory.UTILITIES,
56             )
57 
58         /** Inject BatterySaverTile into tileViewModelMap in QSModule */
59         @Provides
60         @IntoMap
61         @StringKey(BATTERY_SAVER_TILE_SPEC)
62         fun provideBatterySaverTileViewModel(
63             factory: QSTileViewModelFactory.Static<BatterySaverTileModel>,
64             mapper: BatterySaverTileMapper,
65             stateInteractor: BatterySaverTileDataInteractor,
66             userActionInteractor: BatterySaverTileUserActionInteractor
67         ): QSTileViewModel =
68             factory.create(
69                 TileSpec.create(BATTERY_SAVER_TILE_SPEC),
70                 userActionInteractor,
71                 stateInteractor,
72                 mapper,
73             )
74     }
75 }
76