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.tv
18 
19 import com.android.systemui.CoreStartable
20 import com.android.systemui.SliceBroadcastRelayHandler
21 import com.android.systemui.accessibility.WindowMagnification
22 import com.android.systemui.dagger.qualifiers.PerUser
23 import com.android.systemui.globalactions.GlobalActionsComponent
24 import com.android.systemui.keyboard.KeyboardUI
25 import com.android.systemui.media.RingtonePlayer
26 import com.android.systemui.media.systemsounds.HomeSoundEffectController
27 import com.android.systemui.power.PowerUI
28 import com.android.systemui.privacy.television.TvPrivacyChipsController
29 import com.android.systemui.shortcut.ShortcutKeyDispatcher
30 import com.android.systemui.statusbar.notification.InstantAppNotifier
31 import com.android.systemui.statusbar.tv.TvStatusBar
32 import com.android.systemui.statusbar.tv.VpnStatusObserver
33 import com.android.systemui.statusbar.tv.notifications.TvNotificationHandler
34 import com.android.systemui.statusbar.tv.notifications.TvNotificationPanel
35 import com.android.systemui.theme.ThemeOverlayController
36 import com.android.systemui.toast.ToastUI
37 import com.android.systemui.usb.StorageNotification
38 import com.android.systemui.util.NotificationChannels
39 import com.android.systemui.volume.VolumeUI
40 import com.android.systemui.wmshell.WMShell
41 import dagger.Binds
42 import dagger.Module
43 import dagger.multibindings.ClassKey
44 import dagger.multibindings.IntoMap
45 
46 /**
47  * Collection of {@link CoreStartable}s that should be run on TV.
48  */
49 @Module
50 abstract class TVSystemUICoreStartableModule {
51     /** Inject into GlobalActionsComponent.  */
52     @Binds
53     @IntoMap
54     @ClassKey(GlobalActionsComponent::class)
55     abstract fun bindGlobalActionsComponent(sysui: GlobalActionsComponent): CoreStartable
56 
57     /** Inject into HomeSoundEffectController.  */
58     @Binds
59     @IntoMap
60     @ClassKey(HomeSoundEffectController::class)
61     abstract fun bindHomeSoundEffectController(sysui: HomeSoundEffectController): CoreStartable
62 
63     /** Inject into InstantAppNotifier.  */
64     @Binds
65     @IntoMap
66     @ClassKey(InstantAppNotifier::class)
67     abstract fun bindInstantAppNotifier(sysui: InstantAppNotifier): CoreStartable
68 
69     /** Inject into KeyboardUI.  */
70     @Binds
71     @IntoMap
72     @ClassKey(KeyboardUI::class)
73     abstract fun bindKeyboardUI(sysui: KeyboardUI): CoreStartable
74 
75     /** Inject into NotificationChannels.  */
76     @Binds
77     @IntoMap
78     @ClassKey(NotificationChannels::class)
79     @PerUser
80     abstract fun bindNotificationChannels(sysui: NotificationChannels): CoreStartable
81 
82     /** Inject into PowerUI.  */
83     @Binds
84     @IntoMap
85     @ClassKey(PowerUI::class)
86     abstract fun bindPowerUI(sysui: PowerUI): CoreStartable
87 
88     /** Inject into RingtonePlayer.  */
89     @Binds
90     @IntoMap
91     @ClassKey(RingtonePlayer::class)
92     abstract fun bind(sysui: RingtonePlayer): CoreStartable
93 
94     /** Inject into ShortcutKeyDispatcher.  */
95     @Binds
96     @IntoMap
97     @ClassKey(ShortcutKeyDispatcher::class)
98     abstract fun bindShortcutKeyDispatcher(sysui: ShortcutKeyDispatcher): CoreStartable
99 
100     /** Inject into SliceBroadcastRelayHandler.  */
101     @Binds
102     @IntoMap
103     @ClassKey(SliceBroadcastRelayHandler::class)
104     abstract fun bindSliceBroadcastRelayHandler(sysui: SliceBroadcastRelayHandler): CoreStartable
105 
106     /** Inject into StorageNotification.  */
107     @Binds
108     @IntoMap
109     @ClassKey(StorageNotification::class)
110     abstract fun bindStorageNotification(sysui: StorageNotification): CoreStartable
111 
112     /** Inject into ThemeOverlayController.  */
113     @Binds
114     @IntoMap
115     @ClassKey(ThemeOverlayController::class)
116     abstract fun bindThemeOverlayController(sysui: ThemeOverlayController): CoreStartable
117 
118     /** Inject into ToastUI.  */
119     @Binds
120     @IntoMap
121     @ClassKey(ToastUI::class)
122     abstract fun bindToastUI(service: ToastUI): CoreStartable
123 
124     /** Inject into TvNotificationHandler.  */
125     @Binds
126     @IntoMap
127     @ClassKey(TvNotificationHandler::class)
128     abstract fun bindTvNotificationHandler(sysui: TvNotificationHandler): CoreStartable
129 
130     /** Inject into TvNotificationPanel.  */
131     @Binds
132     @IntoMap
133     @ClassKey(TvNotificationPanel::class)
134     abstract fun bindTvNotificationPanel(sysui: TvNotificationPanel): CoreStartable
135 
136     /** Inject into TvPrivacyChipsController.  */
137     @Binds
138     @IntoMap
139     @ClassKey(TvPrivacyChipsController::class)
140     abstract fun bindTvPrivacyChipsController(sysui: TvPrivacyChipsController): CoreStartable
141 
142     /** Inject into TvStatusBar.  */
143     @Binds
144     @IntoMap
145     @ClassKey(TvStatusBar::class)
146     abstract fun bindTvStatusBar(sysui: TvStatusBar): CoreStartable
147 
148     /** Inject into VolumeUI.  */
149     @Binds
150     @IntoMap
151     @ClassKey(VolumeUI::class)
152     abstract fun bindVolumeUI(sysui: VolumeUI): CoreStartable
153 
154     /** Inject into VpnStatusObserver.  */
155     @Binds
156     @IntoMap
157     @ClassKey(VpnStatusObserver::class)
158     abstract fun bindVpnStatusObserver(sysui: VpnStatusObserver): CoreStartable
159 
160     /** Inject into WindowMagnification.  */
161     @Binds
162     @IntoMap
163     @ClassKey(WindowMagnification::class)
164     abstract fun bindWindowMagnification(sysui: WindowMagnification): CoreStartable
165 
166     /** Inject into WMShell.  */
167     @Binds
168     @IntoMap
169     @ClassKey(WMShell::class)
170     abstract fun bindWMShell(sysui: WMShell): CoreStartable
171 }
172