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