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.os.PowerManager;
23 
24 import com.android.internal.jank.InteractionJankMonitor;
25 import com.android.internal.logging.UiEventLogger;
26 import com.android.internal.widget.LockPatternUtils;
27 import com.android.keyguard.KeyguardDisplayManager;
28 import com.android.keyguard.KeyguardUpdateMonitor;
29 import com.android.keyguard.KeyguardViewController;
30 import com.android.keyguard.ViewMediatorCallback;
31 import com.android.keyguard.dagger.KeyguardDisplayModule;
32 import com.android.keyguard.dagger.KeyguardQsUserSwitchComponent;
33 import com.android.keyguard.dagger.KeyguardStatusBarViewComponent;
34 import com.android.keyguard.dagger.KeyguardStatusViewComponent;
35 import com.android.keyguard.dagger.KeyguardUserSwitcherComponent;
36 import com.android.keyguard.mediator.ScreenOnCoordinator;
37 import com.android.systemui.CoreStartable;
38 import com.android.systemui.animation.ActivityTransitionAnimator;
39 import com.android.systemui.bouncer.dagger.BouncerLoggerModule;
40 import com.android.systemui.broadcast.BroadcastDispatcher;
41 import com.android.systemui.classifier.FalsingCollector;
42 import com.android.systemui.classifier.FalsingModule;
43 import com.android.systemui.communal.ui.viewmodel.CommunalTransitionViewModel;
44 import com.android.systemui.dagger.SysUISingleton;
45 import com.android.systemui.dagger.qualifiers.Main;
46 import com.android.systemui.dagger.qualifiers.UiBackground;
47 import com.android.systemui.dreams.DreamOverlayStateController;
48 import com.android.systemui.dreams.ui.viewmodel.DreamViewModel;
49 import com.android.systemui.dump.DumpManager;
50 import com.android.systemui.flags.FeatureFlags;
51 import com.android.systemui.flags.SystemPropertiesHelper;
52 import com.android.systemui.keyguard.DismissCallbackRegistry;
53 import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
54 import com.android.systemui.keyguard.KeyguardViewMediator;
55 import com.android.systemui.keyguard.WindowManagerLockscreenVisibilityManager;
56 import com.android.systemui.keyguard.WindowManagerOcclusionManager;
57 import com.android.systemui.keyguard.data.quickaffordance.KeyguardDataQuickAffordanceModule;
58 import com.android.systemui.keyguard.data.repository.DeviceEntryFaceAuthModule;
59 import com.android.systemui.keyguard.data.repository.KeyguardRepositoryModule;
60 import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor;
61 import com.android.systemui.keyguard.domain.interactor.StartKeyguardTransitionModule;
62 import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancesMetricsLogger;
63 import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancesMetricsLoggerImpl;
64 import com.android.systemui.keyguard.ui.transitions.DeviceEntryIconTransitionModule;
65 import com.android.systemui.log.SessionTracker;
66 import com.android.systemui.navigationbar.NavigationModeController;
67 import com.android.systemui.settings.UserTracker;
68 import com.android.systemui.shade.ShadeController;
69 import com.android.systemui.statusbar.NotificationShadeDepthController;
70 import com.android.systemui.statusbar.NotificationShadeWindowController;
71 import com.android.systemui.statusbar.SysuiStatusBarStateController;
72 import com.android.systemui.statusbar.phone.DozeParameters;
73 import com.android.systemui.statusbar.phone.ScreenOffAnimationController;
74 import com.android.systemui.statusbar.phone.ScrimController;
75 import com.android.systemui.statusbar.policy.KeyguardStateController;
76 import com.android.systemui.statusbar.policy.UserSwitcherController;
77 import com.android.systemui.user.domain.interactor.SelectedUserInteractor;
78 import com.android.systemui.util.DeviceConfigProxy;
79 import com.android.systemui.util.ThreadAssert;
80 import com.android.systemui.util.kotlin.JavaAdapter;
81 import com.android.systemui.util.settings.SecureSettings;
82 import com.android.systemui.util.settings.SystemSettings;
83 import com.android.systemui.util.time.SystemClock;
84 import com.android.systemui.wallpapers.data.repository.WallpaperRepository;
85 import com.android.wm.shell.keyguard.KeyguardTransitions;
86 
87 import dagger.Binds;
88 import dagger.Lazy;
89 import dagger.Module;
90 import dagger.Provides;
91 import dagger.multibindings.ClassKey;
92 import dagger.multibindings.IntoMap;
93 
94 import kotlinx.coroutines.CoroutineDispatcher;
95 import kotlinx.coroutines.ExperimentalCoroutinesApi;
96 
97 import java.util.concurrent.Executor;
98 
99 /**
100  * Dagger Module providing keyguard.
101  */
102 @ExperimentalCoroutinesApi
103 @Module(subcomponents = {
104         KeyguardQsUserSwitchComponent.class,
105         KeyguardStatusBarViewComponent.class,
106         KeyguardStatusViewComponent.class,
107         KeyguardUserSwitcherComponent.class},
108         includes = {
109             DeviceEntryIconTransitionModule.class,
110             FalsingModule.class,
111             KeyguardDataQuickAffordanceModule.class,
112             KeyguardRepositoryModule.class,
113             DeviceEntryFaceAuthModule.class,
114             KeyguardDisplayModule.class,
115             StartKeyguardTransitionModule.class,
116             ResourceTrimmerModule.class,
117             BouncerLoggerModule.class,
118         })
119 public interface KeyguardModule {
120     /**
121      * Provides our instance of KeyguardViewMediator which is considered optional.
122      */
123     @Provides
124     @SysUISingleton
newKeyguardViewMediator( 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, FeatureFlags featureFlags, SecureSettings secureSettings, SystemSettings systemSettings, SystemClock systemClock, @Main CoroutineDispatcher mainDispatcher, Lazy<DreamViewModel> dreamViewModel, Lazy<CommunalTransitionViewModel> communalTransitionViewModel, SystemPropertiesHelper systemPropertiesHelper, Lazy<WindowManagerLockscreenVisibilityManager> wmLockscreenVisibilityManager, SelectedUserInteractor selectedUserInteractor, KeyguardInteractor keyguardInteractor, WindowManagerOcclusionManager windowManagerOcclusionManager)125     static KeyguardViewMediator newKeyguardViewMediator(
126             Context context,
127             UiEventLogger uiEventLogger,
128             SessionTracker sessionTracker,
129             UserTracker userTracker,
130             FalsingCollector falsingCollector,
131             LockPatternUtils lockPatternUtils,
132             BroadcastDispatcher broadcastDispatcher,
133             Lazy<KeyguardViewController> statusBarKeyguardViewManagerLazy,
134             DismissCallbackRegistry dismissCallbackRegistry,
135             KeyguardUpdateMonitor updateMonitor,
136             DumpManager dumpManager,
137             PowerManager powerManager,
138             TrustManager trustManager,
139             UserSwitcherController userSwitcherController,
140             @UiBackground Executor uiBgExecutor,
141             DeviceConfigProxy deviceConfig,
142             NavigationModeController navigationModeController,
143             KeyguardDisplayManager keyguardDisplayManager,
144             DozeParameters dozeParameters,
145             SysuiStatusBarStateController statusBarStateController,
146             KeyguardStateController keyguardStateController,
147             Lazy<KeyguardUnlockAnimationController> keyguardUnlockAnimationController,
148             ScreenOffAnimationController screenOffAnimationController,
149             Lazy<NotificationShadeDepthController> notificationShadeDepthController,
150             ScreenOnCoordinator screenOnCoordinator,
151             KeyguardTransitions keyguardTransitions,
152             InteractionJankMonitor interactionJankMonitor,
153             DreamOverlayStateController dreamOverlayStateController,
154             JavaAdapter javaAdapter,
155             WallpaperRepository wallpaperRepository,
156             Lazy<ShadeController> shadeController,
157             Lazy<NotificationShadeWindowController> notificationShadeWindowController,
158             Lazy<ActivityTransitionAnimator> activityTransitionAnimator,
159             Lazy<ScrimController> scrimControllerLazy,
160             IActivityTaskManager activityTaskManagerService,
161             FeatureFlags featureFlags,
162             SecureSettings secureSettings,
163             SystemSettings systemSettings,
164             SystemClock systemClock,
165             @Main CoroutineDispatcher mainDispatcher,
166             Lazy<DreamViewModel> dreamViewModel,
167             Lazy<CommunalTransitionViewModel> communalTransitionViewModel,
168             SystemPropertiesHelper systemPropertiesHelper,
169             Lazy<WindowManagerLockscreenVisibilityManager> wmLockscreenVisibilityManager,
170             SelectedUserInteractor selectedUserInteractor,
171             KeyguardInteractor keyguardInteractor,
172             WindowManagerOcclusionManager windowManagerOcclusionManager) {
173         return new KeyguardViewMediator(
174                 context,
175                 uiEventLogger,
176                 sessionTracker,
177                 userTracker,
178                 falsingCollector,
179                 lockPatternUtils,
180                 broadcastDispatcher,
181                 statusBarKeyguardViewManagerLazy,
182                 dismissCallbackRegistry,
183                 updateMonitor,
184                 dumpManager,
185                 uiBgExecutor,
186                 powerManager,
187                 trustManager,
188                 userSwitcherController,
189                 deviceConfig,
190                 navigationModeController,
191                 keyguardDisplayManager,
192                 dozeParameters,
193                 statusBarStateController,
194                 keyguardStateController,
195                 keyguardUnlockAnimationController,
196                 screenOffAnimationController,
197                 notificationShadeDepthController,
198                 screenOnCoordinator,
199                 keyguardTransitions,
200                 interactionJankMonitor,
201                 dreamOverlayStateController,
202                 javaAdapter,
203                 wallpaperRepository,
204                 shadeController,
205                 notificationShadeWindowController,
206                 activityTransitionAnimator,
207                 scrimControllerLazy,
208                 activityTaskManagerService,
209                 featureFlags,
210                 secureSettings,
211                 systemSettings,
212                 systemClock,
213                 mainDispatcher,
214                 dreamViewModel,
215                 communalTransitionViewModel,
216                 systemPropertiesHelper,
217                 wmLockscreenVisibilityManager,
218                 selectedUserInteractor,
219                 keyguardInteractor,
220                 windowManagerOcclusionManager);
221     }
222 
223     /** */
224     @Provides
providesViewMediatorCallback(KeyguardViewMediator viewMediator)225     static ViewMediatorCallback providesViewMediatorCallback(KeyguardViewMediator viewMediator) {
226         return viewMediator.getViewMediatorCallback();
227     }
228 
229     /** */
230     @Provides
providesKeyguardQuickAffordancesMetricsLogger()231     static KeyguardQuickAffordancesMetricsLogger providesKeyguardQuickAffordancesMetricsLogger() {
232         return new KeyguardQuickAffordancesMetricsLoggerImpl();
233     }
234 
235     /** */
236     @Provides
237     @SysUISingleton
providesThreadAssert()238     static ThreadAssert providesThreadAssert() {
239         return new ThreadAssert();
240     }
241 
242     /** Binds {@link KeyguardUpdateMonitor} as a {@link CoreStartable}. */
243     @Binds
244     @IntoMap
245     @ClassKey(KeyguardUpdateMonitor.class)
bindsKeyguardUpdateMonitor(KeyguardUpdateMonitor keyguardUpdateMonitor)246     CoreStartable bindsKeyguardUpdateMonitor(KeyguardUpdateMonitor keyguardUpdateMonitor);
247 }
248