1 /* 2 * Copyright (C) 2020 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.statusbar.policy.dagger; 18 19 import android.content.Context; 20 import android.content.res.Resources; 21 import android.hardware.devicestate.DeviceStateManager; 22 import android.os.Handler; 23 import android.os.UserManager; 24 25 import com.android.internal.R; 26 import com.android.settingslib.devicestate.AndroidSecureSettings; 27 import com.android.settingslib.devicestate.DeviceStateAutoRotateSettingManager; 28 import com.android.settingslib.devicestate.DeviceStateAutoRotateSettingManagerProvider; 29 import com.android.settingslib.devicestate.PosturesHelper; 30 import com.android.settingslib.devicestate.SecureSettings; 31 import com.android.settingslib.notification.modes.ZenIconLoader; 32 import com.android.systemui.dagger.SysUISingleton; 33 import com.android.systemui.dagger.qualifiers.Application; 34 import com.android.systemui.dagger.qualifiers.Background; 35 import com.android.systemui.dagger.qualifiers.Main; 36 import com.android.systemui.dagger.qualifiers.UiBackground; 37 import com.android.systemui.log.LogBuffer; 38 import com.android.systemui.log.LogBufferFactory; 39 import com.android.systemui.settings.UserTracker; 40 import com.android.systemui.statusbar.connectivity.AccessPointController; 41 import com.android.systemui.statusbar.connectivity.AccessPointControllerImpl; 42 import com.android.systemui.statusbar.connectivity.NetworkController; 43 import com.android.systemui.statusbar.connectivity.NetworkControllerImpl; 44 import com.android.systemui.statusbar.connectivity.WifiPickerTrackerFactory; 45 import com.android.systemui.statusbar.phone.ConfigurationControllerImpl; 46 import com.android.systemui.statusbar.phone.ConfigurationForwarder; 47 import com.android.systemui.statusbar.policy.BatteryControllerLogger; 48 import com.android.systemui.statusbar.policy.BluetoothController; 49 import com.android.systemui.statusbar.policy.BluetoothControllerImpl; 50 import com.android.systemui.statusbar.policy.CastController; 51 import com.android.systemui.statusbar.policy.CastControllerImpl; 52 import com.android.systemui.statusbar.policy.ConfigurationController; 53 import com.android.systemui.statusbar.policy.DataSaverController; 54 import com.android.systemui.statusbar.policy.DeviceControlsController; 55 import com.android.systemui.statusbar.policy.DeviceControlsControllerImpl; 56 import com.android.systemui.statusbar.policy.DevicePostureController; 57 import com.android.systemui.statusbar.policy.DevicePostureControllerImpl; 58 import com.android.systemui.statusbar.policy.ExtensionController; 59 import com.android.systemui.statusbar.policy.ExtensionControllerImpl; 60 import com.android.systemui.statusbar.policy.FlashlightController; 61 import com.android.systemui.statusbar.policy.FlashlightControllerImpl; 62 import com.android.systemui.statusbar.policy.HotspotController; 63 import com.android.systemui.statusbar.policy.HotspotControllerImpl; 64 import com.android.systemui.statusbar.policy.KeyguardStateController; 65 import com.android.systemui.statusbar.policy.KeyguardStateControllerImpl; 66 import com.android.systemui.statusbar.policy.LocationController; 67 import com.android.systemui.statusbar.policy.LocationControllerImpl; 68 import com.android.systemui.statusbar.policy.NextAlarmController; 69 import com.android.systemui.statusbar.policy.NextAlarmControllerImpl; 70 import com.android.systemui.statusbar.policy.RotationLockController; 71 import com.android.systemui.statusbar.policy.RotationLockControllerImpl; 72 import com.android.systemui.statusbar.policy.SecurityController; 73 import com.android.systemui.statusbar.policy.SecurityControllerImpl; 74 import com.android.systemui.statusbar.policy.SensitiveNotificationProtectionController; 75 import com.android.systemui.statusbar.policy.SensitiveNotificationProtectionControllerImpl; 76 import com.android.systemui.statusbar.policy.SplitShadeStateController; 77 import com.android.systemui.statusbar.policy.SplitShadeStateControllerImpl; 78 import com.android.systemui.statusbar.policy.UserInfoController; 79 import com.android.systemui.statusbar.policy.UserInfoControllerImpl; 80 import com.android.systemui.statusbar.policy.WalletController; 81 import com.android.systemui.statusbar.policy.WalletControllerImpl; 82 import com.android.systemui.statusbar.policy.ZenModeController; 83 import com.android.systemui.statusbar.policy.ZenModeControllerImpl; 84 import com.android.systemui.statusbar.policy.bluetooth.BluetoothRepository; 85 import com.android.systemui.statusbar.policy.bluetooth.BluetoothRepositoryImpl; 86 import com.android.systemui.statusbar.policy.data.repository.DeviceProvisioningRepositoryModule; 87 88 import dagger.Binds; 89 import dagger.Module; 90 import dagger.Provides; 91 92 import java.util.concurrent.Executor; 93 import java.util.concurrent.ExecutorService; 94 95 import javax.inject.Named; 96 97 /** Dagger Module for code in the statusbar.policy package. */ 98 @Module(includes = {DeviceProvisioningRepositoryModule.class}) 99 public interface StatusBarPolicyModule { 100 101 String DEVICE_STATE_ROTATION_LOCK_DEFAULTS = "DEVICE_STATE_ROTATION_LOCK_DEFAULTS"; 102 103 /** */ 104 @Binds provideBluetoothController(BluetoothControllerImpl controllerImpl)105 BluetoothController provideBluetoothController(BluetoothControllerImpl controllerImpl); 106 107 /** */ 108 @Binds provideBluetoothRepository(BluetoothRepositoryImpl impl)109 BluetoothRepository provideBluetoothRepository(BluetoothRepositoryImpl impl); 110 111 /** */ 112 @Binds provideCastController(CastControllerImpl controllerImpl)113 CastController provideCastController(CastControllerImpl controllerImpl); 114 115 /** 116 * @deprecated: unscoped configuration controller shouldn't be injected as it might lead to 117 * wrong updates in case of secondary displays. 118 */ 119 @Binds bindConfigurationController(@ain ConfigurationController impl)120 ConfigurationController bindConfigurationController(@Main ConfigurationController impl); 121 122 /** */ 123 @Binds provideExtensionController(ExtensionControllerImpl controllerImpl)124 ExtensionController provideExtensionController(ExtensionControllerImpl controllerImpl); 125 126 /** */ 127 @Binds provideFlashlightController(FlashlightControllerImpl controllerImpl)128 FlashlightController provideFlashlightController(FlashlightControllerImpl controllerImpl); 129 130 /** */ 131 @Binds provideKeyguardMonitor(KeyguardStateControllerImpl controllerImpl)132 KeyguardStateController provideKeyguardMonitor(KeyguardStateControllerImpl controllerImpl); 133 134 /** */ 135 @Binds provideSplitShadeStateController( SplitShadeStateControllerImpl splitShadeStateControllerImpl)136 SplitShadeStateController provideSplitShadeStateController( 137 SplitShadeStateControllerImpl splitShadeStateControllerImpl); 138 139 /** */ 140 @Binds provideHotspotController(HotspotControllerImpl controllerImpl)141 HotspotController provideHotspotController(HotspotControllerImpl controllerImpl); 142 143 /** */ 144 @Binds provideLocationController(LocationControllerImpl controllerImpl)145 LocationController provideLocationController(LocationControllerImpl controllerImpl); 146 147 /** */ 148 @Binds provideNetworkController(NetworkControllerImpl controllerImpl)149 NetworkController provideNetworkController(NetworkControllerImpl controllerImpl); 150 151 /** */ 152 @Binds provideNextAlarmController(NextAlarmControllerImpl controllerImpl)153 NextAlarmController provideNextAlarmController(NextAlarmControllerImpl controllerImpl); 154 155 /** */ 156 @Binds provideRotationLockController(RotationLockControllerImpl controllerImpl)157 RotationLockController provideRotationLockController(RotationLockControllerImpl controllerImpl); 158 159 /** */ 160 @Binds provideSecurityController(SecurityControllerImpl controllerImpl)161 SecurityController provideSecurityController(SecurityControllerImpl controllerImpl); 162 163 /** */ 164 @Binds provideSensitiveNotificationProtectionController( SensitiveNotificationProtectionControllerImpl controllerImpl)165 SensitiveNotificationProtectionController provideSensitiveNotificationProtectionController( 166 SensitiveNotificationProtectionControllerImpl controllerImpl); 167 168 /** */ 169 @Binds provideUserInfoContrller(UserInfoControllerImpl controllerImpl)170 UserInfoController provideUserInfoContrller(UserInfoControllerImpl controllerImpl); 171 172 /** */ 173 @Binds provideZenModeController(ZenModeControllerImpl controllerImpl)174 ZenModeController provideZenModeController(ZenModeControllerImpl controllerImpl); 175 176 /** */ 177 @Binds provideDeviceControlsController( DeviceControlsControllerImpl controllerImpl)178 DeviceControlsController provideDeviceControlsController( 179 DeviceControlsControllerImpl controllerImpl); 180 181 /** */ 182 @Binds provideWalletController(WalletControllerImpl controllerImpl)183 WalletController provideWalletController(WalletControllerImpl controllerImpl); 184 185 /** */ 186 @Binds provideAccessPointController( AccessPointControllerImpl accessPointControllerImpl)187 AccessPointController provideAccessPointController( 188 AccessPointControllerImpl accessPointControllerImpl); 189 190 /** */ 191 @Binds provideDevicePostureController( DevicePostureControllerImpl devicePostureControllerImpl)192 DevicePostureController provideDevicePostureController( 193 DevicePostureControllerImpl devicePostureControllerImpl); 194 195 /** */ 196 @Binds 197 @SysUISingleton 198 @Main provideGlobalConfigurationForwarder( @ain ConfigurationController configurationController)199 ConfigurationForwarder provideGlobalConfigurationForwarder( 200 @Main ConfigurationController configurationController); 201 202 /** */ 203 @Provides 204 @SysUISingleton 205 @Main provideGlobalConfigurationController( @pplication Context context, ConfigurationControllerImpl.Factory factory)206 static ConfigurationController provideGlobalConfigurationController( 207 @Application Context context, ConfigurationControllerImpl.Factory factory) { 208 return factory.create(context); 209 } 210 211 /** */ 212 @SysUISingleton 213 @Provides provideAccessPointControllerImpl( @pplication Context context, UserManager userManager, UserTracker userTracker, @Main Executor mainExecutor, WifiPickerTrackerFactory wifiPickerTrackerFactory )214 static AccessPointControllerImpl provideAccessPointControllerImpl( 215 @Application Context context, 216 UserManager userManager, 217 UserTracker userTracker, 218 @Main Executor mainExecutor, 219 WifiPickerTrackerFactory wifiPickerTrackerFactory 220 ) { 221 AccessPointControllerImpl controller = new AccessPointControllerImpl( 222 context, 223 userManager, 224 userTracker, 225 mainExecutor, 226 wifiPickerTrackerFactory 227 ); 228 controller.init(); 229 return controller; 230 } 231 232 /** */ 233 @SysUISingleton 234 @Provides provideAndroidSecureSettings(Context context)235 static SecureSettings provideAndroidSecureSettings(Context context) { 236 return new AndroidSecureSettings(context.getContentResolver()); 237 } 238 239 /** */ 240 @SysUISingleton 241 @Provides providePosturesHelper(Context context, DeviceStateManager deviceStateManager)242 static PosturesHelper providePosturesHelper(Context context, 243 DeviceStateManager deviceStateManager) { 244 return new PosturesHelper(context, deviceStateManager); 245 } 246 247 /** Returns a singleton instance of DeviceStateAutoRotateSettingManager based on auto-rotate 248 * refactor flag. */ 249 @SysUISingleton 250 @Provides provideAutoRotateSettingsManager( Context context, @Background Executor bgExecutor, SecureSettings secureSettings, @Main Handler mainHandler, PosturesHelper posturesHelper )251 static DeviceStateAutoRotateSettingManager provideAutoRotateSettingsManager( 252 Context context, 253 @Background Executor bgExecutor, 254 SecureSettings secureSettings, 255 @Main Handler mainHandler, 256 PosturesHelper posturesHelper 257 ) { 258 return DeviceStateAutoRotateSettingManagerProvider.createInstance(context, bgExecutor, 259 secureSettings, mainHandler, posturesHelper); 260 } 261 262 /** 263 * Default values for per-device state rotation lock settings. 264 */ 265 @Provides 266 @Named(DEVICE_STATE_ROTATION_LOCK_DEFAULTS) providesDeviceStateRotationLockDefaults(@ain Resources resources)267 static String[] providesDeviceStateRotationLockDefaults(@Main Resources resources) { 268 return resources.getStringArray( 269 R.array.config_perDeviceStateRotationLockDefaults); 270 } 271 272 /** */ 273 @Provides 274 @SysUISingleton provideDataSaverController(NetworkController networkController)275 static DataSaverController provideDataSaverController(NetworkController networkController) { 276 return networkController.getDataSaverController(); 277 } 278 279 /** Provides a log buffer for BatteryControllerImpl */ 280 @Provides 281 @SysUISingleton 282 @BatteryControllerLog provideBatteryControllerLog(LogBufferFactory factory)283 static LogBuffer provideBatteryControllerLog(LogBufferFactory factory) { 284 return factory.create(BatteryControllerLogger.TAG, 30); 285 } 286 287 /** Provides a log buffer for CastControllerImpl */ 288 @Provides 289 @SysUISingleton 290 @CastControllerLog provideCastControllerLog(LogBufferFactory factory)291 static LogBuffer provideCastControllerLog(LogBufferFactory factory) { 292 return factory.create("CastControllerLog", 50); 293 } 294 295 /** Provides a {@link ZenIconLoader} that fetches icons in a background thread. */ 296 @Provides 297 @SysUISingleton provideZenIconLoader( @iBackground ExecutorService backgroundExecutorService)298 static ZenIconLoader provideZenIconLoader( 299 @UiBackground ExecutorService backgroundExecutorService) { 300 return new ZenIconLoader(backgroundExecutorService); 301 } 302 } 303