1 /*
2  * Copyright (C) 2021 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.dagger
18 
19 import com.android.keyguard.KeyguardBiometricLockoutLogger
20 import com.android.systemui.CoreStartable
21 import com.android.systemui.LatencyTester
22 import com.android.systemui.ScreenDecorations
23 import com.android.systemui.SliceBroadcastRelayHandler
24 import com.android.systemui.accessibility.SystemActions
25 import com.android.systemui.accessibility.WindowMagnification
26 import com.android.systemui.biometrics.AuthController
27 import com.android.systemui.biometrics.BiometricNotificationService
28 import com.android.systemui.clipboardoverlay.ClipboardListener
29 import com.android.systemui.controls.dagger.StartControlsStartableModule
30 import com.android.systemui.dagger.qualifiers.PerUser
31 import com.android.systemui.dreams.AssistantAttentionMonitor
32 import com.android.systemui.dreams.DreamMonitor
33 import com.android.systemui.globalactions.GlobalActionsComponent
34 import com.android.systemui.keyboard.KeyboardUI
35 import com.android.systemui.keyboard.PhysicalKeyboardCoreStartable
36 import com.android.systemui.keyguard.KeyguardViewMediator
37 import com.android.systemui.keyguard.KeyguardViewConfigurator
38 import com.android.systemui.keyguard.data.quickaffordance.MuteQuickAffordanceCoreStartable
39 import com.android.systemui.log.SessionTracker
40 import com.android.systemui.media.RingtonePlayer
41 import com.android.systemui.media.dialog.MediaOutputSwitcherDialogUI
42 import com.android.systemui.media.taptotransfer.MediaTttCommandLineHelper
43 import com.android.systemui.media.taptotransfer.receiver.MediaTttChipControllerReceiver
44 import com.android.systemui.media.taptotransfer.sender.MediaTttSenderCoordinator
45 import com.android.systemui.mediaprojection.taskswitcher.MediaProjectionTaskSwitcherCoreStartable
46 import com.android.systemui.power.PowerUI
47 import com.android.systemui.reardisplay.RearDisplayDialogController
48 import com.android.systemui.recents.Recents
49 import com.android.systemui.settings.dagger.MultiUserUtilsModule
50 import com.android.systemui.shortcut.ShortcutKeyDispatcher
51 import com.android.systemui.statusbar.ImmersiveModeConfirmation
52 import com.android.systemui.statusbar.gesture.GesturePointerEventListener
53 import com.android.systemui.statusbar.notification.InstantAppNotifier
54 import com.android.systemui.statusbar.phone.KeyguardLiftController
55 import com.android.systemui.statusbar.phone.LockscreenWallpaper
56 import com.android.systemui.statusbar.phone.ScrimController
57 import com.android.systemui.statusbar.phone.StatusBarHeadsUpChangeListener
58 import com.android.systemui.stylus.StylusUsiPowerStartable
59 import com.android.systemui.temporarydisplay.chipbar.ChipbarCoordinator
60 import com.android.systemui.theme.ThemeOverlayController
61 import com.android.systemui.toast.ToastUI
62 import com.android.systemui.usb.StorageNotification
63 import com.android.systemui.util.NotificationChannels
64 import com.android.systemui.util.StartBinderLoggerModule
65 import com.android.systemui.volume.VolumeUI
66 import com.android.systemui.wallpapers.dagger.WallpaperModule
67 import com.android.systemui.wmshell.WMShell
68 import dagger.Binds
69 import dagger.Module
70 import dagger.multibindings.ClassKey
71 import dagger.multibindings.IntoMap
72 
73 /**
74  * Collection of {@link CoreStartable}s that should be run on AOSP.
75  */
76 @Module(includes = [
77     MultiUserUtilsModule::class,
78     StartControlsStartableModule::class,
79     StartBinderLoggerModule::class,
80     WallpaperModule::class,
81 ])
82 abstract class SystemUICoreStartableModule {
83     /** Inject into AuthController.  */
84     @Binds
85     @IntoMap
86     @ClassKey(AuthController::class)
87     abstract fun bindAuthController(service: AuthController): CoreStartable
88 
89     /** Inject into BiometricNotificationService */
90     @Binds
91     @IntoMap
92     @ClassKey(BiometricNotificationService::class)
93     abstract fun bindBiometricNotificationService(
94         service: BiometricNotificationService
95     ): CoreStartable
96 
97     /** Inject into ClipboardListener.  */
98     @Binds
99     @IntoMap
100     @ClassKey(ClipboardListener::class)
101     abstract fun bindClipboardListener(sysui: ClipboardListener): CoreStartable
102 
103     /** Inject into GlobalActionsComponent.  */
104     @Binds
105     @IntoMap
106     @ClassKey(GlobalActionsComponent::class)
107     abstract fun bindGlobalActionsComponent(sysui: GlobalActionsComponent): CoreStartable
108 
109     /** Inject into InstantAppNotifier.  */
110     @Binds
111     @IntoMap
112     @ClassKey(InstantAppNotifier::class)
113     abstract fun bindInstantAppNotifier(sysui: InstantAppNotifier): CoreStartable
114 
115     /** Inject into KeyboardUI.  */
116     @Binds
117     @IntoMap
118     @ClassKey(KeyboardUI::class)
119     abstract fun bindKeyboardUI(sysui: KeyboardUI): CoreStartable
120 
121     /** Inject into MediaProjectionTaskSwitcherCoreStartable. */
122     @Binds
123     @IntoMap
124     @ClassKey(MediaProjectionTaskSwitcherCoreStartable::class)
125     abstract fun bindProjectedTaskListener(
126             sysui: MediaProjectionTaskSwitcherCoreStartable
127     ): CoreStartable
128 
129     /** Inject into KeyguardBiometricLockoutLogger */
130     @Binds
131     @IntoMap
132     @ClassKey(KeyguardBiometricLockoutLogger::class)
133     abstract fun bindKeyguardBiometricLockoutLogger(
134         sysui: KeyguardBiometricLockoutLogger
135     ): CoreStartable
136 
137     /** Inject into KeyguardViewMediator.  */
138     @Binds
139     @IntoMap
140     @ClassKey(KeyguardViewMediator::class)
141     abstract fun bindKeyguardViewMediator(sysui: KeyguardViewMediator): CoreStartable
142 
143     /** Inject into LatencyTests.  */
144     @Binds
145     @IntoMap
146     @ClassKey(LatencyTester::class)
147     abstract fun bindLatencyTester(sysui: LatencyTester): CoreStartable
148 
149     /** Inject into NotificationChannels.  */
150     @Binds
151     @IntoMap
152     @ClassKey(NotificationChannels::class)
153     @PerUser
154     abstract fun bindNotificationChannels(sysui: NotificationChannels): CoreStartable
155 
156     /** Inject into PowerUI.  */
157     @Binds
158     @IntoMap
159     @ClassKey(PowerUI::class)
160     abstract fun bindPowerUI(sysui: PowerUI): CoreStartable
161 
162     /** Inject into Recents.  */
163     @Binds
164     @IntoMap
165     @ClassKey(Recents::class)
166     abstract fun bindRecents(sysui: Recents): CoreStartable
167 
168     /** Inject into ImmersiveModeConfirmation.  */
169     @Binds
170     @IntoMap
171     @ClassKey(ImmersiveModeConfirmation::class)
172     abstract fun bindImmersiveModeConfirmation(sysui: ImmersiveModeConfirmation): CoreStartable
173 
174     /** Inject into RingtonePlayer.  */
175     @Binds
176     @IntoMap
177     @ClassKey(RingtonePlayer::class)
178     abstract fun bind(sysui: RingtonePlayer): CoreStartable
179 
180     /** Inject into ScreenDecorations.  */
181     @Binds
182     @IntoMap
183     @ClassKey(ScreenDecorations::class)
184     abstract fun bindScreenDecorations(sysui: ScreenDecorations): CoreStartable
185 
186     /** Inject into GesturePointerEventHandler. */
187     @Binds
188     @IntoMap
189     @ClassKey(GesturePointerEventListener::class)
190     abstract fun bindGesturePointerEventListener(sysui: GesturePointerEventListener): CoreStartable
191 
192     /** Inject into SessionTracker.  */
193     @Binds
194     @IntoMap
195     @ClassKey(SessionTracker::class)
196     abstract fun bindSessionTracker(service: SessionTracker): CoreStartable
197 
198     /** Inject into ShortcutKeyDispatcher.  */
199     @Binds
200     @IntoMap
201     @ClassKey(ShortcutKeyDispatcher::class)
202     abstract fun bindShortcutKeyDispatcher(sysui: ShortcutKeyDispatcher): CoreStartable
203 
204     /** Inject into SliceBroadcastRelayHandler.  */
205     @Binds
206     @IntoMap
207     @ClassKey(SliceBroadcastRelayHandler::class)
208     abstract fun bindSliceBroadcastRelayHandler(sysui: SliceBroadcastRelayHandler): CoreStartable
209 
210     /** Inject into StorageNotification.  */
211     @Binds
212     @IntoMap
213     @ClassKey(StorageNotification::class)
214     abstract fun bindStorageNotification(sysui: StorageNotification): CoreStartable
215 
216     /** Inject into SystemActions.  */
217     @Binds
218     @IntoMap
219     @ClassKey(SystemActions::class)
220     abstract fun bindSystemActions(sysui: SystemActions): CoreStartable
221 
222     /** Inject into ThemeOverlayController.  */
223     @Binds
224     @IntoMap
225     @ClassKey(ThemeOverlayController::class)
226     abstract fun bindThemeOverlayController(sysui: ThemeOverlayController): CoreStartable
227 
228     /** Inject into ToastUI.  */
229     @Binds
230     @IntoMap
231     @ClassKey(ToastUI::class)
232     abstract fun bindToastUI(service: ToastUI): CoreStartable
233 
234     /** Inject into MediaOutputSwitcherDialogUI.  */
235     @Binds
236     @IntoMap
237     @ClassKey(MediaOutputSwitcherDialogUI::class)
238     abstract fun MediaOutputSwitcherDialogUI(sysui: MediaOutputSwitcherDialogUI): CoreStartable
239 
240     /** Inject into VolumeUI.  */
241     @Binds
242     @IntoMap
243     @ClassKey(VolumeUI::class)
244     abstract fun bindVolumeUI(sysui: VolumeUI): CoreStartable
245 
246     /** Inject into WindowMagnification.  */
247     @Binds
248     @IntoMap
249     @ClassKey(WindowMagnification::class)
250     abstract fun bindWindowMagnification(sysui: WindowMagnification): CoreStartable
251 
252     /** Inject into WMShell.  */
253     @Binds
254     @IntoMap
255     @ClassKey(WMShell::class)
256     abstract fun bindWMShell(sysui: WMShell): CoreStartable
257 
258     /** Inject into KeyguardLiftController.  */
259     @Binds
260     @IntoMap
261     @ClassKey(KeyguardLiftController::class)
262     abstract fun bindKeyguardLiftController(sysui: KeyguardLiftController): CoreStartable
263 
264     /** Inject into MediaTttSenderCoordinator. */
265     @Binds
266     @IntoMap
267     @ClassKey(MediaTttSenderCoordinator::class)
268     abstract fun bindMediaTttSenderCoordinator(sysui: MediaTttSenderCoordinator): CoreStartable
269 
270     /** Inject into MediaTttChipControllerReceiver. */
271     @Binds
272     @IntoMap
273     @ClassKey(MediaTttChipControllerReceiver::class)
274     abstract fun bindMediaTttChipControllerReceiver(
275             sysui: MediaTttChipControllerReceiver
276     ): CoreStartable
277 
278     /** Inject into MediaTttCommandLineHelper. */
279     @Binds
280     @IntoMap
281     @ClassKey(MediaTttCommandLineHelper::class)
282     abstract fun bindMediaTttCommandLineHelper(sysui: MediaTttCommandLineHelper): CoreStartable
283 
284     /** Inject into ChipbarCoordinator. */
285     @Binds
286     @IntoMap
287     @ClassKey(ChipbarCoordinator::class)
288     abstract fun bindChipbarController(sysui: ChipbarCoordinator): CoreStartable
289 
290 
291     /** Inject into RearDisplayDialogController) */
292     @Binds
293     @IntoMap
294     @ClassKey(RearDisplayDialogController::class)
295     abstract fun bindRearDisplayDialogController(sysui: RearDisplayDialogController): CoreStartable
296 
297     /** Inject into StylusUsiPowerStartable) */
298     @Binds
299     @IntoMap
300     @ClassKey(StylusUsiPowerStartable::class)
301     abstract fun bindStylusUsiPowerStartable(sysui: StylusUsiPowerStartable): CoreStartable
302 
303     @Binds
304     @IntoMap
305     @ClassKey(PhysicalKeyboardCoreStartable::class)
306     abstract fun bindKeyboardCoreStartable(listener: PhysicalKeyboardCoreStartable): CoreStartable
307 
308     /** Inject into MuteQuickAffordanceCoreStartable*/
309     @Binds
310     @IntoMap
311     @ClassKey(MuteQuickAffordanceCoreStartable::class)
312     abstract fun bindMuteQuickAffordanceCoreStartable(
313             sysui: MuteQuickAffordanceCoreStartable
314     ): CoreStartable
315 
316     /**Inject into DreamMonitor */
317     @Binds
318     @IntoMap
319     @ClassKey(DreamMonitor::class)
320     abstract fun bindDreamMonitor(sysui: DreamMonitor): CoreStartable
321 
322     /**Inject into AssistantAttentionMonitor */
323     @Binds
324     @IntoMap
325     @ClassKey(AssistantAttentionMonitor::class)
326     abstract fun bindAssistantAttentionMonitor(sysui: AssistantAttentionMonitor): CoreStartable
327 
328     @Binds
329     @IntoMap
330     @ClassKey(KeyguardViewConfigurator::class)
331     abstract fun bindKeyguardViewConfigurator(impl: KeyguardViewConfigurator): CoreStartable
332 
333     @Binds
334     @IntoMap
335     @ClassKey(LockscreenWallpaper::class)
336     abstract fun bindLockscreenWallpaper(impl: LockscreenWallpaper): CoreStartable
337 
338     @Binds
339     @IntoMap
340     @ClassKey(ScrimController::class)
341     abstract fun bindScrimController(impl: ScrimController): CoreStartable
342 
343     @Binds
344     @IntoMap
345     @ClassKey(StatusBarHeadsUpChangeListener::class)
346     abstract fun bindStatusBarHeadsUpChangeListener(
347         impl: StatusBarHeadsUpChangeListener
348     ): CoreStartable
349 }
350