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.dagger; 18 19 import android.app.INotificationManager; 20 import android.content.Context; 21 import android.service.dreams.IDreamManager; 22 23 import androidx.annotation.Nullable; 24 25 import com.android.internal.statusbar.IStatusBarService; 26 import com.android.keyguard.clock.ClockInfoModule; 27 import com.android.keyguard.dagger.ClockRegistryModule; 28 import com.android.keyguard.dagger.KeyguardBouncerComponent; 29 import com.android.systemui.BootCompleteCache; 30 import com.android.systemui.BootCompleteCacheImpl; 31 import com.android.systemui.accessibility.AccessibilityModule; 32 import com.android.systemui.appops.dagger.AppOpsModule; 33 import com.android.systemui.assist.AssistModule; 34 import com.android.systemui.biometrics.AlternateUdfpsTouchProvider; 35 import com.android.systemui.biometrics.FingerprintInteractiveToAuthProvider; 36 import com.android.systemui.biometrics.UdfpsDisplayModeProvider; 37 import com.android.systemui.biometrics.dagger.BiometricsModule; 38 import com.android.systemui.biometrics.dagger.UdfpsModule; 39 import com.android.systemui.classifier.FalsingModule; 40 import com.android.systemui.clipboardoverlay.dagger.ClipboardOverlayModule; 41 import com.android.systemui.controls.dagger.ControlsModule; 42 import com.android.systemui.dagger.qualifiers.Main; 43 import com.android.systemui.demomode.dagger.DemoModeModule; 44 import com.android.systemui.doze.dagger.DozeComponent; 45 import com.android.systemui.dreams.dagger.DreamModule; 46 import com.android.systemui.dump.DumpManager; 47 import com.android.systemui.flags.FeatureFlags; 48 import com.android.systemui.flags.FlagsModule; 49 import com.android.systemui.fragments.FragmentService; 50 import com.android.systemui.keyboard.KeyboardModule; 51 import com.android.systemui.keyguard.data.BouncerViewModule; 52 import com.android.systemui.log.dagger.LogModule; 53 import com.android.systemui.mediaprojection.appselector.MediaProjectionModule; 54 import com.android.systemui.model.SysUiState; 55 import com.android.systemui.motiontool.MotionToolModule; 56 import com.android.systemui.navigationbar.NavigationBarComponent; 57 import com.android.systemui.notetask.NoteTaskModule; 58 import com.android.systemui.people.PeopleModule; 59 import com.android.systemui.plugins.BcSmartspaceConfigPlugin; 60 import com.android.systemui.plugins.BcSmartspaceDataPlugin; 61 import com.android.systemui.privacy.PrivacyModule; 62 import com.android.systemui.qrcodescanner.dagger.QRCodeScannerModule; 63 import com.android.systemui.qs.FgsManagerController; 64 import com.android.systemui.qs.FgsManagerControllerImpl; 65 import com.android.systemui.qs.footer.dagger.FooterActionsModule; 66 import com.android.systemui.recents.Recents; 67 import com.android.systemui.screenrecord.ScreenRecordModule; 68 import com.android.systemui.screenshot.dagger.ScreenshotModule; 69 import com.android.systemui.security.data.repository.SecurityRepositoryModule; 70 import com.android.systemui.settings.DisplayTracker; 71 import com.android.systemui.settings.dagger.MultiUserUtilsModule; 72 import com.android.systemui.shade.ShadeController; 73 import com.android.systemui.shade.transition.LargeScreenShadeInterpolator; 74 import com.android.systemui.shade.transition.LargeScreenShadeInterpolatorImpl; 75 import com.android.systemui.smartspace.dagger.SmartspaceModule; 76 import com.android.systemui.statusbar.CommandQueue; 77 import com.android.systemui.statusbar.NotificationLockscreenUserManager; 78 import com.android.systemui.statusbar.NotificationShadeWindowController; 79 import com.android.systemui.statusbar.connectivity.ConnectivityModule; 80 import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler; 81 import com.android.systemui.statusbar.notification.collection.NotifPipeline; 82 import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinder; 83 import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinderImpl; 84 import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection; 85 import com.android.systemui.statusbar.notification.collection.render.NotificationVisibilityProvider; 86 import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider; 87 import com.android.systemui.statusbar.notification.people.PeopleHubModule; 88 import com.android.systemui.statusbar.notification.row.dagger.ExpandableNotificationRowComponent; 89 import com.android.systemui.statusbar.notification.row.dagger.NotificationRowComponent; 90 import com.android.systemui.statusbar.notification.row.dagger.NotificationShelfComponent; 91 import com.android.systemui.statusbar.phone.CentralSurfaces; 92 import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent; 93 import com.android.systemui.statusbar.pipeline.dagger.StatusBarPipelineModule; 94 import com.android.systemui.statusbar.policy.HeadsUpManager; 95 import com.android.systemui.statusbar.policy.KeyguardStateController; 96 import com.android.systemui.statusbar.policy.PolicyModule; 97 import com.android.systemui.statusbar.policy.ZenModeController; 98 import com.android.systemui.statusbar.policy.dagger.SmartRepliesInflationModule; 99 import com.android.systemui.statusbar.policy.dagger.StatusBarPolicyModule; 100 import com.android.systemui.statusbar.window.StatusBarWindowModule; 101 import com.android.systemui.telephony.data.repository.TelephonyRepositoryModule; 102 import com.android.systemui.temporarydisplay.dagger.TemporaryDisplayModule; 103 import com.android.systemui.tuner.dagger.TunerModule; 104 import com.android.systemui.unfold.SysUIUnfoldModule; 105 import com.android.systemui.user.UserModule; 106 import com.android.systemui.util.concurrency.SysUIConcurrencyModule; 107 import com.android.systemui.util.dagger.UtilModule; 108 import com.android.systemui.util.kotlin.CoroutinesModule; 109 import com.android.systemui.util.leak.GarbageMonitorModule; 110 import com.android.systemui.util.sensors.SensorModule; 111 import com.android.systemui.util.settings.SettingsUtilModule; 112 import com.android.systemui.util.time.SystemClock; 113 import com.android.systemui.util.time.SystemClockImpl; 114 import com.android.systemui.wallet.dagger.WalletModule; 115 import com.android.systemui.wmshell.BubblesManager; 116 import com.android.wm.shell.bubbles.Bubbles; 117 118 import java.util.Optional; 119 import java.util.concurrent.Executor; 120 121 import javax.inject.Named; 122 123 import dagger.Binds; 124 import dagger.BindsOptionalOf; 125 import dagger.Module; 126 import dagger.Provides; 127 128 /** 129 * A dagger module for injecting components of System UI that are required by System UI. 130 * 131 * If your feature can be excluded, subclassed, or re-implemented by a variant of SystemUI, put 132 * your Dagger Module in {@link ReferenceSystemUIModule} and/or any variant modules that 133 * rely on the feature. 134 * 135 * Adding an entry in this file means that _all_ variants of SystemUI will receive that code. They 136 * may not appreciate that. 137 */ 138 @Module(includes = { 139 AccessibilityModule.class, 140 AppOpsModule.class, 141 AssistModule.class, 142 BiometricsModule.class, 143 BouncerViewModule.class, 144 ClipboardOverlayModule.class, 145 ClockInfoModule.class, 146 ClockRegistryModule.class, 147 ConnectivityModule.class, 148 CoroutinesModule.class, 149 DreamModule.class, 150 ControlsModule.class, 151 DemoModeModule.class, 152 FalsingModule.class, 153 FlagsModule.class, 154 SystemPropertiesFlagsModule.class, 155 FooterActionsModule.class, 156 GarbageMonitorModule.class, 157 KeyboardModule.class, 158 LogModule.class, 159 MediaProjectionModule.class, 160 MotionToolModule.class, 161 PeopleHubModule.class, 162 PeopleModule.class, 163 PluginModule.class, 164 PolicyModule.class, 165 PrivacyModule.class, 166 QRCodeScannerModule.class, 167 ScreenshotModule.class, 168 SensorModule.class, 169 MultiUserUtilsModule.class, 170 SecurityRepositoryModule.class, 171 ScreenRecordModule.class, 172 SettingsUtilModule.class, 173 SmartRepliesInflationModule.class, 174 SmartspaceModule.class, 175 StatusBarPipelineModule.class, 176 StatusBarPolicyModule.class, 177 StatusBarWindowModule.class, 178 SysUIConcurrencyModule.class, 179 SysUIUnfoldModule.class, 180 TelephonyRepositoryModule.class, 181 TemporaryDisplayModule.class, 182 TunerModule.class, 183 UdfpsModule.class, 184 UserModule.class, 185 UtilModule.class, 186 NoteTaskModule.class, 187 WalletModule.class 188 }, 189 subcomponents = { 190 CentralSurfacesComponent.class, 191 NavigationBarComponent.class, 192 NotificationRowComponent.class, 193 DozeComponent.class, 194 ExpandableNotificationRowComponent.class, 195 KeyguardBouncerComponent.class, 196 NotificationShelfComponent.class, 197 FragmentService.FragmentCreator.class 198 }) 199 public abstract class SystemUIModule { 200 201 @Binds bindBootCompleteCache(BootCompleteCacheImpl bootCompleteCache)202 abstract BootCompleteCache bindBootCompleteCache(BootCompleteCacheImpl bootCompleteCache); 203 204 /** 205 * 206 */ 207 @Binds bindComponentHelper( ContextComponentResolver componentHelper)208 public abstract ContextComponentHelper bindComponentHelper( 209 ContextComponentResolver componentHelper); 210 211 /** 212 * 213 */ 214 @Binds bindNotificationRowBinder( NotificationRowBinderImpl notificationRowBinder)215 public abstract NotificationRowBinder bindNotificationRowBinder( 216 NotificationRowBinderImpl notificationRowBinder); 217 218 @SysUISingleton 219 @Provides provideSysUiState(DisplayTracker displayTracker, DumpManager dumpManager)220 static SysUiState provideSysUiState(DisplayTracker displayTracker, DumpManager dumpManager) { 221 final SysUiState state = new SysUiState(displayTracker); 222 dumpManager.registerDumpable(state); 223 return state; 224 } 225 226 @BindsOptionalOf optionalCommandQueue()227 abstract CommandQueue optionalCommandQueue(); 228 229 @BindsOptionalOf optionalHeadsUpManager()230 abstract HeadsUpManager optionalHeadsUpManager(); 231 232 @BindsOptionalOf optionalBcSmartspaceDataPlugin()233 abstract BcSmartspaceDataPlugin optionalBcSmartspaceDataPlugin(); 234 235 @BindsOptionalOf optionalBcSmartspaceConfigPlugin()236 abstract BcSmartspaceConfigPlugin optionalBcSmartspaceConfigPlugin(); 237 238 @BindsOptionalOf 239 @Named(SmartspaceModule.DATE_SMARTSPACE_DATA_PLUGIN) optionalDateSmartspaceConfigPlugin()240 abstract BcSmartspaceDataPlugin optionalDateSmartspaceConfigPlugin(); 241 242 @BindsOptionalOf 243 @Named(SmartspaceModule.WEATHER_SMARTSPACE_DATA_PLUGIN) optionalWeatherSmartspaceConfigPlugin()244 abstract BcSmartspaceDataPlugin optionalWeatherSmartspaceConfigPlugin(); 245 246 @BindsOptionalOf optionalRecents()247 abstract Recents optionalRecents(); 248 249 @BindsOptionalOf optionalCentralSurfaces()250 abstract CentralSurfaces optionalCentralSurfaces(); 251 252 @BindsOptionalOf optionalUdfpsDisplayModeProvider()253 abstract UdfpsDisplayModeProvider optionalUdfpsDisplayModeProvider(); 254 255 @BindsOptionalOf optionalUdfpsTouchProvider()256 abstract AlternateUdfpsTouchProvider optionalUdfpsTouchProvider(); 257 258 @BindsOptionalOf optionalFingerprintInteractiveToAuthProvider()259 abstract FingerprintInteractiveToAuthProvider optionalFingerprintInteractiveToAuthProvider(); 260 261 @BindsOptionalOf optionalSystemStatusAnimationScheduler()262 abstract SystemStatusAnimationScheduler optionalSystemStatusAnimationScheduler(); 263 264 @SysUISingleton 265 @Binds bindSystemClock(SystemClockImpl systemClock)266 abstract SystemClock bindSystemClock(SystemClockImpl systemClock); 267 268 // TODO: This should provided by the WM component 269 270 /** Provides Optional of BubbleManager */ 271 @SysUISingleton 272 @Provides provideBubblesManager(Context context, Optional<Bubbles> bubblesOptional, NotificationShadeWindowController notificationShadeWindowController, KeyguardStateController keyguardStateController, ShadeController shadeController, @Nullable IStatusBarService statusBarService, INotificationManager notificationManager, IDreamManager dreamManager, NotificationVisibilityProvider visibilityProvider, NotificationInterruptStateProvider interruptionStateProvider, ZenModeController zenModeController, NotificationLockscreenUserManager notifUserManager, CommonNotifCollection notifCollection, NotifPipeline notifPipeline, SysUiState sysUiState, FeatureFlags featureFlags, @Main Executor sysuiMainExecutor)273 static Optional<BubblesManager> provideBubblesManager(Context context, 274 Optional<Bubbles> bubblesOptional, 275 NotificationShadeWindowController notificationShadeWindowController, 276 KeyguardStateController keyguardStateController, 277 ShadeController shadeController, 278 @Nullable IStatusBarService statusBarService, 279 INotificationManager notificationManager, 280 IDreamManager dreamManager, 281 NotificationVisibilityProvider visibilityProvider, 282 NotificationInterruptStateProvider interruptionStateProvider, 283 ZenModeController zenModeController, 284 NotificationLockscreenUserManager notifUserManager, 285 CommonNotifCollection notifCollection, 286 NotifPipeline notifPipeline, 287 SysUiState sysUiState, 288 FeatureFlags featureFlags, 289 @Main Executor sysuiMainExecutor) { 290 return Optional.ofNullable(BubblesManager.create(context, 291 bubblesOptional, 292 notificationShadeWindowController, 293 keyguardStateController, 294 shadeController, 295 statusBarService, 296 notificationManager, 297 dreamManager, 298 visibilityProvider, 299 interruptionStateProvider, 300 zenModeController, 301 notifUserManager, 302 notifCollection, 303 notifPipeline, 304 sysUiState, 305 featureFlags, 306 sysuiMainExecutor)); 307 } 308 309 @Binds bindFgsManagerController(FgsManagerControllerImpl impl)310 abstract FgsManagerController bindFgsManagerController(FgsManagerControllerImpl impl); 311 312 @Binds largeScreensShadeInterpolator( LargeScreenShadeInterpolatorImpl impl)313 abstract LargeScreenShadeInterpolator largeScreensShadeInterpolator( 314 LargeScreenShadeInterpolatorImpl impl); 315 } 316