• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.keyguard.dagger;
18 
19 import android.app.IActivityTaskManager;
20 import android.app.trust.TrustManager;
21 import android.content.Context;
22 import android.content.res.Resources;
23 import android.os.PowerManager;
24 
25 import com.android.internal.jank.InteractionJankMonitor;
26 import com.android.internal.logging.UiEventLogger;
27 import com.android.internal.statusbar.IStatusBarService;
28 import com.android.internal.widget.LockPatternUtils;
29 import com.android.keyguard.KeyguardDisplayManager;
30 import com.android.keyguard.KeyguardUpdateMonitor;
31 import com.android.keyguard.KeyguardViewController;
32 import com.android.keyguard.ViewMediatorCallback;
33 import com.android.keyguard.dagger.KeyguardDisplayModule;
34 import com.android.keyguard.dagger.KeyguardQsUserSwitchComponent;
35 import com.android.keyguard.dagger.KeyguardStatusBarViewComponent;
36 import com.android.keyguard.mediator.ScreenOnCoordinator;
37 import com.android.systemui.CoreStartable;
38 import com.android.systemui.Flags;
39 import com.android.systemui.animation.ActivityTransitionAnimator;
40 import com.android.systemui.bouncer.dagger.BouncerLoggerModule;
41 import com.android.systemui.broadcast.BroadcastDispatcher;
42 import com.android.systemui.classifier.FalsingCollector;
43 import com.android.systemui.classifier.FalsingModule;
44 import com.android.systemui.communal.domain.interactor.CommunalSceneInteractor;
45 import com.android.systemui.communal.domain.interactor.CommunalSettingsInteractor;
46 import com.android.systemui.communal.ui.viewmodel.CommunalTransitionViewModel;
47 import com.android.systemui.dagger.SysUISingleton;
48 import com.android.systemui.dagger.qualifiers.Main;
49 import com.android.systemui.dagger.qualifiers.UiBackground;
50 import com.android.systemui.dreams.DreamOverlayStateController;
51 import com.android.systemui.dreams.ui.viewmodel.DreamViewModel;
52 import com.android.systemui.dump.DumpManager;
53 import com.android.systemui.flags.FeatureFlags;
54 import com.android.systemui.flags.SystemPropertiesHelper;
55 import com.android.systemui.keyguard.DismissCallbackRegistry;
56 import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
57 import com.android.systemui.keyguard.KeyguardViewMediator;
58 import com.android.systemui.keyguard.WindowManagerLockscreenVisibilityManager;
59 import com.android.systemui.keyguard.WindowManagerOcclusionManager;
60 import com.android.systemui.keyguard.data.quickaffordance.KeyguardDataQuickAffordanceModule;
61 import com.android.systemui.keyguard.data.repository.DeviceEntryFaceAuthModule;
62 import com.android.systemui.keyguard.data.repository.KeyguardRepositoryModule;
63 import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor;
64 import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionBootInteractor;
65 import com.android.systemui.keyguard.domain.interactor.StartKeyguardTransitionModule;
66 import com.android.systemui.keyguard.ui.binder.SideFpsProgressBarViewBinder;
67 import com.android.systemui.keyguard.ui.transitions.BlurConfig;
68 import com.android.systemui.keyguard.ui.transitions.DeviceEntryIconTransitionModule;
69 import com.android.systemui.keyguard.ui.view.AlternateBouncerWindowViewBinder;
70 import com.android.systemui.keyguard.ui.viewmodel.KeyguardQuickAffordancesCombinedViewModelModule;
71 import com.android.systemui.log.SessionTracker;
72 import com.android.systemui.navigationbar.NavigationModeController;
73 import com.android.systemui.process.ProcessWrapper;
74 import com.android.systemui.res.R;
75 import com.android.systemui.settings.UserTracker;
76 import com.android.systemui.shade.ShadeController;
77 import com.android.systemui.shade.ShadeDisplayAware;
78 import com.android.systemui.statusbar.NotificationShadeDepthController;
79 import com.android.systemui.statusbar.NotificationShadeWindowController;
80 import com.android.systemui.statusbar.SysuiStatusBarStateController;
81 import com.android.systemui.statusbar.phone.DozeParameters;
82 import com.android.systemui.statusbar.phone.ScreenOffAnimationController;
83 import com.android.systemui.statusbar.phone.ScrimController;
84 import com.android.systemui.statusbar.policy.KeyguardStateController;
85 import com.android.systemui.statusbar.policy.UserSwitcherController;
86 import com.android.systemui.user.domain.interactor.SelectedUserInteractor;
87 import com.android.systemui.util.DeviceConfigProxy;
88 import com.android.systemui.util.ThreadAssert;
89 import com.android.systemui.util.kotlin.JavaAdapter;
90 import com.android.systemui.util.settings.SecureSettings;
91 import com.android.systemui.util.settings.SystemSettings;
92 import com.android.systemui.util.time.SystemClock;
93 import com.android.systemui.wallpapers.data.repository.WallpaperRepository;
94 import com.android.wm.shell.keyguard.KeyguardTransitions;
95 
96 import dagger.Binds;
97 import dagger.Lazy;
98 import dagger.Module;
99 import dagger.Provides;
100 import dagger.multibindings.ClassKey;
101 import dagger.multibindings.IntoMap;
102 
103 import kotlinx.coroutines.CoroutineDispatcher;
104 
105 import java.util.concurrent.Executor;
106 
107 /**
108  * Dagger Module providing keyguard.
109  */
110 @Module(subcomponents = {
111         KeyguardQsUserSwitchComponent.class,
112         KeyguardStatusBarViewComponent.class},
113         includes = {
114             DeviceEntryIconTransitionModule.class,
115             FalsingModule.class,
116             GlanceableHubTransitionModule.class,
117             GlanceableHubTransitionImplModule.class,
118             PrimaryBouncerTransitionModule.class,
119             PrimaryBouncerTransitionImplModule.class,
120             KeyguardDataQuickAffordanceModule.class,
121             KeyguardQuickAffordancesCombinedViewModelModule.class,
122             KeyguardRepositoryModule.class,
123             DeviceEntryFaceAuthModule.class,
124             KeyguardDisplayModule.class,
125             StartKeyguardTransitionModule.class,
126             ResourceTrimmerModule.class,
127             BouncerLoggerModule.class,
128         })
129 public interface KeyguardModule {
130     /**
131      * Provides our instance of KeyguardViewMediator which is considered optional.
132      */
133     @Provides
134     @SysUISingleton
newKeyguardViewMediator( @hadeDisplayAware Context context, UiEventLogger uiEventLogger, SessionTracker sessionTracker, UserTracker userTracker, FalsingCollector falsingCollector, LockPatternUtils lockPatternUtils, BroadcastDispatcher broadcastDispatcher, Lazy<KeyguardViewController> statusBarKeyguardViewManagerLazy, DismissCallbackRegistry dismissCallbackRegistry, KeyguardUpdateMonitor updateMonitor, DumpManager dumpManager, PowerManager powerManager, TrustManager trustManager, UserSwitcherController userSwitcherController, @UiBackground Executor uiBgExecutor, DeviceConfigProxy deviceConfig, NavigationModeController navigationModeController, KeyguardDisplayManager keyguardDisplayManager, DozeParameters dozeParameters, SysuiStatusBarStateController statusBarStateController, KeyguardStateController keyguardStateController, Lazy<KeyguardUnlockAnimationController> keyguardUnlockAnimationController, ScreenOffAnimationController screenOffAnimationController, Lazy<NotificationShadeDepthController> notificationShadeDepthController, ScreenOnCoordinator screenOnCoordinator, KeyguardTransitions keyguardTransitions, InteractionJankMonitor interactionJankMonitor, DreamOverlayStateController dreamOverlayStateController, JavaAdapter javaAdapter, WallpaperRepository wallpaperRepository, Lazy<ShadeController> shadeController, Lazy<NotificationShadeWindowController> notificationShadeWindowController, Lazy<ActivityTransitionAnimator> activityTransitionAnimator, Lazy<ScrimController> scrimControllerLazy, IActivityTaskManager activityTaskManagerService, IStatusBarService statusBarService, FeatureFlags featureFlags, SecureSettings secureSettings, SystemSettings systemSettings, SystemClock systemClock, ProcessWrapper processWrapper, @Main CoroutineDispatcher mainDispatcher, Lazy<DreamViewModel> dreamViewModel, Lazy<CommunalTransitionViewModel> communalTransitionViewModel, SystemPropertiesHelper systemPropertiesHelper, Lazy<WindowManagerLockscreenVisibilityManager> wmLockscreenVisibilityManager, SelectedUserInteractor selectedUserInteractor, KeyguardInteractor keyguardInteractor, KeyguardTransitionBootInteractor transitionBootInteractor, Lazy<CommunalSceneInteractor> communalSceneInteractor, Lazy<CommunalSettingsInteractor> communalSettingsInteractor, WindowManagerOcclusionManager windowManagerOcclusionManager)135     static KeyguardViewMediator newKeyguardViewMediator(
136             @ShadeDisplayAware Context context,
137             UiEventLogger uiEventLogger,
138             SessionTracker sessionTracker,
139             UserTracker userTracker,
140             FalsingCollector falsingCollector,
141             LockPatternUtils lockPatternUtils,
142             BroadcastDispatcher broadcastDispatcher,
143             Lazy<KeyguardViewController> statusBarKeyguardViewManagerLazy,
144             DismissCallbackRegistry dismissCallbackRegistry,
145             KeyguardUpdateMonitor updateMonitor,
146             DumpManager dumpManager,
147             PowerManager powerManager,
148             TrustManager trustManager,
149             UserSwitcherController userSwitcherController,
150             @UiBackground Executor uiBgExecutor,
151             DeviceConfigProxy deviceConfig,
152             NavigationModeController navigationModeController,
153             KeyguardDisplayManager keyguardDisplayManager,
154             DozeParameters dozeParameters,
155             SysuiStatusBarStateController statusBarStateController,
156             KeyguardStateController keyguardStateController,
157             Lazy<KeyguardUnlockAnimationController> keyguardUnlockAnimationController,
158             ScreenOffAnimationController screenOffAnimationController,
159             Lazy<NotificationShadeDepthController> notificationShadeDepthController,
160             ScreenOnCoordinator screenOnCoordinator,
161             KeyguardTransitions keyguardTransitions,
162             InteractionJankMonitor interactionJankMonitor,
163             DreamOverlayStateController dreamOverlayStateController,
164             JavaAdapter javaAdapter,
165             WallpaperRepository wallpaperRepository,
166             Lazy<ShadeController> shadeController,
167             Lazy<NotificationShadeWindowController> notificationShadeWindowController,
168             Lazy<ActivityTransitionAnimator> activityTransitionAnimator,
169             Lazy<ScrimController> scrimControllerLazy,
170             IActivityTaskManager activityTaskManagerService,
171             IStatusBarService statusBarService,
172             FeatureFlags featureFlags,
173             SecureSettings secureSettings,
174             SystemSettings systemSettings,
175             SystemClock systemClock,
176             ProcessWrapper processWrapper,
177             @Main CoroutineDispatcher mainDispatcher,
178             Lazy<DreamViewModel> dreamViewModel,
179             Lazy<CommunalTransitionViewModel> communalTransitionViewModel,
180             SystemPropertiesHelper systemPropertiesHelper,
181             Lazy<WindowManagerLockscreenVisibilityManager> wmLockscreenVisibilityManager,
182             SelectedUserInteractor selectedUserInteractor,
183             KeyguardInteractor keyguardInteractor,
184             KeyguardTransitionBootInteractor transitionBootInteractor,
185             Lazy<CommunalSceneInteractor> communalSceneInteractor,
186             Lazy<CommunalSettingsInteractor> communalSettingsInteractor,
187             WindowManagerOcclusionManager windowManagerOcclusionManager) {
188         return new KeyguardViewMediator(
189                 context,
190                 uiEventLogger,
191                 sessionTracker,
192                 userTracker,
193                 falsingCollector,
194                 lockPatternUtils,
195                 broadcastDispatcher,
196                 statusBarKeyguardViewManagerLazy,
197                 dismissCallbackRegistry,
198                 updateMonitor,
199                 dumpManager,
200                 uiBgExecutor,
201                 powerManager,
202                 trustManager,
203                 userSwitcherController,
204                 deviceConfig,
205                 navigationModeController,
206                 keyguardDisplayManager,
207                 dozeParameters,
208                 statusBarStateController,
209                 keyguardStateController,
210                 keyguardUnlockAnimationController,
211                 screenOffAnimationController,
212                 notificationShadeDepthController,
213                 screenOnCoordinator,
214                 keyguardTransitions,
215                 interactionJankMonitor,
216                 dreamOverlayStateController,
217                 javaAdapter,
218                 wallpaperRepository,
219                 shadeController,
220                 notificationShadeWindowController,
221                 activityTransitionAnimator,
222                 scrimControllerLazy,
223                 activityTaskManagerService,
224                 statusBarService,
225                 featureFlags,
226                 secureSettings,
227                 systemSettings,
228                 systemClock,
229                 processWrapper,
230                 mainDispatcher,
231                 dreamViewModel,
232                 communalTransitionViewModel,
233                 systemPropertiesHelper,
234                 wmLockscreenVisibilityManager,
235                 selectedUserInteractor,
236                 keyguardInteractor,
237                 transitionBootInteractor,
238                 communalSceneInteractor,
239                 communalSettingsInteractor,
240                 windowManagerOcclusionManager);
241     }
242 
243     /** */
244     @Provides
providesViewMediatorCallback(KeyguardViewMediator viewMediator)245     static ViewMediatorCallback providesViewMediatorCallback(KeyguardViewMediator viewMediator) {
246         return viewMediator.getViewMediatorCallback();
247     }
248 
249     /** */
250     @Provides
251     @SysUISingleton
provideBlurConfig(@ain Resources resources)252     static BlurConfig provideBlurConfig(@Main Resources resources) {
253         int maxBlurRadius =
254                 Flags.notificationShadeBlur() || Flags.bouncerUiRevamp()
255                         || Flags.glanceableHubBlurredBackground()
256                         ? resources.getDimensionPixelSize(R.dimen.max_shade_window_blur_radius)
257                         : resources.getDimensionPixelSize(R.dimen.max_window_blur_radius);
258 
259         return new BlurConfig(0.0f, maxBlurRadius);
260     }
261 
262     /** */
263     @Provides
264     @SysUISingleton
providesThreadAssert()265     static ThreadAssert providesThreadAssert() {
266         return new ThreadAssert();
267     }
268 
269     /** Binds {@link KeyguardUpdateMonitor} as a {@link CoreStartable}. */
270     @Binds
271     @IntoMap
272     @ClassKey(KeyguardUpdateMonitor.class)
bindsKeyguardUpdateMonitor(KeyguardUpdateMonitor keyguardUpdateMonitor)273     CoreStartable bindsKeyguardUpdateMonitor(KeyguardUpdateMonitor keyguardUpdateMonitor);
274 
275     /***/
276     @Binds
277     @IntoMap
278     @ClassKey(AlternateBouncerWindowViewBinder.class)
bindsAlternateBouncerWindowViewBinder(AlternateBouncerWindowViewBinder binder)279     CoreStartable bindsAlternateBouncerWindowViewBinder(AlternateBouncerWindowViewBinder binder);
280 
281     /** A silly lint rule made me write this, this is a self-documenting function! */
282     @Binds
283     @IntoMap
284     @ClassKey(SideFpsProgressBarViewBinder.class)
bindSideFpsProgressBarViewBinder(SideFpsProgressBarViewBinder impl)285     CoreStartable bindSideFpsProgressBarViewBinder(SideFpsProgressBarViewBinder impl);
286 }
287