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 22 import androidx.annotation.Nullable; 23 24 import com.android.internal.statusbar.IStatusBarService; 25 import com.android.keyguard.clock.ClockModule; 26 import com.android.keyguard.dagger.KeyguardBouncerComponent; 27 import com.android.systemui.BootCompleteCache; 28 import com.android.systemui.BootCompleteCacheImpl; 29 import com.android.systemui.SystemUIFactory; 30 import com.android.systemui.appops.dagger.AppOpsModule; 31 import com.android.systemui.assist.AssistModule; 32 import com.android.systemui.biometrics.UdfpsHbmProvider; 33 import com.android.systemui.classifier.FalsingModule; 34 import com.android.systemui.controls.dagger.ControlsModule; 35 import com.android.systemui.dagger.qualifiers.Main; 36 import com.android.systemui.demomode.dagger.DemoModeModule; 37 import com.android.systemui.doze.dagger.DozeComponent; 38 import com.android.systemui.dump.DumpManager; 39 import com.android.systemui.fragments.FragmentService; 40 import com.android.systemui.log.dagger.LogModule; 41 import com.android.systemui.model.SysUiState; 42 import com.android.systemui.plugins.BcSmartspaceDataPlugin; 43 import com.android.systemui.plugins.statusbar.StatusBarStateController; 44 import com.android.systemui.recents.Recents; 45 import com.android.systemui.screenshot.dagger.ScreenshotModule; 46 import com.android.systemui.settings.dagger.SettingsModule; 47 import com.android.systemui.shared.system.smartspace.SmartspaceTransitionController; 48 import com.android.systemui.statusbar.CommandQueue; 49 import com.android.systemui.statusbar.FeatureFlags; 50 import com.android.systemui.statusbar.NotificationLockscreenUserManager; 51 import com.android.systemui.statusbar.NotificationShadeWindowController; 52 import com.android.systemui.statusbar.notification.NotificationEntryManager; 53 import com.android.systemui.statusbar.notification.collection.NotifPipeline; 54 import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinder; 55 import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinderImpl; 56 import com.android.systemui.statusbar.notification.collection.legacy.NotificationGroupManagerLegacy; 57 import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider; 58 import com.android.systemui.statusbar.notification.people.PeopleHubModule; 59 import com.android.systemui.statusbar.notification.row.dagger.ExpandableNotificationRowComponent; 60 import com.android.systemui.statusbar.notification.row.dagger.NotificationRowComponent; 61 import com.android.systemui.statusbar.notification.row.dagger.NotificationShelfComponent; 62 import com.android.systemui.statusbar.phone.ShadeController; 63 import com.android.systemui.statusbar.phone.StatusBar; 64 import com.android.systemui.statusbar.phone.dagger.StatusBarComponent; 65 import com.android.systemui.statusbar.policy.ConfigurationController; 66 import com.android.systemui.statusbar.policy.HeadsUpManager; 67 import com.android.systemui.statusbar.policy.ZenModeController; 68 import com.android.systemui.statusbar.policy.dagger.SmartRepliesInflationModule; 69 import com.android.systemui.statusbar.policy.dagger.StatusBarPolicyModule; 70 import com.android.systemui.tuner.dagger.TunerModule; 71 import com.android.systemui.user.UserModule; 72 import com.android.systemui.util.concurrency.SysUIConcurrencyModule; 73 import com.android.systemui.util.dagger.UtilModule; 74 import com.android.systemui.util.sensors.SensorModule; 75 import com.android.systemui.util.settings.SettingsUtilModule; 76 import com.android.systemui.util.time.SystemClock; 77 import com.android.systemui.util.time.SystemClockImpl; 78 import com.android.systemui.volume.dagger.VolumeModule; 79 import com.android.systemui.wallet.dagger.WalletModule; 80 import com.android.systemui.wmshell.BubblesManager; 81 import com.android.wm.shell.bubbles.Bubbles; 82 83 import java.util.Optional; 84 import java.util.concurrent.Executor; 85 86 import dagger.Binds; 87 import dagger.BindsOptionalOf; 88 import dagger.Module; 89 import dagger.Provides; 90 91 /** 92 * A dagger module for injecting components of System UI that are not overridden by the System UI 93 * implementation. 94 */ 95 @Module(includes = { 96 AppOpsModule.class, 97 AssistModule.class, 98 ClockModule.class, 99 ControlsModule.class, 100 DemoModeModule.class, 101 FalsingModule.class, 102 LogModule.class, 103 PeopleHubModule.class, 104 PluginModule.class, 105 ScreenshotModule.class, 106 SensorModule.class, 107 SettingsModule.class, 108 SettingsUtilModule.class, 109 SmartRepliesInflationModule.class, 110 StatusBarPolicyModule.class, 111 SysUIConcurrencyModule.class, 112 TunerModule.class, 113 UserModule.class, 114 UtilModule.class, 115 VolumeModule.class, 116 WalletModule.class 117 }, 118 subcomponents = { 119 StatusBarComponent.class, 120 NotificationRowComponent.class, 121 DozeComponent.class, 122 ExpandableNotificationRowComponent.class, 123 KeyguardBouncerComponent.class, 124 NotificationShelfComponent.class, 125 FragmentService.FragmentCreator.class 126 }) 127 public abstract class SystemUIModule { 128 129 @Binds bindBootCompleteCache(BootCompleteCacheImpl bootCompleteCache)130 abstract BootCompleteCache bindBootCompleteCache(BootCompleteCacheImpl bootCompleteCache); 131 132 /** */ 133 @Binds bindComponentHelper( ContextComponentResolver componentHelper)134 public abstract ContextComponentHelper bindComponentHelper( 135 ContextComponentResolver componentHelper); 136 137 /** */ 138 @Binds bindNotificationRowBinder( NotificationRowBinderImpl notificationRowBinder)139 public abstract NotificationRowBinder bindNotificationRowBinder( 140 NotificationRowBinderImpl notificationRowBinder); 141 142 @SysUISingleton 143 @Provides provideSysUiState()144 static SysUiState provideSysUiState() { 145 return new SysUiState(); 146 } 147 148 @BindsOptionalOf optionalCommandQueue()149 abstract CommandQueue optionalCommandQueue(); 150 151 @BindsOptionalOf optionalHeadsUpManager()152 abstract HeadsUpManager optionalHeadsUpManager(); 153 154 @BindsOptionalOf optionalBcSmartspaceDataPlugin()155 abstract BcSmartspaceDataPlugin optionalBcSmartspaceDataPlugin(); 156 157 @BindsOptionalOf optionalRecents()158 abstract Recents optionalRecents(); 159 160 @BindsOptionalOf optionalStatusBar()161 abstract StatusBar optionalStatusBar(); 162 163 @BindsOptionalOf optionalUdfpsHbmProvider()164 abstract UdfpsHbmProvider optionalUdfpsHbmProvider(); 165 166 @SysUISingleton 167 @Binds bindSystemClock(SystemClockImpl systemClock)168 abstract SystemClock bindSystemClock(SystemClockImpl systemClock); 169 170 @Provides getSystemUIFactory()171 static SystemUIFactory getSystemUIFactory() { 172 return SystemUIFactory.getInstance(); 173 } 174 175 @SysUISingleton 176 @Provides provideSmartspaceTransitionController()177 static SmartspaceTransitionController provideSmartspaceTransitionController() { 178 return new SmartspaceTransitionController(); 179 } 180 181 // TODO: This should provided by the WM component 182 /** Provides Optional of BubbleManager */ 183 @SysUISingleton 184 @Provides provideBubblesManager(Context context, Optional<Bubbles> bubblesOptional, NotificationShadeWindowController notificationShadeWindowController, StatusBarStateController statusBarStateController, ShadeController shadeController, ConfigurationController configurationController, @Nullable IStatusBarService statusBarService, INotificationManager notificationManager, NotificationInterruptStateProvider interruptionStateProvider, ZenModeController zenModeController, NotificationLockscreenUserManager notifUserManager, NotificationGroupManagerLegacy groupManager, NotificationEntryManager entryManager, NotifPipeline notifPipeline, SysUiState sysUiState, FeatureFlags featureFlags, DumpManager dumpManager, @Main Executor sysuiMainExecutor)185 static Optional<BubblesManager> provideBubblesManager(Context context, 186 Optional<Bubbles> bubblesOptional, 187 NotificationShadeWindowController notificationShadeWindowController, 188 StatusBarStateController statusBarStateController, ShadeController shadeController, 189 ConfigurationController configurationController, 190 @Nullable IStatusBarService statusBarService, INotificationManager notificationManager, 191 NotificationInterruptStateProvider interruptionStateProvider, 192 ZenModeController zenModeController, NotificationLockscreenUserManager notifUserManager, 193 NotificationGroupManagerLegacy groupManager, NotificationEntryManager entryManager, 194 NotifPipeline notifPipeline, SysUiState sysUiState, FeatureFlags featureFlags, 195 DumpManager dumpManager, @Main Executor sysuiMainExecutor) { 196 return Optional.ofNullable(BubblesManager.create(context, bubblesOptional, 197 notificationShadeWindowController, statusBarStateController, shadeController, 198 configurationController, statusBarService, notificationManager, 199 interruptionStateProvider, zenModeController, notifUserManager, 200 groupManager, entryManager, notifPipeline, sysUiState, featureFlags, dumpManager, 201 sysuiMainExecutor)); 202 } 203 } 204