• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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