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 24 import com.android.internal.statusbar.IStatusBarService; 25 import com.android.systemui.dagger.SysUISingleton; 26 import com.android.systemui.dagger.qualifiers.Main; 27 import com.android.systemui.media.MediaDataManager; 28 import com.android.systemui.plugins.ActivityStarter; 29 import com.android.systemui.plugins.statusbar.StatusBarStateController; 30 import com.android.systemui.statusbar.ActionClickLogger; 31 import com.android.systemui.statusbar.CommandQueue; 32 import com.android.systemui.statusbar.FeatureFlags; 33 import com.android.systemui.statusbar.MediaArtworkProcessor; 34 import com.android.systemui.statusbar.NotificationClickNotifier; 35 import com.android.systemui.statusbar.NotificationListener; 36 import com.android.systemui.statusbar.NotificationLockscreenUserManager; 37 import com.android.systemui.statusbar.NotificationMediaManager; 38 import com.android.systemui.statusbar.NotificationRemoteInputManager; 39 import com.android.systemui.statusbar.NotificationShadeWindowController; 40 import com.android.systemui.statusbar.NotificationViewHierarchyManager; 41 import com.android.systemui.statusbar.SmartReplyController; 42 import com.android.systemui.statusbar.StatusBarStateControllerImpl; 43 import com.android.systemui.statusbar.SysuiStatusBarStateController; 44 import com.android.systemui.statusbar.commandline.CommandRegistry; 45 import com.android.systemui.statusbar.notification.AssistantFeedbackController; 46 import com.android.systemui.statusbar.notification.DynamicChildBindController; 47 import com.android.systemui.statusbar.notification.DynamicPrivacyController; 48 import com.android.systemui.statusbar.notification.NotificationEntryManager; 49 import com.android.systemui.statusbar.notification.collection.NotifCollection; 50 import com.android.systemui.statusbar.notification.collection.NotifPipeline; 51 import com.android.systemui.statusbar.notification.collection.inflation.LowPriorityInflationHelper; 52 import com.android.systemui.statusbar.notification.collection.legacy.NotificationGroupManagerLegacy; 53 import com.android.systemui.statusbar.notification.collection.legacy.VisualStabilityManager; 54 import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection; 55 import com.android.systemui.statusbar.notification.stack.ForegroundServiceSectionController; 56 import com.android.systemui.statusbar.phone.KeyguardBypassController; 57 import com.android.systemui.statusbar.phone.ManagedProfileController; 58 import com.android.systemui.statusbar.phone.ManagedProfileControllerImpl; 59 import com.android.systemui.statusbar.phone.StatusBar; 60 import com.android.systemui.statusbar.phone.StatusBarIconController; 61 import com.android.systemui.statusbar.phone.StatusBarIconControllerImpl; 62 import com.android.systemui.statusbar.phone.StatusBarRemoteInputCallback; 63 import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController; 64 import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallLogger; 65 import com.android.systemui.statusbar.policy.RemoteInputUriController; 66 import com.android.systemui.tracing.ProtoTracer; 67 import com.android.systemui.util.DeviceConfigProxy; 68 import com.android.systemui.util.concurrency.DelayableExecutor; 69 import com.android.systemui.util.time.SystemClock; 70 import com.android.wm.shell.bubbles.Bubbles; 71 72 import java.util.Optional; 73 import java.util.concurrent.Executor; 74 75 import dagger.Binds; 76 import dagger.Lazy; 77 import dagger.Module; 78 import dagger.Provides; 79 80 /** 81 * This module provides instances needed to construct {@link StatusBar}. These are moved to this 82 * separate from {@link StatusBarModule} module so that components that wish to build their own 83 * version of StatusBar can include just dependencies, without injecting StatusBar itself. 84 */ 85 @Module 86 public interface StatusBarDependenciesModule { 87 /** */ 88 @SysUISingleton 89 @Provides provideNotificationRemoteInputManager( Context context, NotificationLockscreenUserManager lockscreenUserManager, SmartReplyController smartReplyController, NotificationEntryManager notificationEntryManager, Lazy<StatusBar> statusBarLazy, StatusBarStateController statusBarStateController, Handler mainHandler, RemoteInputUriController remoteInputUriController, NotificationClickNotifier clickNotifier, ActionClickLogger actionClickLogger)90 static NotificationRemoteInputManager provideNotificationRemoteInputManager( 91 Context context, 92 NotificationLockscreenUserManager lockscreenUserManager, 93 SmartReplyController smartReplyController, 94 NotificationEntryManager notificationEntryManager, 95 Lazy<StatusBar> statusBarLazy, 96 StatusBarStateController statusBarStateController, 97 Handler mainHandler, 98 RemoteInputUriController remoteInputUriController, 99 NotificationClickNotifier clickNotifier, 100 ActionClickLogger actionClickLogger) { 101 return new NotificationRemoteInputManager( 102 context, 103 lockscreenUserManager, 104 smartReplyController, 105 notificationEntryManager, 106 statusBarLazy, 107 statusBarStateController, 108 mainHandler, 109 remoteInputUriController, 110 clickNotifier, 111 actionClickLogger); 112 } 113 114 /** */ 115 @SysUISingleton 116 @Provides provideNotificationMediaManager( Context context, Lazy<StatusBar> statusBarLazy, Lazy<NotificationShadeWindowController> notificationShadeWindowController, NotificationEntryManager notificationEntryManager, MediaArtworkProcessor mediaArtworkProcessor, KeyguardBypassController keyguardBypassController, NotifPipeline notifPipeline, NotifCollection notifCollection, FeatureFlags featureFlags, @Main DelayableExecutor mainExecutor, DeviceConfigProxy deviceConfigProxy, MediaDataManager mediaDataManager)117 static NotificationMediaManager provideNotificationMediaManager( 118 Context context, 119 Lazy<StatusBar> statusBarLazy, 120 Lazy<NotificationShadeWindowController> notificationShadeWindowController, 121 NotificationEntryManager notificationEntryManager, 122 MediaArtworkProcessor mediaArtworkProcessor, 123 KeyguardBypassController keyguardBypassController, 124 NotifPipeline notifPipeline, 125 NotifCollection notifCollection, 126 FeatureFlags featureFlags, 127 @Main DelayableExecutor mainExecutor, 128 DeviceConfigProxy deviceConfigProxy, 129 MediaDataManager mediaDataManager) { 130 return new NotificationMediaManager( 131 context, 132 statusBarLazy, 133 notificationShadeWindowController, 134 notificationEntryManager, 135 mediaArtworkProcessor, 136 keyguardBypassController, 137 notifPipeline, 138 notifCollection, 139 featureFlags, 140 mainExecutor, 141 deviceConfigProxy, 142 mediaDataManager); 143 } 144 145 /** */ 146 @SysUISingleton 147 @Provides provideNotificationListener( Context context, NotificationManager notificationManager, @Main Handler mainHandler)148 static NotificationListener provideNotificationListener( 149 Context context, 150 NotificationManager notificationManager, 151 @Main Handler mainHandler) { 152 return new NotificationListener( 153 context, notificationManager, mainHandler); 154 } 155 156 /** */ 157 @SysUISingleton 158 @Provides provideSmartReplyController( NotificationEntryManager entryManager, IStatusBarService statusBarService, NotificationClickNotifier clickNotifier)159 static SmartReplyController provideSmartReplyController( 160 NotificationEntryManager entryManager, 161 IStatusBarService statusBarService, 162 NotificationClickNotifier clickNotifier) { 163 return new SmartReplyController(entryManager, statusBarService, clickNotifier); 164 } 165 166 167 /** */ 168 @Binds provideNotificationRemoteInputManagerCallback( StatusBarRemoteInputCallback callbackImpl)169 NotificationRemoteInputManager.Callback provideNotificationRemoteInputManagerCallback( 170 StatusBarRemoteInputCallback callbackImpl); 171 172 /** */ 173 @SysUISingleton 174 @Provides provideNotificationViewHierarchyManager( Context context, @Main Handler mainHandler, 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)175 static NotificationViewHierarchyManager provideNotificationViewHierarchyManager( 176 Context context, 177 @Main Handler mainHandler, 178 NotificationLockscreenUserManager notificationLockscreenUserManager, 179 NotificationGroupManagerLegacy groupManager, 180 VisualStabilityManager visualStabilityManager, 181 StatusBarStateController statusBarStateController, 182 NotificationEntryManager notificationEntryManager, 183 KeyguardBypassController bypassController, 184 Optional<Bubbles> bubblesOptional, 185 DynamicPrivacyController privacyController, 186 ForegroundServiceSectionController fgsSectionController, 187 DynamicChildBindController dynamicChildBindController, 188 LowPriorityInflationHelper lowPriorityInflationHelper, 189 AssistantFeedbackController assistantFeedbackController) { 190 return new NotificationViewHierarchyManager( 191 context, 192 mainHandler, 193 notificationLockscreenUserManager, 194 groupManager, 195 visualStabilityManager, 196 statusBarStateController, 197 notificationEntryManager, 198 bypassController, 199 bubblesOptional, 200 privacyController, 201 fgsSectionController, 202 dynamicChildBindController, 203 lowPriorityInflationHelper, 204 assistantFeedbackController); 205 } 206 207 /** 208 * Provides our instance of CommandQueue which is considered optional. 209 */ 210 @Provides 211 @SysUISingleton provideCommandQueue( Context context, ProtoTracer protoTracer, CommandRegistry registry)212 static CommandQueue provideCommandQueue( 213 Context context, 214 ProtoTracer protoTracer, 215 CommandRegistry registry) { 216 return new CommandQueue(context, protoTracer, registry); 217 } 218 219 /** 220 */ 221 @Binds provideManagedProfileController( ManagedProfileControllerImpl controllerImpl)222 ManagedProfileController provideManagedProfileController( 223 ManagedProfileControllerImpl controllerImpl); 224 225 /** 226 */ 227 @Binds providesSysuiStatusBarStateController( StatusBarStateControllerImpl statusBarStateControllerImpl)228 SysuiStatusBarStateController providesSysuiStatusBarStateController( 229 StatusBarStateControllerImpl statusBarStateControllerImpl); 230 231 /** 232 */ 233 @Binds provideStatusBarIconController( StatusBarIconControllerImpl controllerImpl)234 StatusBarIconController provideStatusBarIconController( 235 StatusBarIconControllerImpl controllerImpl); 236 237 /** 238 */ 239 @Provides 240 @SysUISingleton provideOngoingCallController( CommonNotifCollection notifCollection, FeatureFlags featureFlags, SystemClock systemClock, ActivityStarter activityStarter, @Main Executor mainExecutor, IActivityManager iActivityManager, OngoingCallLogger logger)241 static OngoingCallController provideOngoingCallController( 242 CommonNotifCollection notifCollection, 243 FeatureFlags featureFlags, 244 SystemClock systemClock, 245 ActivityStarter activityStarter, 246 @Main Executor mainExecutor, 247 IActivityManager iActivityManager, 248 OngoingCallLogger logger) { 249 OngoingCallController ongoingCallController = 250 new OngoingCallController( 251 notifCollection, featureFlags, systemClock, activityStarter, mainExecutor, 252 iActivityManager, logger); 253 ongoingCallController.init(); 254 return ongoingCallController; 255 } 256 } 257