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