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 android.app.INotificationManager; 20 import android.app.Service; 21 import android.app.backup.BackupManager; 22 import android.content.Context; 23 import android.service.dreams.IDreamManager; 24 import android.view.Display; 25 26 import androidx.annotation.Nullable; 27 28 import com.android.internal.statusbar.IStatusBarService; 29 import com.android.keyguard.dagger.ClockRegistryModule; 30 import com.android.keyguard.dagger.KeyguardBouncerComponent; 31 import com.android.systemui.BootCompleteCache; 32 import com.android.systemui.BootCompleteCacheImpl; 33 import com.android.systemui.CameraProtectionModule; 34 import com.android.systemui.CoreStartable; 35 import com.android.systemui.KairosCoreStartableModule; 36 import com.android.systemui.SystemUISecondaryUserService; 37 import com.android.systemui.activity.ActivityManagerModule; 38 import com.android.systemui.ambient.dagger.AmbientModule; 39 import com.android.systemui.appops.dagger.AppOpsModule; 40 import com.android.systemui.assist.AssistModule; 41 import com.android.systemui.authentication.AuthenticationModule; 42 import com.android.systemui.biometrics.FingerprintInteractiveToAuthProvider; 43 import com.android.systemui.biometrics.FingerprintReEnrollNotification; 44 import com.android.systemui.biometrics.UdfpsDisplayModeProvider; 45 import com.android.systemui.biometrics.dagger.BiometricsModule; 46 import com.android.systemui.biometrics.domain.BiometricsDomainLayerModule; 47 import com.android.systemui.bouncer.data.repository.BouncerRepositoryModule; 48 import com.android.systemui.bouncer.domain.interactor.BouncerInteractorModule; 49 import com.android.systemui.bouncer.ui.BouncerViewModule; 50 import com.android.systemui.brightness.dagger.ScreenBrightnessModule; 51 import com.android.systemui.classifier.FalsingModule; 52 import com.android.systemui.clipboardoverlay.dagger.ClipboardOverlayModule; 53 import com.android.systemui.common.data.CommonDataLayerModule; 54 import com.android.systemui.common.ui.ConfigurationModule; 55 import com.android.systemui.common.ui.data.repository.ConfigurationRepositoryModule; 56 import com.android.systemui.common.usagestats.data.CommonUsageStatsDataLayerModule; 57 import com.android.systemui.communal.dagger.CommunalModule; 58 import com.android.systemui.complication.dagger.ComplicationComponent; 59 import com.android.systemui.compose.ComposeModule; 60 import com.android.systemui.controls.dagger.ControlsModule; 61 import com.android.systemui.dagger.qualifiers.Application; 62 import com.android.systemui.dagger.qualifiers.Main; 63 import com.android.systemui.dagger.qualifiers.SystemUser; 64 import com.android.systemui.dagger.qualifiers.UiBackground; 65 import com.android.systemui.demomode.dagger.DemoModeModule; 66 import com.android.systemui.deviceentry.DeviceEntryModule; 67 import com.android.systemui.display.DisplayModule; 68 import com.android.app.displaylib.PerDisplayRepository; 69 import com.android.systemui.display.dagger.SystemUIDisplaySubcomponent; 70 import com.android.systemui.doze.dagger.DozeComponent; 71 import com.android.systemui.dreams.dagger.DreamModule; 72 import com.android.systemui.flags.FeatureFlags; 73 import com.android.systemui.flags.FlagDependenciesModule; 74 import com.android.systemui.flags.FlagsModule; 75 import com.android.systemui.haptics.msdl.dagger.MSDLModule; 76 import com.android.systemui.inputmethod.InputMethodModule; 77 import com.android.systemui.keyboard.KeyboardModule; 78 import com.android.systemui.keyevent.data.repository.KeyEventRepositoryModule; 79 import com.android.systemui.keyguard.data.quickaffordance.KeyguardDataQuickAffordanceModule; 80 import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancesMetricsLogger; 81 import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancesMetricsLoggerImpl; 82 import com.android.systemui.keyguard.ui.composable.LockscreenContent; 83 import com.android.systemui.log.dagger.LogModule; 84 import com.android.systemui.log.dagger.MonitorLog; 85 import com.android.systemui.log.table.TableLogBuffer; 86 import com.android.systemui.lowlightclock.dagger.LowLightModule; 87 import com.android.systemui.mediaprojection.MediaProjectionModule; 88 import com.android.systemui.mediaprojection.appselector.MediaProjectionActivitiesModule; 89 import com.android.systemui.mediaprojection.taskswitcher.MediaProjectionTaskSwitcherModule; 90 import com.android.systemui.mediarouter.MediaRouterModule; 91 import com.android.systemui.model.SysUiState; 92 import com.android.systemui.motiontool.MotionToolModule; 93 import com.android.systemui.navigationbar.NavigationBarComponent; 94 import com.android.systemui.navigationbar.gestural.dagger.GestureModule; 95 import com.android.systemui.notetask.NoteTaskModule; 96 import com.android.systemui.people.PeopleModule; 97 import com.android.systemui.plugins.BcSmartspaceConfigPlugin; 98 import com.android.systemui.plugins.BcSmartspaceDataPlugin; 99 import com.android.systemui.privacy.PrivacyModule; 100 import com.android.systemui.process.condition.SystemProcessCondition; 101 import com.android.systemui.qs.FgsManagerController; 102 import com.android.systemui.qs.FgsManagerControllerImpl; 103 import com.android.systemui.qs.QSFragmentStartableModule; 104 import com.android.systemui.qs.footer.dagger.FooterActionsModule; 105 import com.android.systemui.qs.tiles.impl.qr.ui.model.QRCodeScannerModule; 106 import com.android.systemui.recents.Recents; 107 import com.android.systemui.recordissue.RecordIssueModule; 108 import com.android.systemui.retail.RetailModeModule; 109 import com.android.systemui.rotationlock.DeviceStateAutoRotateModule.BoundsDeviceStateAutoRotateModule; 110 import com.android.systemui.scene.shared.model.SceneContainerConfig; 111 import com.android.systemui.scene.shared.model.SceneDataSource; 112 import com.android.systemui.scene.shared.model.SceneDataSourceDelegator; 113 import com.android.systemui.scene.ui.view.WindowRootViewComponent; 114 import com.android.systemui.screenrecord.ScreenRecordModule; 115 import com.android.systemui.screenshot.dagger.ScreenshotModule; 116 import com.android.systemui.security.data.repository.SecurityRepositoryModule; 117 import com.android.systemui.settings.UserTracker; 118 import com.android.systemui.shade.ShadeController; 119 import com.android.systemui.shade.ShadeDisplayAwareModule; 120 import com.android.systemui.shade.transition.LargeScreenShadeInterpolator; 121 import com.android.systemui.shade.transition.LargeScreenShadeInterpolatorImpl; 122 import com.android.systemui.shared.condition.Monitor; 123 import com.android.systemui.smartspace.dagger.SmartspaceModule; 124 import com.android.systemui.startable.Dependencies; 125 import com.android.systemui.statusbar.CommandQueue; 126 import com.android.systemui.statusbar.NotificationLockscreenUserManager; 127 import com.android.systemui.statusbar.NotificationShadeWindowController; 128 import com.android.systemui.statusbar.chips.StatusBarChipsModule; 129 import com.android.systemui.statusbar.connectivity.ConnectivityModule; 130 import com.android.systemui.statusbar.dagger.StatusBarModule; 131 import com.android.systemui.statusbar.disableflags.dagger.DisableFlagsModule; 132 import com.android.systemui.statusbar.events.StatusBarEventsModule; 133 import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler; 134 import com.android.systemui.statusbar.notification.NotifPipelineFlags; 135 import com.android.systemui.statusbar.notification.collection.NotifPipeline; 136 import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinder; 137 import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinderImpl; 138 import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection; 139 import com.android.systemui.statusbar.notification.collection.render.NotificationVisibilityProvider; 140 import com.android.systemui.statusbar.notification.headsup.HeadsUpManager; 141 import com.android.systemui.statusbar.notification.interruption.VisualInterruptionDecisionProvider; 142 import com.android.systemui.statusbar.notification.people.PeopleHubModule; 143 import com.android.systemui.statusbar.notification.row.dagger.ExpandableNotificationRowComponent; 144 import com.android.systemui.statusbar.notification.row.dagger.NotificationRowComponent; 145 import com.android.systemui.statusbar.phone.CentralSurfaces; 146 import com.android.systemui.statusbar.phone.ConfigurationControllerModule; 147 import com.android.systemui.statusbar.phone.LetterboxModule; 148 import com.android.systemui.statusbar.pipeline.dagger.StatusBarPipelineModule; 149 import com.android.systemui.statusbar.policy.DeviceStateRotationLockSettingController; 150 import com.android.systemui.statusbar.policy.KeyguardStateController; 151 import com.android.systemui.statusbar.policy.PolicyModule; 152 import com.android.systemui.statusbar.policy.SensitiveNotificationProtectionController; 153 import com.android.systemui.statusbar.policy.ZenModeController; 154 import com.android.systemui.statusbar.policy.dagger.SmartRepliesInflationModule; 155 import com.android.systemui.statusbar.policy.dagger.StatusBarPolicyModule; 156 import com.android.systemui.statusbar.ui.binder.StatusBarViewBinderModule; 157 import com.android.systemui.statusbar.window.StatusBarWindowModule; 158 import com.android.systemui.telephony.data.repository.TelephonyRepositoryModule; 159 import com.android.systemui.temporarydisplay.dagger.TemporaryDisplayModule; 160 import com.android.systemui.touchpad.TouchpadModule; 161 import com.android.systemui.tuner.dagger.TunerModule; 162 import com.android.systemui.user.UserModule; 163 import com.android.systemui.user.domain.UserDomainLayerModule; 164 import com.android.systemui.util.EventLogModule; 165 import com.android.systemui.util.concurrency.SysUIConcurrencyModule; 166 import com.android.systemui.util.dagger.UtilModule; 167 import com.android.systemui.util.kotlin.SysUICoroutinesModule; 168 import com.android.systemui.util.reference.ReferenceModule; 169 import com.android.systemui.util.sensors.SensorModule; 170 import com.android.systemui.util.settings.SettingsProxy; 171 import com.android.systemui.util.settings.SettingsUtilModule; 172 import com.android.systemui.util.time.SystemClock; 173 import com.android.systemui.util.time.SystemClockImpl; 174 import com.android.systemui.wallet.dagger.WalletModule; 175 import com.android.systemui.wmshell.BubblesManager; 176 import com.android.wm.shell.bubbles.Bubbles; 177 178 import dagger.Binds; 179 import dagger.BindsOptionalOf; 180 import dagger.Module; 181 import dagger.Provides; 182 import dagger.multibindings.ClassKey; 183 import dagger.multibindings.IntoMap; 184 import dagger.multibindings.Multibinds; 185 186 import kotlinx.coroutines.CoroutineScope; 187 188 import java.util.Collections; 189 import java.util.Map; 190 import java.util.Optional; 191 import java.util.Set; 192 import java.util.concurrent.Executor; 193 194 import javax.inject.Named; 195 196 /** 197 * A dagger module for injecting components of System UI that are required by System UI. 198 * 199 * If your feature can be excluded, subclassed, or re-implemented by a variant of SystemUI, put 200 * your Dagger Module in {@link ReferenceSystemUIModule} and/or any variant modules that 201 * rely on the feature. 202 * 203 * Adding an entry in this file means that _all_ variants of SystemUI will receive that code. They 204 * may not appreciate that. 205 */ 206 @Module(includes = { 207 ActivityManagerModule.class, 208 AmbientModule.class, 209 AppOpsModule.class, 210 AssistModule.class, 211 AuthenticationModule.class, 212 BiometricsModule.class, 213 BiometricsDomainLayerModule.class, 214 BouncerInteractorModule.class, 215 BouncerRepositoryModule.class, 216 BouncerViewModule.class, 217 CameraProtectionModule.class, 218 ClipboardOverlayModule.class, 219 ClockRegistryModule.class, 220 CommunalModule.class, 221 CommonDataLayerModule.class, 222 ComposeModule.class, 223 ConfigurationModule.class, 224 ConfigurationRepositoryModule.class, 225 CommonUsageStatsDataLayerModule.class, 226 ConfigurationControllerModule.class, 227 ConnectivityModule.class, 228 ControlsModule.class, 229 DemoModeModule.class, 230 DeviceEntryModule.class, 231 DisableFlagsModule.class, 232 DisplayModule.class, 233 DreamModule.class, 234 EventLogModule.class, 235 FalsingModule.class, 236 FlagsModule.class, 237 FlagDependenciesModule.class, 238 FooterActionsModule.class, 239 KairosCoreStartableModule.class, 240 GestureModule.class, 241 InputMethodModule.class, 242 KeyEventRepositoryModule.class, 243 KeyboardModule.class, 244 KeyguardDataQuickAffordanceModule.class, 245 LetterboxModule.class, 246 LogModule.class, 247 MediaProjectionActivitiesModule.class, 248 MediaProjectionModule.class, 249 MediaProjectionTaskSwitcherModule.class, 250 MediaRouterModule.class, 251 MotionToolModule.class, 252 MSDLModule.class, 253 PeopleHubModule.class, 254 PeopleModule.class, 255 PluginModule.class, 256 PolicyModule.class, 257 PrivacyModule.class, 258 QRCodeScannerModule.class, 259 QSFragmentStartableModule.class, 260 RecordIssueModule.class, 261 ReferenceModule.class, 262 RetailModeModule.class, 263 ScreenBrightnessModule.class, 264 ScreenshotModule.class, 265 SensorModule.class, 266 SecurityRepositoryModule.class, 267 ScreenRecordModule.class, 268 SettingsUtilModule.class, 269 SmartRepliesInflationModule.class, 270 SmartspaceModule.class, 271 StatusBarEventsModule.class, 272 StatusBarModule.class, 273 StatusBarChipsModule.class, 274 StatusBarPipelineModule.class, 275 StatusBarPolicyModule.class, 276 StatusBarViewBinderModule.class, 277 StatusBarWindowModule.class, 278 SystemPropertiesFlagsModule.class, 279 SysUIConcurrencyModule.class, 280 SysUICoroutinesModule.class, 281 CommonSystemUIUnfoldModule.class, 282 TelephonyRepositoryModule.class, 283 TemporaryDisplayModule.class, 284 ShadeDisplayAwareModule.class, 285 TouchpadModule.class, 286 TunerModule.class, 287 UserDomainLayerModule.class, 288 UserModule.class, 289 UtilModule.class, 290 NoteTaskModule.class, 291 WalletModule.class, 292 LowLightModule.class, 293 PerDisplayRepositoriesModule.class 294 }, 295 subcomponents = { 296 ComplicationComponent.class, 297 DozeComponent.class, 298 ExpandableNotificationRowComponent.class, 299 KeyguardBouncerComponent.class, 300 NavigationBarComponent.class, 301 NotificationRowComponent.class, 302 WindowRootViewComponent.class, 303 SystemUIDisplaySubcomponent.class, 304 }) 305 public abstract class SystemUIModule { 306 307 @Multibinds 308 @Dependencies startableDependencyMap()309 abstract Map<Class<?>, Set<Class<? extends CoreStartable>>> startableDependencyMap(); 310 311 @Binds bindBootCompleteCache(BootCompleteCacheImpl bootCompleteCache)312 abstract BootCompleteCache bindBootCompleteCache(BootCompleteCacheImpl bootCompleteCache); 313 314 /** 315 * 316 */ 317 @Binds bindComponentHelper( ContextComponentResolver componentHelper)318 public abstract ContextComponentHelper bindComponentHelper( 319 ContextComponentResolver componentHelper); 320 321 /** 322 * 323 */ 324 @Binds bindNotificationRowBinder( NotificationRowBinderImpl notificationRowBinder)325 public abstract NotificationRowBinder bindNotificationRowBinder( 326 NotificationRowBinderImpl notificationRowBinder); 327 328 @SysUISingleton 329 @Provides provideSysUiState( PerDisplayRepository<SysUiState> repository)330 static SysUiState provideSysUiState( 331 PerDisplayRepository<SysUiState> repository) { 332 return repository.get(Display.DEFAULT_DISPLAY); 333 } 334 335 /** 336 * Provides the monitor for SystemUI that requires the process running as the system user. 337 */ 338 @SysUISingleton 339 @Provides 340 @SystemUser provideSystemUserMonitor(@ain Executor executor, SystemProcessCondition systemProcessCondition, @MonitorLog TableLogBuffer logBuffer)341 static Monitor provideSystemUserMonitor(@Main Executor executor, 342 SystemProcessCondition systemProcessCondition, @MonitorLog TableLogBuffer logBuffer) { 343 return new Monitor(executor, Collections.singleton(systemProcessCondition), logBuffer); 344 } 345 346 /** Provides the package name for SystemUI. */ 347 @SysUISingleton 348 @Provides provideBackupManager(@pplication Context context)349 static BackupManager provideBackupManager(@Application Context context) { 350 return new BackupManager(context); 351 } 352 353 @BindsOptionalOf optionalCommandQueue()354 abstract CommandQueue optionalCommandQueue(); 355 356 @BindsOptionalOf optionalHeadsUpManager()357 abstract HeadsUpManager optionalHeadsUpManager(); 358 359 @BindsOptionalOf optionalBcSmartspaceDataPlugin()360 abstract BcSmartspaceDataPlugin optionalBcSmartspaceDataPlugin(); 361 362 @BindsOptionalOf optionalBcSmartspaceConfigPlugin()363 abstract BcSmartspaceConfigPlugin optionalBcSmartspaceConfigPlugin(); 364 365 @BindsOptionalOf 366 @Named(SmartspaceModule.DATE_SMARTSPACE_DATA_PLUGIN) optionalDateSmartspaceConfigPlugin()367 abstract BcSmartspaceDataPlugin optionalDateSmartspaceConfigPlugin(); 368 369 @BindsOptionalOf 370 @Named(SmartspaceModule.WEATHER_SMARTSPACE_DATA_PLUGIN) optionalWeatherSmartspaceConfigPlugin()371 abstract BcSmartspaceDataPlugin optionalWeatherSmartspaceConfigPlugin(); 372 373 @BindsOptionalOf optionalRecents()374 abstract Recents optionalRecents(); 375 376 @BindsOptionalOf optionalCentralSurfaces()377 abstract CentralSurfaces optionalCentralSurfaces(); 378 379 @BindsOptionalOf optionalUdfpsDisplayModeProvider()380 abstract UdfpsDisplayModeProvider optionalUdfpsDisplayModeProvider(); 381 382 @BindsOptionalOf optionalFingerprintInteractiveToAuthProvider()383 abstract FingerprintInteractiveToAuthProvider optionalFingerprintInteractiveToAuthProvider(); 384 385 @BindsOptionalOf optionalSystemStatusAnimationScheduler()386 abstract SystemStatusAnimationScheduler optionalSystemStatusAnimationScheduler(); 387 388 @BindsOptionalOf optionalFingerprintReEnrollNotification()389 abstract FingerprintReEnrollNotification optionalFingerprintReEnrollNotification(); 390 391 @BindsOptionalOf optionalLockscreenContent()392 abstract LockscreenContent optionalLockscreenContent(); 393 394 @BindsOptionalOf 395 @BoundsDeviceStateAutoRotateModule 396 abstract Optional<DeviceStateRotationLockSettingController> optionalDeviceStateRotationLockSettingController()397 optionalDeviceStateRotationLockSettingController(); 398 399 @SysUISingleton 400 @Binds bindSystemClock(SystemClockImpl systemClock)401 abstract SystemClock bindSystemClock(SystemClockImpl systemClock); 402 403 // TODO: This should provided by the WM component 404 405 /** Provides Optional of BubbleManager */ 406 @SysUISingleton 407 @Provides provideBubblesManager(Context context, Optional<Bubbles> bubblesOptional, NotificationShadeWindowController notificationShadeWindowController, KeyguardStateController keyguardStateController, ShadeController shadeController, @Nullable IStatusBarService statusBarService, INotificationManager notificationManager, IDreamManager dreamManager, NotificationVisibilityProvider visibilityProvider, VisualInterruptionDecisionProvider visualInterruptionDecisionProvider, ZenModeController zenModeController, NotificationLockscreenUserManager notifUserManager, SensitiveNotificationProtectionController sensitiveNotificationProtectionController, CommonNotifCollection notifCollection, NotifPipeline notifPipeline, SysUiState sysUiState, FeatureFlags featureFlags, NotifPipelineFlags notifPipelineFlags, @Main Executor sysuiMainExecutor, @UiBackground Executor sysuiUiBgExecutor)408 static Optional<BubblesManager> provideBubblesManager(Context context, 409 Optional<Bubbles> bubblesOptional, 410 NotificationShadeWindowController notificationShadeWindowController, 411 KeyguardStateController keyguardStateController, 412 ShadeController shadeController, 413 @Nullable IStatusBarService statusBarService, 414 INotificationManager notificationManager, 415 IDreamManager dreamManager, 416 NotificationVisibilityProvider visibilityProvider, 417 VisualInterruptionDecisionProvider visualInterruptionDecisionProvider, 418 ZenModeController zenModeController, 419 NotificationLockscreenUserManager notifUserManager, 420 SensitiveNotificationProtectionController sensitiveNotificationProtectionController, 421 CommonNotifCollection notifCollection, 422 NotifPipeline notifPipeline, 423 SysUiState sysUiState, 424 FeatureFlags featureFlags, 425 NotifPipelineFlags notifPipelineFlags, 426 @Main Executor sysuiMainExecutor, 427 @UiBackground Executor sysuiUiBgExecutor) { 428 return Optional.ofNullable(BubblesManager.create(context, 429 bubblesOptional, 430 notificationShadeWindowController, 431 keyguardStateController, 432 shadeController, 433 statusBarService, 434 notificationManager, 435 dreamManager, 436 visibilityProvider, 437 visualInterruptionDecisionProvider, 438 zenModeController, 439 notifUserManager, 440 sensitiveNotificationProtectionController, 441 notifCollection, 442 notifPipeline, 443 sysUiState, 444 featureFlags, 445 notifPipelineFlags, 446 sysuiMainExecutor, 447 sysuiUiBgExecutor)); 448 } 449 450 @Provides providesKeyguardQuickAffordancesMetricsLogger()451 static KeyguardQuickAffordancesMetricsLogger providesKeyguardQuickAffordancesMetricsLogger() { 452 return new KeyguardQuickAffordancesMetricsLoggerImpl(); 453 } 454 455 @Binds bindFgsManagerController(FgsManagerControllerImpl impl)456 abstract FgsManagerController bindFgsManagerController(FgsManagerControllerImpl impl); 457 458 @Binds largeScreensShadeInterpolator( LargeScreenShadeInterpolatorImpl impl)459 abstract LargeScreenShadeInterpolator largeScreensShadeInterpolator( 460 LargeScreenShadeInterpolatorImpl impl); 461 462 @Binds 463 @IntoMap 464 @ClassKey(SystemUISecondaryUserService.class) bindsSystemUISecondaryUserService(SystemUISecondaryUserService service)465 abstract Service bindsSystemUISecondaryUserService(SystemUISecondaryUserService service); 466 467 @Provides 468 @SysUISingleton providesSceneDataSourceDelegator( @pplication CoroutineScope applicationScope, SceneContainerConfig config)469 static SceneDataSourceDelegator providesSceneDataSourceDelegator( 470 @Application CoroutineScope applicationScope, SceneContainerConfig config) { 471 return new SceneDataSourceDelegator(applicationScope, config); 472 } 473 474 @Provides 475 @SysUISingleton 476 static Optional<DeviceStateRotationLockSettingController> provideDeviceStateRotationLockSettingController( @oundsDeviceStateAutoRotateModule Optional<Optional<DeviceStateRotationLockSettingController>> optionalOfOptional )477 provideDeviceStateRotationLockSettingController( 478 @BoundsDeviceStateAutoRotateModule 479 Optional<Optional<DeviceStateRotationLockSettingController>> optionalOfOptional 480 ) { 481 return optionalOfOptional.orElseGet(Optional::empty); 482 } 483 484 @Binds bindSceneDataSource(SceneDataSourceDelegator delegator)485 abstract SceneDataSource bindSceneDataSource(SceneDataSourceDelegator delegator); 486 487 @Provides provideCurrentUserId(UserTracker userTracker)488 static SettingsProxy.CurrentUserIdProvider provideCurrentUserId(UserTracker userTracker) { 489 return userTracker::getUserId; 490 } 491 } 492