• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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