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