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