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