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.os.PowerManager;
24 
25 import com.android.internal.widget.LockPatternUtils;
26 import com.android.keyguard.KeyguardDisplayManager;
27 import com.android.keyguard.KeyguardUpdateMonitor;
28 import com.android.keyguard.KeyguardViewController;
29 import com.android.keyguard.dagger.KeyguardQsUserSwitchComponent;
30 import com.android.keyguard.dagger.KeyguardStatusBarViewComponent;
31 import com.android.keyguard.dagger.KeyguardStatusViewComponent;
32 import com.android.keyguard.dagger.KeyguardUserSwitcherComponent;
33 import com.android.systemui.broadcast.BroadcastDispatcher;
34 import com.android.systemui.classifier.FalsingCollector;
35 import com.android.systemui.classifier.FalsingModule;
36 import com.android.systemui.dagger.SysUISingleton;
37 import com.android.systemui.dagger.qualifiers.UiBackground;
38 import com.android.systemui.dump.DumpManager;
39 import com.android.systemui.keyguard.DismissCallbackRegistry;
40 import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
41 import com.android.systemui.keyguard.KeyguardViewMediator;
42 import com.android.systemui.navigationbar.NavigationModeController;
43 import com.android.systemui.plugins.statusbar.StatusBarStateController;
44 import com.android.systemui.statusbar.NotificationShadeDepthController;
45 import com.android.systemui.statusbar.SysuiStatusBarStateController;
46 import com.android.systemui.statusbar.phone.DozeParameters;
47 import com.android.systemui.statusbar.phone.KeyguardLiftController;
48 import com.android.systemui.statusbar.phone.StatusBar;
49 import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController;
50 import com.android.systemui.statusbar.policy.KeyguardStateController;
51 import com.android.systemui.statusbar.policy.UserSwitcherController;
52 import com.android.systemui.unfold.SysUIUnfoldComponent;
53 import com.android.systemui.util.DeviceConfigProxy;
54 import com.android.systemui.util.sensors.AsyncSensorManager;
55 
56 import java.util.Optional;
57 import java.util.concurrent.Executor;
58 
59 import dagger.Lazy;
60 import dagger.Module;
61 import dagger.Provides;
62 
63 /**
64  * Dagger Module providing {@link StatusBar}.
65  */
66 @Module(subcomponents = {
67         KeyguardQsUserSwitchComponent.class,
68         KeyguardStatusBarViewComponent.class,
69         KeyguardStatusViewComponent.class,
70         KeyguardUserSwitcherComponent.class},
71         includes = {FalsingModule.class})
72 public class KeyguardModule {
73     /**
74      * Provides our instance of KeyguardViewMediator which is considered optional.
75      */
76     @Provides
77     @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, Optional<SysUIUnfoldComponent> unfoldComponent, SysuiStatusBarStateController statusBarStateController, KeyguardStateController keyguardStateController, Lazy<KeyguardUnlockAnimationController> keyguardUnlockAnimationController, UnlockedScreenOffAnimationController unlockedScreenOffAnimationController, Lazy<NotificationShadeDepthController> notificationShadeDepthController)78     public static KeyguardViewMediator newKeyguardViewMediator(
79             Context context,
80             FalsingCollector falsingCollector,
81             LockPatternUtils lockPatternUtils,
82             BroadcastDispatcher broadcastDispatcher,
83             Lazy<KeyguardViewController> statusBarKeyguardViewManagerLazy,
84             DismissCallbackRegistry dismissCallbackRegistry,
85             KeyguardUpdateMonitor updateMonitor,
86             DumpManager dumpManager,
87             PowerManager powerManager,
88             TrustManager trustManager,
89             UserSwitcherController userSwitcherController,
90             @UiBackground Executor uiBgExecutor,
91             DeviceConfigProxy deviceConfig,
92             NavigationModeController navigationModeController,
93             KeyguardDisplayManager keyguardDisplayManager,
94             DozeParameters dozeParameters,
95             Optional<SysUIUnfoldComponent> unfoldComponent,
96             SysuiStatusBarStateController statusBarStateController,
97             KeyguardStateController keyguardStateController,
98             Lazy<KeyguardUnlockAnimationController> keyguardUnlockAnimationController,
99             UnlockedScreenOffAnimationController unlockedScreenOffAnimationController,
100             Lazy<NotificationShadeDepthController> notificationShadeDepthController) {
101         return new KeyguardViewMediator(
102                 context,
103                 falsingCollector,
104                 lockPatternUtils,
105                 broadcastDispatcher,
106                 statusBarKeyguardViewManagerLazy,
107                 dismissCallbackRegistry,
108                 updateMonitor,
109                 dumpManager,
110                 uiBgExecutor,
111                 powerManager,
112                 trustManager,
113                 userSwitcherController,
114                 deviceConfig,
115                 navigationModeController,
116                 keyguardDisplayManager,
117                 dozeParameters,
118                 unfoldComponent,
119                 statusBarStateController,
120                 keyguardStateController,
121                 keyguardUnlockAnimationController,
122                 unlockedScreenOffAnimationController,
123                 notificationShadeDepthController
124         );
125     }
126 
127     @SysUISingleton
128     @Provides
129     @Nullable
provideKeyguardLiftController( Context context, StatusBarStateController statusBarStateController, AsyncSensorManager asyncSensorManager, KeyguardUpdateMonitor keyguardUpdateMonitor, DumpManager dumpManager)130     static KeyguardLiftController provideKeyguardLiftController(
131             Context context,
132             StatusBarStateController statusBarStateController,
133             AsyncSensorManager asyncSensorManager,
134             KeyguardUpdateMonitor keyguardUpdateMonitor,
135             DumpManager dumpManager) {
136         if (!context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FACE)) {
137             return null;
138         }
139         return new KeyguardLiftController(statusBarStateController, asyncSensorManager,
140                 keyguardUpdateMonitor, dumpManager);
141     }
142 }
143