xref: /aosp_15_r20/frameworks/base/packages/SystemUI/src/com/android/systemui/controls/dagger/ControlsModule.kt (revision d57664e9bc4670b3ecf6748a746a57c557b6bc9e)
1 /*
2  * Copyright (C) 2019 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.systemui.controls.dagger
18 
19 import android.app.Activity
20 import android.content.pm.PackageManager
21 import com.android.systemui.controls.ControlsMetricsLogger
22 import com.android.systemui.controls.ControlsMetricsLoggerImpl
23 import com.android.systemui.controls.controller.ControlsBindingController
24 import com.android.systemui.controls.controller.ControlsBindingControllerImpl
25 import com.android.systemui.controls.controller.ControlsController
26 import com.android.systemui.controls.controller.ControlsControllerImpl
27 import com.android.systemui.controls.controller.ControlsFavoritePersistenceWrapper
28 import com.android.systemui.controls.controller.ControlsTileResourceConfiguration
29 import com.android.systemui.controls.management.ControlsEditingActivity
30 import com.android.systemui.controls.management.ControlsFavoritingActivity
31 import com.android.systemui.controls.management.ControlsListingController
32 import com.android.systemui.controls.management.ControlsListingControllerImpl
33 import com.android.systemui.controls.management.ControlsProviderSelectorActivity
34 import com.android.systemui.controls.management.ControlsRequestDialog
35 import com.android.systemui.controls.panels.AuthorizedPanelsRepository
36 import com.android.systemui.controls.panels.AuthorizedPanelsRepositoryImpl
37 import com.android.systemui.controls.panels.SelectedComponentRepository
38 import com.android.systemui.controls.panels.SelectedComponentRepositoryImpl
39 import com.android.systemui.controls.settings.ControlsSettingsDialogManager
40 import com.android.systemui.controls.settings.ControlsSettingsDialogManagerImpl
41 import com.android.systemui.controls.settings.ControlsSettingsRepository
42 import com.android.systemui.controls.settings.ControlsSettingsRepositoryImpl
43 import com.android.systemui.controls.ui.ControlActionCoordinator
44 import com.android.systemui.controls.ui.ControlActionCoordinatorImpl
45 import com.android.systemui.controls.ui.ControlsActivity
46 import com.android.systemui.controls.ui.ControlsUiController
47 import com.android.systemui.controls.ui.ControlsUiControllerImpl
48 import com.android.systemui.dagger.SysUISingleton
49 import com.android.systemui.qs.QsEventLogger
50 import com.android.systemui.qs.pipeline.shared.TileSpec
51 import com.android.systemui.qs.shared.model.TileCategory
52 import com.android.systemui.qs.tileimpl.QSTileImpl
53 import com.android.systemui.qs.tiles.DeviceControlsTile
54 import com.android.systemui.qs.tiles.viewmodel.QSTileConfig
55 import com.android.systemui.qs.tiles.viewmodel.QSTileUIConfig
56 import dagger.Binds
57 import dagger.BindsOptionalOf
58 import dagger.Module
59 import dagger.Provides
60 import dagger.multibindings.ClassKey
61 import dagger.multibindings.IntoMap
62 import dagger.multibindings.StringKey
63 
64 /**
65  * Module for injecting classes in `com.android.systemui.controls`-
66  *
67  * Classes provided by this module should only be injected directly into other classes in this
68  * module. For injecting outside of this module (for example, [GlobalActionsDialog], inject
69  * [ControlsComponent] and obtain the corresponding optionals from it.
70  */
71 @Module
72 abstract class ControlsModule {
73 
74     @Module
75     companion object {
76         @JvmStatic
77         @Provides
78         @SysUISingleton
79         @ControlsFeatureEnabled
providesControlsFeatureEnablednull80         fun providesControlsFeatureEnabled(pm: PackageManager): Boolean {
81             return pm.hasSystemFeature(PackageManager.FEATURE_CONTROLS)
82         }
83 
84         const val DEVICE_CONTROLS_SPEC = "controls"
85 
86         @Provides
87         @IntoMap
88         @StringKey(DEVICE_CONTROLS_SPEC)
provideDeviceControlsTileConfignull89         fun provideDeviceControlsTileConfig(uiEventLogger: QsEventLogger): QSTileConfig =
90             QSTileConfig(
91                 tileSpec = TileSpec.create(DEVICE_CONTROLS_SPEC),
92                 uiConfig =
93                     QSTileUIConfig.Resource(
94                         iconRes = com.android.systemui.res.R.drawable.controls_icon,
95                         labelRes = com.android.systemui.res.R.string.quick_controls_title
96                     ),
97                 instanceId = uiEventLogger.getNewInstanceId(),
98                 category = TileCategory.UTILITIES,
99             )
100     }
101 
102     @Binds
103     abstract fun provideControlsListingController(
104         controller: ControlsListingControllerImpl
105     ): ControlsListingController
106 
107     @Binds
108     abstract fun provideControlsController(controller: ControlsControllerImpl): ControlsController
109 
110     @Binds
111     abstract fun provideControlsBindingController(
112         controller: ControlsBindingControllerImpl
113     ): ControlsBindingController
114 
115     @Binds
116     abstract fun provideUiController(controller: ControlsUiControllerImpl): ControlsUiController
117 
118     @Binds
119     abstract fun provideSettingsManager(
120         manager: ControlsSettingsRepositoryImpl
121     ): ControlsSettingsRepository
122 
123     @Binds
124     abstract fun provideDialogManager(
125         manager: ControlsSettingsDialogManagerImpl
126     ): ControlsSettingsDialogManager
127 
128     @Binds
129     abstract fun provideMetricsLogger(logger: ControlsMetricsLoggerImpl): ControlsMetricsLogger
130 
131     @Binds
132     abstract fun provideControlActionCoordinator(
133         coordinator: ControlActionCoordinatorImpl
134     ): ControlActionCoordinator
135 
136     @Binds
137     abstract fun provideAuthorizedPanelsRepository(
138         repository: AuthorizedPanelsRepositoryImpl
139     ): AuthorizedPanelsRepository
140 
141     @Binds
142     abstract fun providePreferredPanelRepository(
143         repository: SelectedComponentRepositoryImpl
144     ): SelectedComponentRepository
145 
146     @BindsOptionalOf abstract fun optionalPersistenceWrapper(): ControlsFavoritePersistenceWrapper
147 
148     @BindsOptionalOf
149     abstract fun provideControlsTileResourceConfiguration(): ControlsTileResourceConfiguration
150 
151     @Binds
152     @IntoMap
153     @ClassKey(ControlsProviderSelectorActivity::class)
154     abstract fun provideControlsProviderActivity(
155         activity: ControlsProviderSelectorActivity
156     ): Activity
157 
158     @Binds
159     @IntoMap
160     @ClassKey(ControlsFavoritingActivity::class)
161     abstract fun provideControlsFavoritingActivity(activity: ControlsFavoritingActivity): Activity
162 
163     @Binds
164     @IntoMap
165     @ClassKey(ControlsEditingActivity::class)
166     abstract fun provideControlsEditingActivity(activity: ControlsEditingActivity): Activity
167 
168     @Binds
169     @IntoMap
170     @ClassKey(ControlsRequestDialog::class)
171     abstract fun provideControlsRequestDialog(activity: ControlsRequestDialog): Activity
172 
173     @Binds
174     @IntoMap
175     @ClassKey(ControlsActivity::class)
176     abstract fun provideControlsActivity(activity: ControlsActivity): Activity
177 
178     @Binds
179     @IntoMap
180     @StringKey(DeviceControlsTile.TILE_SPEC)
181     abstract fun bindDeviceControlsTile(controlsTile: DeviceControlsTile): QSTileImpl<*>
182 }
183