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