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.annotation.Nullable; 20 import android.app.trust.TrustManager; 21 import android.content.Context; 22 import android.content.pm.PackageManager; 23 import android.content.res.Resources; 24 import android.hardware.face.FaceManager; 25 import android.os.Handler; 26 import android.os.PowerManager; 27 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.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.systemui.broadcast.BroadcastDispatcher; 37 import com.android.systemui.classifier.FalsingCollector; 38 import com.android.systemui.classifier.FalsingModule; 39 import com.android.systemui.dagger.SysUISingleton; 40 import com.android.systemui.dagger.qualifiers.Main; 41 import com.android.systemui.dagger.qualifiers.UiBackground; 42 import com.android.systemui.dump.DumpManager; 43 import com.android.systemui.keyguard.DismissCallbackRegistry; 44 import com.android.systemui.keyguard.FaceAuthScreenBrightnessController; 45 import com.android.systemui.keyguard.KeyguardUnlockAnimationController; 46 import com.android.systemui.keyguard.KeyguardViewMediator; 47 import com.android.systemui.navigationbar.NavigationModeController; 48 import com.android.systemui.plugins.statusbar.StatusBarStateController; 49 import com.android.systemui.statusbar.NotificationShadeDepthController; 50 import com.android.systemui.statusbar.NotificationShadeWindowController; 51 import com.android.systemui.statusbar.SysuiStatusBarStateController; 52 import com.android.systemui.statusbar.phone.DozeParameters; 53 import com.android.systemui.statusbar.phone.KeyguardLiftController; 54 import com.android.systemui.statusbar.phone.StatusBar; 55 import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController; 56 import com.android.systemui.statusbar.policy.KeyguardStateController; 57 import com.android.systemui.statusbar.policy.UserSwitcherController; 58 import com.android.systemui.util.DeviceConfigProxy; 59 import com.android.systemui.util.sensors.AsyncSensorManager; 60 import com.android.systemui.util.settings.GlobalSettings; 61 import com.android.systemui.util.settings.SystemSettings; 62 63 import java.util.Optional; 64 import java.util.concurrent.Executor; 65 66 import dagger.Lazy; 67 import dagger.Module; 68 import dagger.Provides; 69 70 /** 71 * Dagger Module providing {@link StatusBar}. 72 */ 73 @Module(subcomponents = { 74 KeyguardQsUserSwitchComponent.class, 75 KeyguardStatusBarViewComponent.class, 76 KeyguardStatusViewComponent.class, 77 KeyguardUserSwitcherComponent.class}, 78 includes = {FalsingModule.class}) 79 public class KeyguardModule { 80 /** 81 * Provides our instance of KeyguardViewMediator which is considered optional. 82 */ 83 @Provides 84 @SysUISingleton newKeyguardViewMediator( Context context, 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, UnlockedScreenOffAnimationController unlockedScreenOffAnimationController, Lazy<NotificationShadeDepthController> notificationShadeDepthController)85 public static KeyguardViewMediator newKeyguardViewMediator( 86 Context context, 87 FalsingCollector falsingCollector, 88 LockPatternUtils lockPatternUtils, 89 BroadcastDispatcher broadcastDispatcher, 90 Lazy<KeyguardViewController> statusBarKeyguardViewManagerLazy, 91 DismissCallbackRegistry dismissCallbackRegistry, 92 KeyguardUpdateMonitor updateMonitor, 93 DumpManager dumpManager, 94 PowerManager powerManager, 95 TrustManager trustManager, 96 UserSwitcherController userSwitcherController, 97 @UiBackground Executor uiBgExecutor, 98 DeviceConfigProxy deviceConfig, 99 NavigationModeController navigationModeController, 100 KeyguardDisplayManager keyguardDisplayManager, 101 DozeParameters dozeParameters, 102 SysuiStatusBarStateController statusBarStateController, 103 KeyguardStateController keyguardStateController, 104 Lazy<KeyguardUnlockAnimationController> keyguardUnlockAnimationController, 105 UnlockedScreenOffAnimationController unlockedScreenOffAnimationController, 106 Lazy<NotificationShadeDepthController> notificationShadeDepthController) { 107 return new KeyguardViewMediator( 108 context, 109 falsingCollector, 110 lockPatternUtils, 111 broadcastDispatcher, 112 statusBarKeyguardViewManagerLazy, 113 dismissCallbackRegistry, 114 updateMonitor, 115 dumpManager, 116 uiBgExecutor, 117 powerManager, 118 trustManager, 119 userSwitcherController, 120 deviceConfig, 121 navigationModeController, 122 keyguardDisplayManager, 123 dozeParameters, 124 statusBarStateController, 125 keyguardStateController, 126 keyguardUnlockAnimationController, 127 unlockedScreenOffAnimationController, 128 notificationShadeDepthController 129 ); 130 } 131 132 @SysUISingleton 133 @Provides 134 @Nullable provideKeyguardLiftController( Context context, StatusBarStateController statusBarStateController, AsyncSensorManager asyncSensorManager, KeyguardUpdateMonitor keyguardUpdateMonitor, DumpManager dumpManager)135 static KeyguardLiftController provideKeyguardLiftController( 136 Context context, 137 StatusBarStateController statusBarStateController, 138 AsyncSensorManager asyncSensorManager, 139 KeyguardUpdateMonitor keyguardUpdateMonitor, 140 DumpManager dumpManager) { 141 if (!context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FACE)) { 142 return null; 143 } 144 return new KeyguardLiftController(statusBarStateController, asyncSensorManager, 145 keyguardUpdateMonitor, dumpManager); 146 } 147 148 @SysUISingleton 149 @Provides provideFaceAuthScreenBrightnessController( Context context, NotificationShadeWindowController notificationShadeWindowController, @Main Resources resources, Handler handler, @Nullable FaceManager faceManager, PackageManager packageManager, KeyguardUpdateMonitor keyguardUpdateMonitor, GlobalSettings globalSetting, SystemSettings systemSettings, DumpManager dumpManager)150 static Optional<FaceAuthScreenBrightnessController> provideFaceAuthScreenBrightnessController( 151 Context context, 152 NotificationShadeWindowController notificationShadeWindowController, 153 @Main Resources resources, 154 Handler handler, 155 @Nullable FaceManager faceManager, 156 PackageManager packageManager, 157 KeyguardUpdateMonitor keyguardUpdateMonitor, 158 GlobalSettings globalSetting, 159 SystemSettings systemSettings, 160 DumpManager dumpManager) { 161 if (faceManager == null || !packageManager.hasSystemFeature(PackageManager.FEATURE_FACE)) { 162 return Optional.empty(); 163 } 164 165 // Cameras that support "self illumination," via IR for example, don't need low light 166 // environment mitigation. 167 boolean needsLowLightMitigation = faceManager.getSensorPropertiesInternal().stream() 168 .anyMatch((properties) -> !properties.supportsSelfIllumination); 169 if (!needsLowLightMitigation) { 170 return Optional.empty(); 171 } 172 173 // currently disabled (doesn't ramp up brightness or use scrim) see b/175918367 174 return Optional.of(new FaceAuthScreenBrightnessController( 175 notificationShadeWindowController, keyguardUpdateMonitor, resources, 176 globalSetting, systemSettings, handler, dumpManager, false)); 177 } 178 } 179