1 /* 2 * Copyright (C) 2020 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.statusbar.dagger; 18 19 import android.app.IActivityManager; 20 import android.app.NotificationManager; 21 import android.content.Context; 22 import android.os.Handler; 23 import android.service.dreams.IDreamManager; 24 25 import com.android.internal.statusbar.IStatusBarService; 26 import com.android.systemui.animation.ActivityLaunchAnimator; 27 import com.android.systemui.animation.DialogLaunchAnimator; 28 import com.android.systemui.dagger.SysUISingleton; 29 import com.android.systemui.dagger.qualifiers.Main; 30 import com.android.systemui.dump.DumpManager; 31 import com.android.systemui.flags.FeatureFlags; 32 import com.android.systemui.media.MediaDataManager; 33 import com.android.systemui.plugins.ActivityStarter; 34 import com.android.systemui.plugins.statusbar.StatusBarStateController; 35 import com.android.systemui.qs.carrier.QSCarrierGroupController; 36 import com.android.systemui.statusbar.ActionClickLogger; 37 import com.android.systemui.statusbar.CommandQueue; 38 import com.android.systemui.statusbar.MediaArtworkProcessor; 39 import com.android.systemui.statusbar.NotificationClickNotifier; 40 import com.android.systemui.statusbar.NotificationListener; 41 import com.android.systemui.statusbar.NotificationLockscreenUserManager; 42 import com.android.systemui.statusbar.NotificationMediaManager; 43 import com.android.systemui.statusbar.NotificationRemoteInputManager; 44 import com.android.systemui.statusbar.NotificationShadeWindowController; 45 import com.android.systemui.statusbar.NotificationViewHierarchyManager; 46 import com.android.systemui.statusbar.RemoteInputNotificationRebuilder; 47 import com.android.systemui.statusbar.SmartReplyController; 48 import com.android.systemui.statusbar.StatusBarStateControllerImpl; 49 import com.android.systemui.statusbar.SysuiStatusBarStateController; 50 import com.android.systemui.statusbar.commandline.CommandRegistry; 51 import com.android.systemui.statusbar.gesture.SwipeStatusBarAwayGestureHandler; 52 import com.android.systemui.statusbar.notification.AssistantFeedbackController; 53 import com.android.systemui.statusbar.notification.DynamicChildBindController; 54 import com.android.systemui.statusbar.notification.DynamicPrivacyController; 55 import com.android.systemui.statusbar.notification.NotificationEntryManager; 56 import com.android.systemui.statusbar.notification.collection.NotifCollection; 57 import com.android.systemui.statusbar.notification.collection.NotifPipeline; 58 import com.android.systemui.statusbar.notification.collection.inflation.LowPriorityInflationHelper; 59 import com.android.systemui.statusbar.notification.collection.legacy.NotificationGroupManagerLegacy; 60 import com.android.systemui.statusbar.notification.collection.legacy.VisualStabilityManager; 61 import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection; 62 import com.android.systemui.statusbar.notification.stack.ForegroundServiceSectionController; 63 import com.android.systemui.statusbar.phone.KeyguardBypassController; 64 import com.android.systemui.statusbar.phone.ManagedProfileController; 65 import com.android.systemui.statusbar.phone.ManagedProfileControllerImpl; 66 import com.android.systemui.statusbar.phone.StatusBar; 67 import com.android.systemui.statusbar.phone.StatusBarIconController; 68 import com.android.systemui.statusbar.phone.StatusBarIconControllerImpl; 69 import com.android.systemui.statusbar.phone.StatusBarRemoteInputCallback; 70 import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController; 71 import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallLogger; 72 import com.android.systemui.statusbar.policy.RemoteInputUriController; 73 import com.android.systemui.statusbar.window.StatusBarWindowController; 74 import com.android.systemui.tracing.ProtoTracer; 75 import com.android.systemui.util.concurrency.DelayableExecutor; 76 import com.android.systemui.util.time.SystemClock; 77 import com.android.wm.shell.bubbles.Bubbles; 78 79 import java.util.Optional; 80 import java.util.concurrent.Executor; 81 82 import dagger.Binds; 83 import dagger.Lazy; 84 import dagger.Module; 85 import dagger.Provides; 86 87 /** 88 * This module provides instances needed to construct {@link StatusBar}. These are moved to this 89 * separate from {@link StatusBarModule} module so that components that wish to build their own 90 * version of StatusBar can include just dependencies, without injecting StatusBar itself. 91 */ 92 @Module 93 public interface StatusBarDependenciesModule { 94 /** */ 95 @SysUISingleton 96 @Provides provideNotificationRemoteInputManager( Context context, FeatureFlags featureFlags, NotificationLockscreenUserManager lockscreenUserManager, SmartReplyController smartReplyController, NotificationEntryManager notificationEntryManager, RemoteInputNotificationRebuilder rebuilder, Lazy<Optional<StatusBar>> statusBarOptionalLazy, StatusBarStateController statusBarStateController, Handler mainHandler, RemoteInputUriController remoteInputUriController, NotificationClickNotifier clickNotifier, ActionClickLogger actionClickLogger, DumpManager dumpManager)97 static NotificationRemoteInputManager provideNotificationRemoteInputManager( 98 Context context, 99 FeatureFlags featureFlags, 100 NotificationLockscreenUserManager lockscreenUserManager, 101 SmartReplyController smartReplyController, 102 NotificationEntryManager notificationEntryManager, 103 RemoteInputNotificationRebuilder rebuilder, 104 Lazy<Optional<StatusBar>> statusBarOptionalLazy, 105 StatusBarStateController statusBarStateController, 106 Handler mainHandler, 107 RemoteInputUriController remoteInputUriController, 108 NotificationClickNotifier clickNotifier, 109 ActionClickLogger actionClickLogger, 110 DumpManager dumpManager) { 111 return new NotificationRemoteInputManager( 112 context, 113 featureFlags, 114 lockscreenUserManager, 115 smartReplyController, 116 notificationEntryManager, 117 rebuilder, 118 statusBarOptionalLazy, 119 statusBarStateController, 120 mainHandler, 121 remoteInputUriController, 122 clickNotifier, 123 actionClickLogger, 124 dumpManager); 125 } 126 127 /** */ 128 @SysUISingleton 129 @Provides provideNotificationMediaManager( Context context, Lazy<Optional<StatusBar>> statusBarOptionalLazy, Lazy<NotificationShadeWindowController> notificationShadeWindowController, NotificationEntryManager notificationEntryManager, MediaArtworkProcessor mediaArtworkProcessor, KeyguardBypassController keyguardBypassController, NotifPipeline notifPipeline, NotifCollection notifCollection, FeatureFlags featureFlags, @Main DelayableExecutor mainExecutor, MediaDataManager mediaDataManager, DumpManager dumpManager)130 static NotificationMediaManager provideNotificationMediaManager( 131 Context context, 132 Lazy<Optional<StatusBar>> statusBarOptionalLazy, 133 Lazy<NotificationShadeWindowController> notificationShadeWindowController, 134 NotificationEntryManager notificationEntryManager, 135 MediaArtworkProcessor mediaArtworkProcessor, 136 KeyguardBypassController keyguardBypassController, 137 NotifPipeline notifPipeline, 138 NotifCollection notifCollection, 139 FeatureFlags featureFlags, 140 @Main DelayableExecutor mainExecutor, 141 MediaDataManager mediaDataManager, 142 DumpManager dumpManager) { 143 return new NotificationMediaManager( 144 context, 145 statusBarOptionalLazy, 146 notificationShadeWindowController, 147 notificationEntryManager, 148 mediaArtworkProcessor, 149 keyguardBypassController, 150 notifPipeline, 151 notifCollection, 152 featureFlags, 153 mainExecutor, 154 mediaDataManager, 155 dumpManager); 156 } 157 158 /** */ 159 @SysUISingleton 160 @Provides provideNotificationListener( Context context, NotificationManager notificationManager, @Main Handler mainHandler)161 static NotificationListener provideNotificationListener( 162 Context context, 163 NotificationManager notificationManager, 164 @Main Handler mainHandler) { 165 return new NotificationListener( 166 context, notificationManager, mainHandler); 167 } 168 169 /** */ 170 @SysUISingleton 171 @Provides provideSmartReplyController( DumpManager dumpManager, NotificationEntryManager entryManager, IStatusBarService statusBarService, NotificationClickNotifier clickNotifier)172 static SmartReplyController provideSmartReplyController( 173 DumpManager dumpManager, 174 NotificationEntryManager entryManager, 175 IStatusBarService statusBarService, 176 NotificationClickNotifier clickNotifier) { 177 return new SmartReplyController(dumpManager, entryManager, statusBarService, clickNotifier); 178 } 179 180 181 /** */ 182 @Binds provideNotificationRemoteInputManagerCallback( StatusBarRemoteInputCallback callbackImpl)183 NotificationRemoteInputManager.Callback provideNotificationRemoteInputManagerCallback( 184 StatusBarRemoteInputCallback callbackImpl); 185 186 /** */ 187 @SysUISingleton 188 @Provides provideNotificationViewHierarchyManager( Context context, @Main Handler mainHandler, FeatureFlags featureFlags, NotificationLockscreenUserManager notificationLockscreenUserManager, NotificationGroupManagerLegacy groupManager, VisualStabilityManager visualStabilityManager, StatusBarStateController statusBarStateController, NotificationEntryManager notificationEntryManager, KeyguardBypassController bypassController, Optional<Bubbles> bubblesOptional, DynamicPrivacyController privacyController, ForegroundServiceSectionController fgsSectionController, DynamicChildBindController dynamicChildBindController, LowPriorityInflationHelper lowPriorityInflationHelper, AssistantFeedbackController assistantFeedbackController)189 static NotificationViewHierarchyManager provideNotificationViewHierarchyManager( 190 Context context, 191 @Main Handler mainHandler, 192 FeatureFlags featureFlags, 193 NotificationLockscreenUserManager notificationLockscreenUserManager, 194 NotificationGroupManagerLegacy groupManager, 195 VisualStabilityManager visualStabilityManager, 196 StatusBarStateController statusBarStateController, 197 NotificationEntryManager notificationEntryManager, 198 KeyguardBypassController bypassController, 199 Optional<Bubbles> bubblesOptional, 200 DynamicPrivacyController privacyController, 201 ForegroundServiceSectionController fgsSectionController, 202 DynamicChildBindController dynamicChildBindController, 203 LowPriorityInflationHelper lowPriorityInflationHelper, 204 AssistantFeedbackController assistantFeedbackController) { 205 return new NotificationViewHierarchyManager( 206 context, 207 mainHandler, 208 featureFlags, 209 notificationLockscreenUserManager, 210 groupManager, 211 visualStabilityManager, 212 statusBarStateController, 213 notificationEntryManager, 214 bypassController, 215 bubblesOptional, 216 privacyController, 217 fgsSectionController, 218 dynamicChildBindController, 219 lowPriorityInflationHelper, 220 assistantFeedbackController); 221 } 222 223 /** 224 * Provides our instance of CommandQueue which is considered optional. 225 */ 226 @Provides 227 @SysUISingleton provideCommandQueue( Context context, ProtoTracer protoTracer, CommandRegistry registry)228 static CommandQueue provideCommandQueue( 229 Context context, 230 ProtoTracer protoTracer, 231 CommandRegistry registry) { 232 return new CommandQueue(context, protoTracer, registry); 233 } 234 235 /** 236 */ 237 @Binds provideManagedProfileController( ManagedProfileControllerImpl controllerImpl)238 ManagedProfileController provideManagedProfileController( 239 ManagedProfileControllerImpl controllerImpl); 240 241 /** 242 */ 243 @Binds providesSysuiStatusBarStateController( StatusBarStateControllerImpl statusBarStateControllerImpl)244 SysuiStatusBarStateController providesSysuiStatusBarStateController( 245 StatusBarStateControllerImpl statusBarStateControllerImpl); 246 247 /** 248 */ 249 @Binds provideStatusBarIconController( StatusBarIconControllerImpl controllerImpl)250 StatusBarIconController provideStatusBarIconController( 251 StatusBarIconControllerImpl controllerImpl); 252 253 /** 254 */ 255 @Provides 256 @SysUISingleton provideOngoingCallController( CommonNotifCollection notifCollection, FeatureFlags featureFlags, SystemClock systemClock, ActivityStarter activityStarter, @Main Executor mainExecutor, IActivityManager iActivityManager, OngoingCallLogger logger, DumpManager dumpManager, StatusBarWindowController statusBarWindowController, SwipeStatusBarAwayGestureHandler swipeStatusBarAwayGestureHandler, StatusBarStateController statusBarStateController)257 static OngoingCallController provideOngoingCallController( 258 CommonNotifCollection notifCollection, 259 FeatureFlags featureFlags, 260 SystemClock systemClock, 261 ActivityStarter activityStarter, 262 @Main Executor mainExecutor, 263 IActivityManager iActivityManager, 264 OngoingCallLogger logger, 265 DumpManager dumpManager, 266 StatusBarWindowController statusBarWindowController, 267 SwipeStatusBarAwayGestureHandler swipeStatusBarAwayGestureHandler, 268 StatusBarStateController statusBarStateController) { 269 Optional<StatusBarWindowController> windowController = 270 featureFlags.isOngoingCallInImmersiveEnabled() 271 ? Optional.of(statusBarWindowController) 272 : Optional.empty(); 273 Optional<SwipeStatusBarAwayGestureHandler> gestureHandler = 274 featureFlags.isOngoingCallInImmersiveEnabled() 275 ? Optional.of(swipeStatusBarAwayGestureHandler) 276 : Optional.empty(); 277 OngoingCallController ongoingCallController = 278 new OngoingCallController( 279 notifCollection, 280 featureFlags, 281 systemClock, 282 activityStarter, 283 mainExecutor, 284 iActivityManager, 285 logger, 286 dumpManager, 287 windowController, 288 gestureHandler, 289 statusBarStateController); 290 ongoingCallController.init(); 291 return ongoingCallController; 292 } 293 294 /** */ 295 @Binds provideSlotIndexResolver( QSCarrierGroupController.SubscriptionManagerSlotIndexResolver impl)296 QSCarrierGroupController.SlotIndexResolver provideSlotIndexResolver( 297 QSCarrierGroupController.SubscriptionManagerSlotIndexResolver impl); 298 299 /** 300 */ 301 @Provides 302 @SysUISingleton provideActivityLaunchAnimator()303 static ActivityLaunchAnimator provideActivityLaunchAnimator() { 304 return new ActivityLaunchAnimator(); 305 } 306 307 /** 308 */ 309 @Provides 310 @SysUISingleton provideDialogLaunchAnimator(IDreamManager dreamManager)311 static DialogLaunchAnimator provideDialogLaunchAnimator(IDreamManager dreamManager) { 312 return new DialogLaunchAnimator(dreamManager); 313 } 314 } 315