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