• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 import android.service.dreams.IDreamManager;
22 
23 import androidx.annotation.Nullable;
24 
25 import com.android.internal.statusbar.IStatusBarService;
26 import com.android.keyguard.clock.ClockInfoModule;
27 import com.android.keyguard.dagger.ClockRegistryModule;
28 import com.android.keyguard.dagger.KeyguardBouncerComponent;
29 import com.android.systemui.BootCompleteCache;
30 import com.android.systemui.BootCompleteCacheImpl;
31 import com.android.systemui.accessibility.AccessibilityModule;
32 import com.android.systemui.appops.dagger.AppOpsModule;
33 import com.android.systemui.assist.AssistModule;
34 import com.android.systemui.biometrics.AlternateUdfpsTouchProvider;
35 import com.android.systemui.biometrics.FingerprintInteractiveToAuthProvider;
36 import com.android.systemui.biometrics.UdfpsDisplayModeProvider;
37 import com.android.systemui.biometrics.dagger.BiometricsModule;
38 import com.android.systemui.biometrics.dagger.UdfpsModule;
39 import com.android.systemui.classifier.FalsingModule;
40 import com.android.systemui.clipboardoverlay.dagger.ClipboardOverlayModule;
41 import com.android.systemui.controls.dagger.ControlsModule;
42 import com.android.systemui.dagger.qualifiers.Main;
43 import com.android.systemui.demomode.dagger.DemoModeModule;
44 import com.android.systemui.doze.dagger.DozeComponent;
45 import com.android.systemui.dreams.dagger.DreamModule;
46 import com.android.systemui.dump.DumpManager;
47 import com.android.systemui.flags.FeatureFlags;
48 import com.android.systemui.flags.FlagsModule;
49 import com.android.systemui.fragments.FragmentService;
50 import com.android.systemui.keyboard.KeyboardModule;
51 import com.android.systemui.keyguard.data.BouncerViewModule;
52 import com.android.systemui.log.dagger.LogModule;
53 import com.android.systemui.mediaprojection.appselector.MediaProjectionModule;
54 import com.android.systemui.model.SysUiState;
55 import com.android.systemui.motiontool.MotionToolModule;
56 import com.android.systemui.navigationbar.NavigationBarComponent;
57 import com.android.systemui.notetask.NoteTaskModule;
58 import com.android.systemui.people.PeopleModule;
59 import com.android.systemui.plugins.BcSmartspaceConfigPlugin;
60 import com.android.systemui.plugins.BcSmartspaceDataPlugin;
61 import com.android.systemui.privacy.PrivacyModule;
62 import com.android.systemui.qrcodescanner.dagger.QRCodeScannerModule;
63 import com.android.systemui.qs.FgsManagerController;
64 import com.android.systemui.qs.FgsManagerControllerImpl;
65 import com.android.systemui.qs.footer.dagger.FooterActionsModule;
66 import com.android.systemui.recents.Recents;
67 import com.android.systemui.screenrecord.ScreenRecordModule;
68 import com.android.systemui.screenshot.dagger.ScreenshotModule;
69 import com.android.systemui.security.data.repository.SecurityRepositoryModule;
70 import com.android.systemui.settings.DisplayTracker;
71 import com.android.systemui.settings.dagger.MultiUserUtilsModule;
72 import com.android.systemui.shade.ShadeController;
73 import com.android.systemui.shade.transition.LargeScreenShadeInterpolator;
74 import com.android.systemui.shade.transition.LargeScreenShadeInterpolatorImpl;
75 import com.android.systemui.smartspace.dagger.SmartspaceModule;
76 import com.android.systemui.statusbar.CommandQueue;
77 import com.android.systemui.statusbar.NotificationLockscreenUserManager;
78 import com.android.systemui.statusbar.NotificationShadeWindowController;
79 import com.android.systemui.statusbar.connectivity.ConnectivityModule;
80 import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler;
81 import com.android.systemui.statusbar.notification.collection.NotifPipeline;
82 import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinder;
83 import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinderImpl;
84 import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
85 import com.android.systemui.statusbar.notification.collection.render.NotificationVisibilityProvider;
86 import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider;
87 import com.android.systemui.statusbar.notification.people.PeopleHubModule;
88 import com.android.systemui.statusbar.notification.row.dagger.ExpandableNotificationRowComponent;
89 import com.android.systemui.statusbar.notification.row.dagger.NotificationRowComponent;
90 import com.android.systemui.statusbar.notification.row.dagger.NotificationShelfComponent;
91 import com.android.systemui.statusbar.phone.CentralSurfaces;
92 import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent;
93 import com.android.systemui.statusbar.pipeline.dagger.StatusBarPipelineModule;
94 import com.android.systemui.statusbar.policy.HeadsUpManager;
95 import com.android.systemui.statusbar.policy.KeyguardStateController;
96 import com.android.systemui.statusbar.policy.PolicyModule;
97 import com.android.systemui.statusbar.policy.ZenModeController;
98 import com.android.systemui.statusbar.policy.dagger.SmartRepliesInflationModule;
99 import com.android.systemui.statusbar.policy.dagger.StatusBarPolicyModule;
100 import com.android.systemui.statusbar.window.StatusBarWindowModule;
101 import com.android.systemui.telephony.data.repository.TelephonyRepositoryModule;
102 import com.android.systemui.temporarydisplay.dagger.TemporaryDisplayModule;
103 import com.android.systemui.tuner.dagger.TunerModule;
104 import com.android.systemui.unfold.SysUIUnfoldModule;
105 import com.android.systemui.user.UserModule;
106 import com.android.systemui.util.concurrency.SysUIConcurrencyModule;
107 import com.android.systemui.util.dagger.UtilModule;
108 import com.android.systemui.util.kotlin.CoroutinesModule;
109 import com.android.systemui.util.leak.GarbageMonitorModule;
110 import com.android.systemui.util.sensors.SensorModule;
111 import com.android.systemui.util.settings.SettingsUtilModule;
112 import com.android.systemui.util.time.SystemClock;
113 import com.android.systemui.util.time.SystemClockImpl;
114 import com.android.systemui.wallet.dagger.WalletModule;
115 import com.android.systemui.wmshell.BubblesManager;
116 import com.android.wm.shell.bubbles.Bubbles;
117 
118 import java.util.Optional;
119 import java.util.concurrent.Executor;
120 
121 import javax.inject.Named;
122 
123 import dagger.Binds;
124 import dagger.BindsOptionalOf;
125 import dagger.Module;
126 import dagger.Provides;
127 
128 /**
129  * A dagger module for injecting components of System UI that are required by System UI.
130  *
131  * If your feature can be excluded, subclassed, or re-implemented by a variant of SystemUI, put
132  * your Dagger Module in {@link ReferenceSystemUIModule} and/or any variant modules that
133  * rely on the feature.
134  *
135  * Adding an entry in this file means that _all_ variants of SystemUI will receive that code. They
136  * may not appreciate that.
137  */
138 @Module(includes = {
139             AccessibilityModule.class,
140             AppOpsModule.class,
141             AssistModule.class,
142             BiometricsModule.class,
143             BouncerViewModule.class,
144             ClipboardOverlayModule.class,
145             ClockInfoModule.class,
146             ClockRegistryModule.class,
147             ConnectivityModule.class,
148             CoroutinesModule.class,
149             DreamModule.class,
150             ControlsModule.class,
151             DemoModeModule.class,
152             FalsingModule.class,
153             FlagsModule.class,
154             SystemPropertiesFlagsModule.class,
155             FooterActionsModule.class,
156             GarbageMonitorModule.class,
157             KeyboardModule.class,
158             LogModule.class,
159             MediaProjectionModule.class,
160             MotionToolModule.class,
161             PeopleHubModule.class,
162             PeopleModule.class,
163             PluginModule.class,
164             PolicyModule.class,
165             PrivacyModule.class,
166             QRCodeScannerModule.class,
167             ScreenshotModule.class,
168             SensorModule.class,
169             MultiUserUtilsModule.class,
170             SecurityRepositoryModule.class,
171             ScreenRecordModule.class,
172             SettingsUtilModule.class,
173             SmartRepliesInflationModule.class,
174             SmartspaceModule.class,
175             StatusBarPipelineModule.class,
176             StatusBarPolicyModule.class,
177             StatusBarWindowModule.class,
178             SysUIConcurrencyModule.class,
179             SysUIUnfoldModule.class,
180             TelephonyRepositoryModule.class,
181             TemporaryDisplayModule.class,
182             TunerModule.class,
183             UdfpsModule.class,
184             UserModule.class,
185             UtilModule.class,
186             NoteTaskModule.class,
187             WalletModule.class
188         },
189         subcomponents = {
190             CentralSurfacesComponent.class,
191             NavigationBarComponent.class,
192             NotificationRowComponent.class,
193             DozeComponent.class,
194             ExpandableNotificationRowComponent.class,
195             KeyguardBouncerComponent.class,
196             NotificationShelfComponent.class,
197             FragmentService.FragmentCreator.class
198         })
199 public abstract class SystemUIModule {
200 
201     @Binds
bindBootCompleteCache(BootCompleteCacheImpl bootCompleteCache)202     abstract BootCompleteCache bindBootCompleteCache(BootCompleteCacheImpl bootCompleteCache);
203 
204     /**
205      *
206      */
207     @Binds
bindComponentHelper( ContextComponentResolver componentHelper)208     public abstract ContextComponentHelper bindComponentHelper(
209             ContextComponentResolver componentHelper);
210 
211     /**
212      *
213      */
214     @Binds
bindNotificationRowBinder( NotificationRowBinderImpl notificationRowBinder)215     public abstract NotificationRowBinder bindNotificationRowBinder(
216             NotificationRowBinderImpl notificationRowBinder);
217 
218     @SysUISingleton
219     @Provides
provideSysUiState(DisplayTracker displayTracker, DumpManager dumpManager)220     static SysUiState provideSysUiState(DisplayTracker displayTracker, DumpManager dumpManager) {
221         final SysUiState state = new SysUiState(displayTracker);
222         dumpManager.registerDumpable(state);
223         return state;
224     }
225 
226     @BindsOptionalOf
optionalCommandQueue()227     abstract CommandQueue optionalCommandQueue();
228 
229     @BindsOptionalOf
optionalHeadsUpManager()230     abstract HeadsUpManager optionalHeadsUpManager();
231 
232     @BindsOptionalOf
optionalBcSmartspaceDataPlugin()233     abstract BcSmartspaceDataPlugin optionalBcSmartspaceDataPlugin();
234 
235     @BindsOptionalOf
optionalBcSmartspaceConfigPlugin()236     abstract BcSmartspaceConfigPlugin optionalBcSmartspaceConfigPlugin();
237 
238     @BindsOptionalOf
239     @Named(SmartspaceModule.DATE_SMARTSPACE_DATA_PLUGIN)
optionalDateSmartspaceConfigPlugin()240     abstract BcSmartspaceDataPlugin optionalDateSmartspaceConfigPlugin();
241 
242     @BindsOptionalOf
243     @Named(SmartspaceModule.WEATHER_SMARTSPACE_DATA_PLUGIN)
optionalWeatherSmartspaceConfigPlugin()244     abstract BcSmartspaceDataPlugin optionalWeatherSmartspaceConfigPlugin();
245 
246     @BindsOptionalOf
optionalRecents()247     abstract Recents optionalRecents();
248 
249     @BindsOptionalOf
optionalCentralSurfaces()250     abstract CentralSurfaces optionalCentralSurfaces();
251 
252     @BindsOptionalOf
optionalUdfpsDisplayModeProvider()253     abstract UdfpsDisplayModeProvider optionalUdfpsDisplayModeProvider();
254 
255     @BindsOptionalOf
optionalUdfpsTouchProvider()256     abstract AlternateUdfpsTouchProvider optionalUdfpsTouchProvider();
257 
258     @BindsOptionalOf
optionalFingerprintInteractiveToAuthProvider()259     abstract FingerprintInteractiveToAuthProvider optionalFingerprintInteractiveToAuthProvider();
260 
261     @BindsOptionalOf
optionalSystemStatusAnimationScheduler()262     abstract SystemStatusAnimationScheduler optionalSystemStatusAnimationScheduler();
263 
264     @SysUISingleton
265     @Binds
bindSystemClock(SystemClockImpl systemClock)266     abstract SystemClock bindSystemClock(SystemClockImpl systemClock);
267 
268     // TODO: This should provided by the WM component
269 
270     /** Provides Optional of BubbleManager */
271     @SysUISingleton
272     @Provides
provideBubblesManager(Context context, Optional<Bubbles> bubblesOptional, NotificationShadeWindowController notificationShadeWindowController, KeyguardStateController keyguardStateController, ShadeController shadeController, @Nullable IStatusBarService statusBarService, INotificationManager notificationManager, IDreamManager dreamManager, NotificationVisibilityProvider visibilityProvider, NotificationInterruptStateProvider interruptionStateProvider, ZenModeController zenModeController, NotificationLockscreenUserManager notifUserManager, CommonNotifCollection notifCollection, NotifPipeline notifPipeline, SysUiState sysUiState, FeatureFlags featureFlags, @Main Executor sysuiMainExecutor)273     static Optional<BubblesManager> provideBubblesManager(Context context,
274             Optional<Bubbles> bubblesOptional,
275             NotificationShadeWindowController notificationShadeWindowController,
276             KeyguardStateController keyguardStateController,
277             ShadeController shadeController,
278             @Nullable IStatusBarService statusBarService,
279             INotificationManager notificationManager,
280             IDreamManager dreamManager,
281             NotificationVisibilityProvider visibilityProvider,
282             NotificationInterruptStateProvider interruptionStateProvider,
283             ZenModeController zenModeController,
284             NotificationLockscreenUserManager notifUserManager,
285             CommonNotifCollection notifCollection,
286             NotifPipeline notifPipeline,
287             SysUiState sysUiState,
288             FeatureFlags featureFlags,
289             @Main Executor sysuiMainExecutor) {
290         return Optional.ofNullable(BubblesManager.create(context,
291                 bubblesOptional,
292                 notificationShadeWindowController,
293                 keyguardStateController,
294                 shadeController,
295                 statusBarService,
296                 notificationManager,
297                 dreamManager,
298                 visibilityProvider,
299                 interruptionStateProvider,
300                 zenModeController,
301                 notifUserManager,
302                 notifCollection,
303                 notifPipeline,
304                 sysUiState,
305                 featureFlags,
306                 sysuiMainExecutor));
307     }
308 
309     @Binds
bindFgsManagerController(FgsManagerControllerImpl impl)310     abstract FgsManagerController bindFgsManagerController(FgsManagerControllerImpl impl);
311 
312     @Binds
largeScreensShadeInterpolator( LargeScreenShadeInterpolatorImpl impl)313     abstract LargeScreenShadeInterpolator largeScreensShadeInterpolator(
314             LargeScreenShadeInterpolatorImpl impl);
315 }
316