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