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