• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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