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 
26 import com.android.internal.logging.UiEventLogger;
27 import com.android.keyguard.KeyguardViewController;
28 import com.android.systemui.dagger.ReferenceSystemUIModule;
29 import com.android.systemui.dagger.SysUISingleton;
30 import com.android.systemui.dagger.qualifiers.Main;
31 import com.android.systemui.dock.DockManager;
32 import com.android.systemui.dock.DockManagerImpl;
33 import com.android.systemui.doze.DozeHost;
34 import com.android.systemui.navigationbar.gestural.GestureModule;
35 import com.android.systemui.plugins.qs.QSFactory;
36 import com.android.systemui.plugins.statusbar.StatusBarStateController;
37 import com.android.systemui.power.dagger.PowerModule;
38 import com.android.systemui.privacy.MediaProjectionPrivacyItemMonitor;
39 import com.android.systemui.privacy.PrivacyItemMonitor;
40 import com.android.systemui.qs.dagger.QSModule;
41 import com.android.systemui.qs.tileimpl.QSFactoryImpl;
42 import com.android.systemui.recents.Recents;
43 import com.android.systemui.recents.RecentsImplementation;
44 import com.android.systemui.screenshot.ReferenceScreenshotModule;
45 import com.android.systemui.settings.dagger.MultiUserUtilsModule;
46 import com.android.systemui.shade.NotificationShadeWindowControllerImpl;
47 import com.android.systemui.shade.ShadeEmptyImplModule;
48 import com.android.systemui.shade.ShadeExpansionStateManager;
49 import com.android.systemui.statusbar.CommandQueue;
50 import com.android.systemui.statusbar.NotificationListener;
51 import com.android.systemui.statusbar.NotificationLockscreenUserManager;
52 import com.android.systemui.statusbar.NotificationLockscreenUserManagerImpl;
53 import com.android.systemui.statusbar.NotificationShadeWindowController;
54 import com.android.systemui.statusbar.events.StatusBarEventsModule;
55 import com.android.systemui.statusbar.notification.collection.provider.VisualStabilityProvider;
56 import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManager;
57 import com.android.systemui.statusbar.phone.DozeServiceHost;
58 import com.android.systemui.statusbar.phone.HeadsUpManagerPhone;
59 import com.android.systemui.statusbar.phone.KeyguardBypassController;
60 import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
61 import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper;
62 import com.android.systemui.statusbar.policy.AospPolicyModule;
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.HeadsUpManagerLogger;
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 dagger.Binds;
76 import dagger.Module;
77 import dagger.Provides;
78 import dagger.multibindings.IntoSet;
79 
80 import javax.inject.Named;
81 
82 /**
83  * A TV specific version of {@link ReferenceSystemUIModule}.
84  *
85  * Code here should be specific to the TV variant of SystemUI and will not be included in other
86  * variants of SystemUI.
87  */
88 @Module(
89         includes = {
90                 AospPolicyModule.class,
91                 GestureModule.class,
92                 MultiUserUtilsModule.class,
93                 PowerModule.class,
94                 QSModule.class,
95                 ReferenceScreenshotModule.class,
96                 ShadeEmptyImplModule.class,
97                 StatusBarEventsModule.class,
98                 VolumeModule.class,
99         }
100 )
101 public abstract class TvSystemUIModule {
102 
103     @SysUISingleton
104     @Provides
105     @Named(LEAK_REPORT_EMAIL_NAME)
provideLeakReportEmail()106     static String provideLeakReportEmail() {
107         return "";
108     }
109 
110     @Binds
bindNotificationLockscreenUserManager( NotificationLockscreenUserManagerImpl notificationLockscreenUserManager)111     abstract NotificationLockscreenUserManager bindNotificationLockscreenUserManager(
112             NotificationLockscreenUserManagerImpl notificationLockscreenUserManager);
113 
114     @Provides
115     @SysUISingleton
provideSensorPrivacyController( SensorPrivacyManager sensorPrivacyManager)116     static SensorPrivacyController provideSensorPrivacyController(
117             SensorPrivacyManager sensorPrivacyManager) {
118         SensorPrivacyController spC = new SensorPrivacyControllerImpl(sensorPrivacyManager);
119         spC.init();
120         return spC;
121     }
122 
123     @Provides
124     @SysUISingleton
provideIndividualSensorPrivacyController( SensorPrivacyManager sensorPrivacyManager)125     static IndividualSensorPrivacyController provideIndividualSensorPrivacyController(
126             SensorPrivacyManager sensorPrivacyManager) {
127         IndividualSensorPrivacyController spC = new IndividualSensorPrivacyControllerImpl(
128                 sensorPrivacyManager);
129         spC.init();
130         return spC;
131     }
132 
133     @Binds
134     @SysUISingleton
bindQSFactory(QSFactoryImpl qsFactoryImpl)135     abstract QSFactory bindQSFactory(QSFactoryImpl qsFactoryImpl);
136 
137     @Binds
bindDockManager(DockManagerImpl dockManager)138     abstract DockManager bindDockManager(DockManagerImpl dockManager);
139 
140     @SysUISingleton
141     @Provides
142     @Named(ALLOW_NOTIFICATION_LONG_PRESS_NAME)
provideAllowNotificationLongPress()143     static boolean provideAllowNotificationLongPress() {
144         return true;
145     }
146 
147     @SysUISingleton
148     @Provides
provideHeadsUpManagerPhone( Context context, HeadsUpManagerLogger headsUpManagerLogger, StatusBarStateController statusBarStateController, KeyguardBypassController bypassController, GroupMembershipManager groupManager, VisualStabilityProvider visualStabilityProvider, ConfigurationController configurationController, @Main Handler handler, AccessibilityManagerWrapper accessibilityManagerWrapper, UiEventLogger uiEventLogger, ShadeExpansionStateManager shadeExpansionStateManager)149     static HeadsUpManagerPhone provideHeadsUpManagerPhone(
150             Context context,
151             HeadsUpManagerLogger headsUpManagerLogger,
152             StatusBarStateController statusBarStateController,
153             KeyguardBypassController bypassController,
154             GroupMembershipManager groupManager,
155             VisualStabilityProvider visualStabilityProvider,
156             ConfigurationController configurationController,
157             @Main Handler handler,
158             AccessibilityManagerWrapper accessibilityManagerWrapper,
159             UiEventLogger uiEventLogger,
160             ShadeExpansionStateManager shadeExpansionStateManager) {
161         return new HeadsUpManagerPhone(
162                 context,
163                 headsUpManagerLogger,
164                 statusBarStateController,
165                 bypassController,
166                 groupManager,
167                 visualStabilityProvider,
168                 configurationController,
169                 handler,
170                 accessibilityManagerWrapper,
171                 uiEventLogger,
172                 shadeExpansionStateManager
173         );
174     }
175 
176     @Binds
bindHeadsUpManagerPhone(HeadsUpManagerPhone headsUpManagerPhone)177     abstract HeadsUpManager bindHeadsUpManagerPhone(HeadsUpManagerPhone headsUpManagerPhone);
178 
179     @Provides
180     @SysUISingleton
provideRecents(Context context, RecentsImplementation recentsImplementation, CommandQueue commandQueue)181     static Recents provideRecents(Context context, RecentsImplementation recentsImplementation,
182             CommandQueue commandQueue) {
183         return new Recents(context, recentsImplementation, commandQueue);
184     }
185 
186     @SysUISingleton
187     @Provides
providesDeviceProvisionedController( DeviceProvisionedControllerImpl deviceProvisionedController)188     static DeviceProvisionedController providesDeviceProvisionedController(
189             DeviceProvisionedControllerImpl deviceProvisionedController) {
190         deviceProvisionedController.init();
191         return deviceProvisionedController;
192     }
193 
194     @Binds
bindKeyguardViewController( StatusBarKeyguardViewManager statusBarKeyguardViewManager)195     abstract KeyguardViewController bindKeyguardViewController(
196             StatusBarKeyguardViewManager statusBarKeyguardViewManager);
197 
198     @Binds
bindNotificationShadeController( NotificationShadeWindowControllerImpl notificationShadeWindowController)199     abstract NotificationShadeWindowController bindNotificationShadeController(
200             NotificationShadeWindowControllerImpl notificationShadeWindowController);
201 
202     @Binds
provideDozeHost(DozeServiceHost dozeServiceHost)203     abstract DozeHost provideDozeHost(DozeServiceHost dozeServiceHost);
204 
205     @Provides
206     @SysUISingleton
provideTvNotificationHandler( NotificationListener notificationListener)207     static TvNotificationHandler provideTvNotificationHandler(
208             NotificationListener notificationListener) {
209         return new TvNotificationHandler(notificationListener);
210     }
211 
212     /**
213      * Binds {@link MediaProjectionPrivacyItemMonitor} into the set of {@link PrivacyItemMonitor}.
214      */
215     @Binds
216     @IntoSet
bindMediaProjectionPrivacyItemMonitor( MediaProjectionPrivacyItemMonitor mediaProjectionPrivacyItemMonitor)217     abstract PrivacyItemMonitor bindMediaProjectionPrivacyItemMonitor(
218             MediaProjectionPrivacyItemMonitor mediaProjectionPrivacyItemMonitor);
219 }
220