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