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