• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 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.car.keyguard;
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.statusbar.IStatusBarService;
27 import com.android.internal.widget.LockPatternUtils;
28 import com.android.keyguard.ConnectedDisplayKeyguardPresentation;
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.KeyguardStatusBarViewComponent;
34 import com.android.keyguard.mediator.ScreenOnCoordinator;
35 import com.android.systemui.CoreStartable;
36 import com.android.systemui.animation.ActivityTransitionAnimator;
37 import com.android.systemui.broadcast.BroadcastDispatcher;
38 import com.android.systemui.car.keyguard.passenger.PassengerKeyguardLoadingDialog;
39 import com.android.systemui.car.users.CarSystemUIUserUtil;
40 import com.android.systemui.classifier.FalsingCollector;
41 import com.android.systemui.classifier.FalsingModule;
42 import com.android.systemui.communal.domain.interactor.CommunalSceneInteractor;
43 import com.android.systemui.communal.domain.interactor.CommunalSettingsInteractor;
44 import com.android.systemui.communal.ui.viewmodel.CommunalTransitionViewModel;
45 import com.android.systemui.dagger.SysUISingleton;
46 import com.android.systemui.dagger.qualifiers.Application;
47 import com.android.systemui.dagger.qualifiers.Main;
48 import com.android.systemui.dagger.qualifiers.UiBackground;
49 import com.android.systemui.dreams.DreamOverlayStateController;
50 import com.android.systemui.dreams.ui.viewmodel.DreamViewModel;
51 import com.android.systemui.dump.DumpManager;
52 import com.android.systemui.flags.FeatureFlags;
53 import com.android.systemui.flags.SystemPropertiesHelper;
54 import com.android.systemui.keyguard.DismissCallbackRegistry;
55 import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
56 import com.android.systemui.keyguard.KeyguardViewMediator;
57 import com.android.systemui.keyguard.WindowManagerLockscreenVisibilityManager;
58 import com.android.systemui.keyguard.WindowManagerOcclusionManager;
59 import com.android.systemui.keyguard.dagger.GlanceableHubTransitionModule;
60 import com.android.systemui.keyguard.dagger.KeyguardFaceAuthNotSupportedModule;
61 import com.android.systemui.keyguard.dagger.PrimaryBouncerTransitionModule;
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.log.SessionTracker;
67 import com.android.systemui.navigationbar.NavigationBarController;
68 import com.android.systemui.navigationbar.NavigationModeController;
69 import com.android.systemui.process.ProcessWrapper;
70 import com.android.systemui.settings.DisplayTracker;
71 import com.android.systemui.settings.DisplayTrackerImpl;
72 import com.android.systemui.settings.UserTracker;
73 import com.android.systemui.shade.ShadeController;
74 import com.android.systemui.shade.data.repository.ShadeDisplaysRepository;
75 import com.android.systemui.statusbar.NotificationShadeDepthController;
76 import com.android.systemui.statusbar.NotificationShadeWindowController;
77 import com.android.systemui.statusbar.SysuiStatusBarStateController;
78 import com.android.systemui.statusbar.phone.DozeParameters;
79 import com.android.systemui.statusbar.phone.ScreenOffAnimationController;
80 import com.android.systemui.statusbar.phone.ScrimController;
81 import com.android.systemui.statusbar.policy.KeyguardStateController;
82 import com.android.systemui.statusbar.policy.UserSwitcherController;
83 import com.android.systemui.user.domain.interactor.SelectedUserInteractor;
84 import com.android.systemui.util.DeviceConfigProxy;
85 import com.android.systemui.util.kotlin.JavaAdapter;
86 import com.android.systemui.util.settings.SecureSettings;
87 import com.android.systemui.util.settings.SystemSettings;
88 import com.android.systemui.util.time.SystemClock;
89 import com.android.systemui.wallpapers.data.repository.WallpaperRepository;
90 import com.android.wm.shell.keyguard.KeyguardTransitions;
91 
92 import dagger.Binds;
93 import dagger.Lazy;
94 import dagger.Module;
95 import dagger.Provides;
96 import dagger.multibindings.ClassKey;
97 import dagger.multibindings.IntoMap;
98 
99 import kotlinx.coroutines.CoroutineDispatcher;
100 import kotlinx.coroutines.CoroutineScope;
101 
102 import java.util.concurrent.Executor;
103 
104 import javax.inject.Provider;
105 
106 /**
107  * Dagger Module providing keyguard.
108  */
109 @Module(subcomponents = {
110         KeyguardStatusBarViewComponent.class
111         },
112         includes = {
113                 FalsingModule.class,
114                 GlanceableHubTransitionModule.class,
115                 KeyguardFaceAuthNotSupportedModule.class,
116                 KeyguardRepositoryModule.class,
117                 PrimaryBouncerTransitionModule.class,
118                 StartKeyguardTransitionModule.class,
119         })
120 public interface CarKeyguardModule {
121 
122     /**
123      * Provides our instance of CarKeyguardViewMediator
124      */
125     @Provides
126     @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, CarKeyguardDisplayManager 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 wmOcclusionManager)127     static KeyguardViewMediator newKeyguardViewMediator(
128             Context context,
129             UiEventLogger uiEventLogger,
130             SessionTracker sessionTracker,
131             UserTracker userTracker,
132             FalsingCollector falsingCollector,
133             LockPatternUtils lockPatternUtils,
134             BroadcastDispatcher broadcastDispatcher,
135             Lazy<KeyguardViewController> statusBarKeyguardViewManagerLazy,
136             DismissCallbackRegistry dismissCallbackRegistry,
137             KeyguardUpdateMonitor updateMonitor,
138             DumpManager dumpManager,
139             PowerManager powerManager,
140             TrustManager trustManager,
141             UserSwitcherController userSwitcherController,
142             @UiBackground Executor uiBgExecutor,
143             DeviceConfigProxy deviceConfig,
144             NavigationModeController navigationModeController,
145             CarKeyguardDisplayManager keyguardDisplayManager,
146             DozeParameters dozeParameters,
147             SysuiStatusBarStateController statusBarStateController,
148             KeyguardStateController keyguardStateController,
149             Lazy<KeyguardUnlockAnimationController> keyguardUnlockAnimationController,
150             ScreenOffAnimationController screenOffAnimationController,
151             Lazy<NotificationShadeDepthController> notificationShadeDepthController,
152             ScreenOnCoordinator screenOnCoordinator,
153             KeyguardTransitions keyguardTransitions,
154             InteractionJankMonitor interactionJankMonitor,
155             DreamOverlayStateController dreamOverlayStateController,
156             JavaAdapter javaAdapter,
157             WallpaperRepository wallpaperRepository,
158             Lazy<ShadeController> shadeController,
159             Lazy<NotificationShadeWindowController> notificationShadeWindowController,
160             Lazy<ActivityTransitionAnimator> activityTransitionAnimator,
161             Lazy<ScrimController> scrimControllerLazy,
162             IActivityTaskManager activityTaskManagerService,
163             IStatusBarService statusBarService,
164             FeatureFlags featureFlags,
165             SecureSettings secureSettings,
166             SystemSettings systemSettings,
167             SystemClock systemClock,
168             ProcessWrapper processWrapper,
169             @Main CoroutineDispatcher mainDispatcher,
170             Lazy<DreamViewModel> dreamViewModel,
171             Lazy<CommunalTransitionViewModel> communalTransitionViewModel,
172             SystemPropertiesHelper systemPropertiesHelper,
173             Lazy<WindowManagerLockscreenVisibilityManager> wmLockscreenVisibilityManager,
174             SelectedUserInteractor selectedUserInteractor,
175             KeyguardInteractor keyguardInteractor,
176             KeyguardTransitionBootInteractor transitionBootInteractor,
177             Lazy<CommunalSceneInteractor> communalSceneInteractor,
178             Lazy<CommunalSettingsInteractor> communalSettingsInteractor,
179             WindowManagerOcclusionManager wmOcclusionManager) {
180         return new CarKeyguardViewMediator(
181                 context,
182                 uiEventLogger,
183                 sessionTracker,
184                 userTracker,
185                 falsingCollector,
186                 lockPatternUtils,
187                 broadcastDispatcher,
188                 statusBarKeyguardViewManagerLazy,
189                 dismissCallbackRegistry,
190                 updateMonitor,
191                 dumpManager,
192                 uiBgExecutor,
193                 powerManager,
194                 trustManager,
195                 userSwitcherController,
196                 deviceConfig,
197                 navigationModeController,
198                 keyguardDisplayManager,
199                 dozeParameters,
200                 statusBarStateController,
201                 keyguardStateController,
202                 keyguardUnlockAnimationController,
203                 screenOffAnimationController,
204                 notificationShadeDepthController,
205                 screenOnCoordinator,
206                 keyguardTransitions,
207                 interactionJankMonitor,
208                 dreamOverlayStateController,
209                 javaAdapter,
210                 wallpaperRepository,
211                 shadeController,
212                 notificationShadeWindowController,
213                 activityTransitionAnimator,
214                 scrimControllerLazy,
215                 activityTaskManagerService,
216                 statusBarService,
217                 featureFlags,
218                 secureSettings,
219                 systemSettings,
220                 systemClock,
221                 processWrapper,
222                 mainDispatcher,
223                 dreamViewModel,
224                 communalTransitionViewModel,
225                 systemPropertiesHelper,
226                 wmLockscreenVisibilityManager,
227                 selectedUserInteractor,
228                 keyguardInteractor,
229                 transitionBootInteractor,
230                 communalSceneInteractor,
231                 communalSettingsInteractor,
232                 wmOcclusionManager);
233     }
234 
235     /** */
236     @Provides
providesViewMediatorCallback(KeyguardViewMediator viewMediator)237     static ViewMediatorCallback providesViewMediatorCallback(KeyguardViewMediator viewMediator) {
238         return viewMediator.getViewMediatorCallback();
239     }
240 
241     /** Provide car keyguard display manager instance. */
242     @Provides
243     @SysUISingleton
provideCarKeyguardDisplayManager(Context context, Lazy<NavigationBarController> navigationBarControllerLazy, DisplayTracker defaultDisplayTracker, Lazy<DisplayTrackerImpl> displayTrackerImpl, @Main Executor mainExecutor, @UiBackground Executor uiBgExecutor, KeyguardDisplayManager.DeviceStateHelper deviceStateHelper, KeyguardStateController keyguardStateController, ConnectedDisplayKeyguardPresentation.Factory connectedDisplayKeyguardPresentationFactory, Provider<ShadeDisplaysRepository> shadeDisplaysRepositoryProvider, @Application CoroutineScope appScope)244     static CarKeyguardDisplayManager provideCarKeyguardDisplayManager(Context context,
245             Lazy<NavigationBarController> navigationBarControllerLazy,
246             DisplayTracker defaultDisplayTracker,
247             Lazy<DisplayTrackerImpl> displayTrackerImpl,
248             @Main Executor mainExecutor,
249             @UiBackground Executor uiBgExecutor,
250             KeyguardDisplayManager.DeviceStateHelper deviceStateHelper,
251             KeyguardStateController keyguardStateController,
252             ConnectedDisplayKeyguardPresentation.Factory
253                     connectedDisplayKeyguardPresentationFactory,
254             Provider<ShadeDisplaysRepository> shadeDisplaysRepositoryProvider,
255             @Application CoroutineScope appScope) {
256         DisplayTracker finalDisplayTracker =
257                 CarSystemUIUserUtil.isDriverMUMDSystemUI() ? displayTrackerImpl.get()
258                         : defaultDisplayTracker;
259         return new CarKeyguardDisplayManager(context, navigationBarControllerLazy,
260                 finalDisplayTracker, mainExecutor, uiBgExecutor, deviceStateHelper,
261                 keyguardStateController, connectedDisplayKeyguardPresentationFactory,
262                 shadeDisplaysRepositoryProvider, appScope);
263     }
264 
265     /** Binds {@link KeyguardUpdateMonitor} as a {@link CoreStartable}. */
266     @Binds
267     @IntoMap
268     @ClassKey(KeyguardUpdateMonitor.class)
bindsKeyguardUpdateMonitor(KeyguardUpdateMonitor keyguardUpdateMonitor)269     CoreStartable bindsKeyguardUpdateMonitor(KeyguardUpdateMonitor keyguardUpdateMonitor);
270 
271     /** Binds {@link PassengerKeyguardLoadingDialog} as a {@link CoreStartable}. */
272     @Binds
273     @IntoMap
274     @ClassKey(PassengerKeyguardLoadingDialog.class)
bindsPassengerKeyguardLoadingDialog(PassengerKeyguardLoadingDialog dialog)275     CoreStartable bindsPassengerKeyguardLoadingDialog(PassengerKeyguardLoadingDialog dialog);
276 }
277