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 static com.android.systemui.Dependency.ALLOW_NOTIFICATION_LONG_PRESS_NAME;
20 import static com.android.systemui.Dependency.LEAK_REPORT_EMAIL_NAME;
21 
22 import android.content.Context;
23 import android.hardware.SensorPrivacyManager;
24 import android.os.Handler;
25 import android.os.PowerManager;
26 
27 import androidx.annotation.Nullable;
28 
29 import com.android.keyguard.KeyguardViewController;
30 import com.android.systemui.broadcast.BroadcastDispatcher;
31 import com.android.systemui.dagger.qualifiers.Background;
32 import com.android.systemui.dagger.qualifiers.Main;
33 import com.android.systemui.demomode.DemoModeController;
34 import com.android.systemui.dock.DockManager;
35 import com.android.systemui.dock.DockManagerImpl;
36 import com.android.systemui.doze.DozeHost;
37 import com.android.systemui.media.dagger.MediaModule;
38 import com.android.systemui.plugins.qs.QSFactory;
39 import com.android.systemui.plugins.statusbar.StatusBarStateController;
40 import com.android.systemui.power.EnhancedEstimates;
41 import com.android.systemui.power.EnhancedEstimatesImpl;
42 import com.android.systemui.power.dagger.PowerModule;
43 import com.android.systemui.qs.dagger.QSModule;
44 import com.android.systemui.qs.tileimpl.QSFactoryImpl;
45 import com.android.systemui.recents.Recents;
46 import com.android.systemui.recents.RecentsImplementation;
47 import com.android.systemui.statusbar.CommandQueue;
48 import com.android.systemui.statusbar.NotificationLockscreenUserManager;
49 import com.android.systemui.statusbar.NotificationLockscreenUserManagerImpl;
50 import com.android.systemui.statusbar.NotificationShadeWindowController;
51 import com.android.systemui.statusbar.notification.NotificationEntryManager;
52 import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManager;
53 import com.android.systemui.statusbar.phone.DozeServiceHost;
54 import com.android.systemui.statusbar.phone.HeadsUpManagerPhone;
55 import com.android.systemui.statusbar.phone.KeyguardBypassController;
56 import com.android.systemui.statusbar.phone.KeyguardEnvironmentImpl;
57 import com.android.systemui.statusbar.phone.NotificationShadeWindowControllerImpl;
58 import com.android.systemui.statusbar.phone.ShadeController;
59 import com.android.systemui.statusbar.phone.ShadeControllerImpl;
60 import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
61 import com.android.systemui.statusbar.policy.BatteryController;
62 import com.android.systemui.statusbar.policy.BatteryControllerImpl;
63 import com.android.systemui.statusbar.policy.ConfigurationController;
64 import com.android.systemui.statusbar.policy.DeviceProvisionedController;
65 import com.android.systemui.statusbar.policy.DeviceProvisionedControllerImpl;
66 import com.android.systemui.statusbar.policy.HeadsUpManager;
67 import com.android.systemui.statusbar.policy.IndividualSensorPrivacyController;
68 import com.android.systemui.statusbar.policy.IndividualSensorPrivacyControllerImpl;
69 import com.android.systemui.statusbar.policy.SensorPrivacyController;
70 import com.android.systemui.statusbar.policy.SensorPrivacyControllerImpl;
71 import com.android.systemui.volume.dagger.VolumeModule;
72 
73 import javax.inject.Named;
74 
75 import dagger.Binds;
76 import dagger.Module;
77 import dagger.Provides;
78 
79 /**
80  * A dagger module for injecting default implementations of components of System UI that may be
81  * overridden by the System UI implementation.
82  */
83 @Module(includes = {
84         MediaModule.class,
85         PowerModule.class,
86         QSModule.class,
87         VolumeModule.class
88 })
89 public abstract class SystemUIDefaultModule {
90 
91     @SysUISingleton
92     @Provides
93     @Named(LEAK_REPORT_EMAIL_NAME)
94     @Nullable
provideLeakReportEmail()95     static String provideLeakReportEmail() {
96         return null;
97     }
98 
99     @Binds
bindEnhancedEstimates(EnhancedEstimatesImpl enhancedEstimates)100     abstract EnhancedEstimates bindEnhancedEstimates(EnhancedEstimatesImpl enhancedEstimates);
101 
102     @Binds
bindNotificationLockscreenUserManager( NotificationLockscreenUserManagerImpl notificationLockscreenUserManager)103     abstract NotificationLockscreenUserManager bindNotificationLockscreenUserManager(
104             NotificationLockscreenUserManagerImpl notificationLockscreenUserManager);
105 
106     @Provides
107     @SysUISingleton
provideBatteryController( Context context, EnhancedEstimates enhancedEstimates, PowerManager powerManager, BroadcastDispatcher broadcastDispatcher, DemoModeController demoModeController, @Main Handler mainHandler, @Background Handler bgHandler)108     static BatteryController provideBatteryController(
109             Context context,
110             EnhancedEstimates enhancedEstimates,
111             PowerManager powerManager,
112             BroadcastDispatcher broadcastDispatcher,
113             DemoModeController demoModeController,
114             @Main Handler mainHandler,
115             @Background Handler bgHandler) {
116         BatteryController bC = new BatteryControllerImpl(
117                 context,
118                 enhancedEstimates,
119                 powerManager,
120                 broadcastDispatcher,
121                 demoModeController,
122                 mainHandler,
123                 bgHandler);
124         bC.init();
125         return bC;
126     }
127 
128     @Provides
129     @SysUISingleton
provideSensorPrivacyController( SensorPrivacyManager sensorPrivacyManager)130     static SensorPrivacyController provideSensorPrivacyController(
131             SensorPrivacyManager sensorPrivacyManager) {
132         SensorPrivacyController spC = new SensorPrivacyControllerImpl(sensorPrivacyManager);
133         spC.init();
134         return spC;
135     }
136 
137     @Provides
138     @SysUISingleton
provideIndividualSensorPrivacyController( SensorPrivacyManager sensorPrivacyManager)139     static IndividualSensorPrivacyController provideIndividualSensorPrivacyController(
140             SensorPrivacyManager sensorPrivacyManager) {
141         IndividualSensorPrivacyController spC = new IndividualSensorPrivacyControllerImpl(
142                 sensorPrivacyManager);
143         spC.init();
144         return spC;
145     }
146 
147     @Binds
148     @SysUISingleton
bindQSFactory(QSFactoryImpl qsFactoryImpl)149     public abstract QSFactory bindQSFactory(QSFactoryImpl qsFactoryImpl);
150 
151     @Binds
bindDockManager(DockManagerImpl dockManager)152     abstract DockManager bindDockManager(DockManagerImpl dockManager);
153 
154     @Binds
bindKeyguardEnvironment( KeyguardEnvironmentImpl keyguardEnvironment)155     abstract NotificationEntryManager.KeyguardEnvironment bindKeyguardEnvironment(
156             KeyguardEnvironmentImpl keyguardEnvironment);
157 
158     @Binds
provideShadeController(ShadeControllerImpl shadeController)159     abstract ShadeController provideShadeController(ShadeControllerImpl shadeController);
160 
161     @SysUISingleton
162     @Provides
163     @Named(ALLOW_NOTIFICATION_LONG_PRESS_NAME)
provideAllowNotificationLongPress()164     static boolean provideAllowNotificationLongPress() {
165         return true;
166     }
167 
168     @SysUISingleton
169     @Provides
provideHeadsUpManagerPhone( Context context, StatusBarStateController statusBarStateController, KeyguardBypassController bypassController, GroupMembershipManager groupManager, ConfigurationController configurationController)170     static HeadsUpManagerPhone provideHeadsUpManagerPhone(
171             Context context,
172             StatusBarStateController statusBarStateController,
173             KeyguardBypassController bypassController,
174             GroupMembershipManager groupManager,
175             ConfigurationController configurationController) {
176         return new HeadsUpManagerPhone(context, statusBarStateController, bypassController,
177                 groupManager, configurationController);
178     }
179 
180     @Binds
bindHeadsUpManagerPhone(HeadsUpManagerPhone headsUpManagerPhone)181     abstract HeadsUpManager bindHeadsUpManagerPhone(HeadsUpManagerPhone headsUpManagerPhone);
182 
183     @Provides
184     @SysUISingleton
provideRecents(Context context, RecentsImplementation recentsImplementation, CommandQueue commandQueue)185     static Recents provideRecents(Context context, RecentsImplementation recentsImplementation,
186             CommandQueue commandQueue) {
187         return new Recents(context, recentsImplementation, commandQueue);
188     }
189 
190     @SysUISingleton
191     @Provides
bindDeviceProvisionedController( DeviceProvisionedControllerImpl deviceProvisionedController)192     static DeviceProvisionedController bindDeviceProvisionedController(
193             DeviceProvisionedControllerImpl deviceProvisionedController) {
194         deviceProvisionedController.init();
195         return deviceProvisionedController;
196     }
197 
198     @Binds
bindKeyguardViewController( StatusBarKeyguardViewManager statusBarKeyguardViewManager)199     abstract KeyguardViewController bindKeyguardViewController(
200             StatusBarKeyguardViewManager statusBarKeyguardViewManager);
201 
202     @Binds
bindNotificationShadeController( NotificationShadeWindowControllerImpl notificationShadeWindowController)203     abstract NotificationShadeWindowController bindNotificationShadeController(
204             NotificationShadeWindowControllerImpl notificationShadeWindowController);
205 
206     @Binds
provideDozeHost(DozeServiceHost dozeServiceHost)207     abstract DozeHost provideDozeHost(DozeServiceHost dozeServiceHost);
208 }
209