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.Flags.unfoldLatencyTrackingFix 22 import com.android.systemui.LatencyTester 23 import com.android.systemui.SliceBroadcastRelayHandler 24 import com.android.systemui.accessibility.Magnification 25 import com.android.systemui.back.domain.interactor.BackActionInteractor 26 import com.android.systemui.biometrics.BiometricNotificationService 27 import com.android.systemui.bouncer.domain.startable.BouncerStartable 28 import com.android.systemui.clipboardoverlay.ClipboardListener 29 import com.android.systemui.complication.ComplicationTypesUpdater 30 import com.android.systemui.complication.DreamClockTimeComplication 31 import com.android.systemui.controls.dagger.StartControlsStartableModule 32 import com.android.systemui.dagger.qualifiers.PerUser 33 import com.android.systemui.dreams.AssistantAttentionMonitor 34 import com.android.systemui.dreams.DreamMonitor 35 import com.android.systemui.dreams.DreamOverlayRegistrant 36 import com.android.systemui.dreams.homecontrols.system.HomeControlsDreamStartable 37 import com.android.systemui.globalactions.GlobalActionsComponent 38 import com.android.systemui.haptics.msdl.MSDLCoreStartable 39 import com.android.systemui.keyboard.KeyboardUI 40 import com.android.systemui.keyboard.PhysicalKeyboardCoreStartable 41 import com.android.systemui.keyguard.KeyguardViewConfigurator 42 import com.android.systemui.keyguard.KeyguardViewMediator 43 import com.android.systemui.keyguard.data.quickaffordance.MuteQuickAffordanceCoreStartable 44 import com.android.systemui.keyguard.ui.binder.KeyguardDismissActionBinder 45 import com.android.systemui.keyguard.ui.binder.KeyguardDismissBinder 46 import com.android.systemui.log.SessionTracker 47 import com.android.systemui.media.RingtonePlayer 48 import com.android.systemui.media.dialog.MediaOutputSwitcherDialogUI 49 import com.android.systemui.media.taptotransfer.MediaTttCommandLineHelper 50 import com.android.systemui.media.taptotransfer.receiver.MediaTttChipControllerReceiver 51 import com.android.systemui.media.taptotransfer.sender.MediaTttSenderCoordinator 52 import com.android.systemui.mediaprojection.taskswitcher.MediaProjectionTaskSwitcherCoreStartable 53 import com.android.systemui.settings.MultiUserUtilsModule 54 import com.android.systemui.shortcut.ShortcutKeyDispatcher 55 import com.android.systemui.statusbar.ImmersiveModeConfirmation 56 import com.android.systemui.statusbar.gesture.GesturePointerEventListener 57 import com.android.systemui.statusbar.notification.InstantAppNotifier 58 import com.android.systemui.statusbar.notification.headsup.StatusBarHeadsUpChangeListener 59 import com.android.systemui.statusbar.policy.BatteryControllerStartable 60 import com.android.systemui.stylus.StylusUsiPowerStartable 61 import com.android.systemui.temporarydisplay.chipbar.ChipbarCoordinator 62 import com.android.systemui.theme.ThemeOverlayController 63 import com.android.systemui.unfold.DisplaySwitchLatencyTracker 64 import com.android.systemui.unfold.NoCooldownDisplaySwitchLatencyTracker 65 import com.android.systemui.usb.StorageNotification 66 import com.android.systemui.util.NotificationChannels 67 import com.android.systemui.util.StartBinderLoggerModule 68 import com.android.systemui.wallpapers.dagger.WallpaperModule 69 import com.android.systemui.wmshell.WMShell 70 import dagger.Binds 71 import dagger.Module 72 import dagger.Provides 73 import dagger.multibindings.ClassKey 74 import dagger.multibindings.IntoMap 75 import javax.inject.Provider 76 77 /** 78 * DEPRECATED: DO NOT ADD THINGS TO THIS FILE. 79 * 80 * Add a feature specific daggger module for what you are working on. Bind your CoreStartable there. 81 * Include that module where it is needed. 82 * 83 * @deprecated 84 */ 85 @Module( 86 includes = 87 [ 88 MultiUserUtilsModule::class, 89 StartControlsStartableModule::class, 90 StartBinderLoggerModule::class, 91 WallpaperModule::class, 92 ] 93 ) 94 abstract class SystemUICoreStartableModule { 95 /** Inject into BiometricNotificationService */ 96 @Binds 97 @IntoMap 98 @ClassKey(BiometricNotificationService::class) bindBiometricNotificationServicenull99 abstract fun bindBiometricNotificationService( 100 service: BiometricNotificationService 101 ): CoreStartable 102 103 /** Inject into ClipboardListener. */ 104 @Binds 105 @IntoMap 106 @ClassKey(ClipboardListener::class) 107 abstract fun bindClipboardListener(sysui: ClipboardListener): CoreStartable 108 109 /** Inject into GlobalActionsComponent. */ 110 @Binds 111 @IntoMap 112 @ClassKey(GlobalActionsComponent::class) 113 abstract fun bindGlobalActionsComponent(sysui: GlobalActionsComponent): CoreStartable 114 115 /** Inject into InstantAppNotifier. */ 116 @Binds 117 @IntoMap 118 @ClassKey(InstantAppNotifier::class) 119 abstract fun bindInstantAppNotifier(sysui: InstantAppNotifier): CoreStartable 120 121 /** Inject into KeyboardUI. */ 122 @Binds 123 @IntoMap 124 @ClassKey(KeyboardUI::class) 125 abstract fun bindKeyboardUI(sysui: KeyboardUI): CoreStartable 126 127 /** Inject into MediaProjectionTaskSwitcherCoreStartable. */ 128 @Binds 129 @IntoMap 130 @ClassKey(MediaProjectionTaskSwitcherCoreStartable::class) 131 abstract fun bindProjectedTaskListener( 132 sysui: MediaProjectionTaskSwitcherCoreStartable 133 ): CoreStartable 134 135 /** Inject into KeyguardBiometricLockoutLogger */ 136 @Binds 137 @IntoMap 138 @ClassKey(KeyguardBiometricLockoutLogger::class) 139 abstract fun bindKeyguardBiometricLockoutLogger( 140 sysui: KeyguardBiometricLockoutLogger 141 ): CoreStartable 142 143 /** Inject into KeyguardViewMediator. */ 144 @Binds 145 @IntoMap 146 @ClassKey(KeyguardViewMediator::class) 147 abstract fun bindKeyguardViewMediator(sysui: KeyguardViewMediator): CoreStartable 148 149 /** Inject into LatencyTests. */ 150 @Binds 151 @IntoMap 152 @ClassKey(LatencyTester::class) 153 abstract fun bindLatencyTester(sysui: LatencyTester): CoreStartable 154 155 /** Inject into NotificationChannels. */ 156 @Binds 157 @IntoMap 158 @ClassKey(NotificationChannels::class) 159 @PerUser 160 abstract fun bindNotificationChannels(sysui: NotificationChannels): CoreStartable 161 162 /** Inject into ImmersiveModeConfirmation. */ 163 @Binds 164 @IntoMap 165 @ClassKey(ImmersiveModeConfirmation::class) 166 abstract fun bindImmersiveModeConfirmation(sysui: ImmersiveModeConfirmation): CoreStartable 167 168 /** Inject into RingtonePlayer. */ 169 @Binds 170 @IntoMap 171 @ClassKey(RingtonePlayer::class) 172 abstract fun bind(sysui: RingtonePlayer): CoreStartable 173 174 /** Inject into GesturePointerEventHandler. */ 175 @Binds 176 @IntoMap 177 @ClassKey(GesturePointerEventListener::class) 178 abstract fun bindGesturePointerEventListener(sysui: GesturePointerEventListener): CoreStartable 179 180 /** Inject into SessionTracker. */ 181 @Binds 182 @IntoMap 183 @ClassKey(SessionTracker::class) 184 abstract fun bindSessionTracker(service: SessionTracker): CoreStartable 185 186 /** Inject into ShortcutKeyDispatcher. */ 187 @Binds 188 @IntoMap 189 @ClassKey(ShortcutKeyDispatcher::class) 190 abstract fun bindShortcutKeyDispatcher(sysui: ShortcutKeyDispatcher): CoreStartable 191 192 /** Inject into SliceBroadcastRelayHandler. */ 193 @Binds 194 @IntoMap 195 @ClassKey(SliceBroadcastRelayHandler::class) 196 abstract fun bindSliceBroadcastRelayHandler(sysui: SliceBroadcastRelayHandler): CoreStartable 197 198 /** Inject into StorageNotification. */ 199 @Binds 200 @IntoMap 201 @ClassKey(StorageNotification::class) 202 abstract fun bindStorageNotification(sysui: StorageNotification): CoreStartable 203 204 /** Inject into ThemeOverlayController. */ 205 @Binds 206 @IntoMap 207 @ClassKey(ThemeOverlayController::class) 208 abstract fun bindThemeOverlayController(sysui: ThemeOverlayController): CoreStartable 209 210 /** Inject into MediaOutputSwitcherDialogUI. */ 211 @Binds 212 @IntoMap 213 @ClassKey(MediaOutputSwitcherDialogUI::class) 214 abstract fun MediaOutputSwitcherDialogUI(sysui: MediaOutputSwitcherDialogUI): CoreStartable 215 216 /** Inject into Magnification. */ 217 @Binds 218 @IntoMap 219 @ClassKey(Magnification::class) 220 abstract fun bindMagnification(sysui: Magnification): CoreStartable 221 222 /** Inject into WMShell. */ 223 @Binds 224 @IntoMap 225 @ClassKey(WMShell::class) 226 abstract fun bindWMShell(sysui: WMShell): CoreStartable 227 228 /** Inject into MediaTttSenderCoordinator. */ 229 @Binds 230 @IntoMap 231 @ClassKey(MediaTttSenderCoordinator::class) 232 abstract fun bindMediaTttSenderCoordinator(sysui: MediaTttSenderCoordinator): CoreStartable 233 234 /** Inject into MediaTttChipControllerReceiver. */ 235 @Binds 236 @IntoMap 237 @ClassKey(MediaTttChipControllerReceiver::class) 238 abstract fun bindMediaTttChipControllerReceiver( 239 sysui: MediaTttChipControllerReceiver 240 ): CoreStartable 241 242 /** Inject into MediaTttCommandLineHelper. */ 243 @Binds 244 @IntoMap 245 @ClassKey(MediaTttCommandLineHelper::class) 246 abstract fun bindMediaTttCommandLineHelper(sysui: MediaTttCommandLineHelper): CoreStartable 247 248 /** Inject into ChipbarCoordinator. */ 249 @Binds 250 @IntoMap 251 @ClassKey(ChipbarCoordinator::class) 252 abstract fun bindChipbarController(sysui: ChipbarCoordinator): CoreStartable 253 254 /** Inject into StylusUsiPowerStartable) */ 255 @Binds 256 @IntoMap 257 @ClassKey(StylusUsiPowerStartable::class) 258 abstract fun bindStylusUsiPowerStartable(sysui: StylusUsiPowerStartable): CoreStartable 259 260 @Binds 261 @IntoMap 262 @ClassKey(PhysicalKeyboardCoreStartable::class) 263 abstract fun bindKeyboardCoreStartable(listener: PhysicalKeyboardCoreStartable): CoreStartable 264 265 /** Inject into MuteQuickAffordanceCoreStartable */ 266 @Binds 267 @IntoMap 268 @ClassKey(MuteQuickAffordanceCoreStartable::class) 269 abstract fun bindMuteQuickAffordanceCoreStartable( 270 sysui: MuteQuickAffordanceCoreStartable 271 ): CoreStartable 272 273 /** Inject into DreamMonitor */ 274 @Binds 275 @IntoMap 276 @ClassKey(DreamMonitor::class) 277 abstract fun bindDreamMonitor(sysui: DreamMonitor): CoreStartable 278 279 /** Inject into AssistantAttentionMonitor */ 280 @Binds 281 @IntoMap 282 @ClassKey(AssistantAttentionMonitor::class) 283 abstract fun bindAssistantAttentionMonitor(sysui: AssistantAttentionMonitor): CoreStartable 284 285 @Binds 286 @IntoMap 287 @ClassKey(KeyguardViewConfigurator::class) 288 abstract fun bindKeyguardViewConfigurator(impl: KeyguardViewConfigurator): CoreStartable 289 290 @Binds 291 @IntoMap 292 @ClassKey(StatusBarHeadsUpChangeListener::class) 293 abstract fun bindStatusBarHeadsUpChangeListener( 294 impl: StatusBarHeadsUpChangeListener 295 ): CoreStartable 296 297 @Binds 298 @IntoMap 299 @ClassKey(BackActionInteractor::class) 300 abstract fun bindBackActionInteractor(impl: BackActionInteractor): CoreStartable 301 302 @Binds 303 @IntoMap 304 @ClassKey(KeyguardDismissActionBinder::class) 305 abstract fun bindKeyguardDismissActionBinder(impl: KeyguardDismissActionBinder): CoreStartable 306 307 @Binds 308 @IntoMap 309 @ClassKey(BouncerStartable::class) 310 abstract fun bindBouncerStartable(impl: BouncerStartable): CoreStartable 311 312 @Binds 313 @IntoMap 314 @ClassKey(KeyguardDismissBinder::class) 315 abstract fun bindKeyguardDismissBinder(impl: KeyguardDismissBinder): CoreStartable 316 317 @Binds 318 @IntoMap 319 @ClassKey(HomeControlsDreamStartable::class) 320 abstract fun bindHomeControlsDreamStartable(impl: HomeControlsDreamStartable): CoreStartable 321 322 /** Binds {@link BatteryControllerStartable} as a {@link CoreStartable}. */ 323 @Binds 324 @IntoMap 325 @ClassKey(BatteryControllerStartable::class) 326 abstract fun bindsBatteryControllerStartable(impl: BatteryControllerStartable): CoreStartable 327 328 @Binds 329 @IntoMap 330 @ClassKey(MSDLCoreStartable::class) 331 abstract fun bindMSDLCoreStartable(impl: MSDLCoreStartable): CoreStartable 332 333 /** Inject into DreamOverlay. */ 334 @Binds 335 @IntoMap 336 @ClassKey(DreamOverlayRegistrant::class) 337 abstract fun bindDreamOverlayRegistrant( 338 dreamOverlayRegistrant: DreamOverlayRegistrant 339 ): CoreStartable 340 341 /** Inject into DreamClockTimeComplication.Registrant */ 342 @Binds 343 @IntoMap 344 @ClassKey(DreamClockTimeComplication.Registrant::class) 345 abstract fun bindDreamClockTimeComplicationRegistrant( 346 registrant: DreamClockTimeComplication.Registrant 347 ): CoreStartable 348 349 /** Inject into ComplicationTypesUpdater. */ 350 @Binds 351 @IntoMap 352 @ClassKey(ComplicationTypesUpdater::class) 353 abstract fun bindComplicationTypesUpdater(updater: ComplicationTypesUpdater): CoreStartable 354 355 companion object { 356 @Provides 357 @IntoMap 358 @ClassKey(DisplaySwitchLatencyTracker::class) 359 fun provideDisplaySwitchLatencyTracker( 360 noCoolDownVariant: Provider<NoCooldownDisplaySwitchLatencyTracker>, 361 coolDownVariant: Provider<DisplaySwitchLatencyTracker>, 362 ): CoreStartable = 363 if (unfoldLatencyTrackingFix()) coolDownVariant.get() else noCoolDownVariant.get() 364 } 365 } 366