1 /*
2  * Copyright (C) 2023 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 package com.android.systemui
17 
18 import android.app.ActivityManager
19 import android.app.admin.DevicePolicyManager
20 import android.app.trust.TrustManager
21 import android.hardware.fingerprint.FingerprintManager
22 import android.os.UserManager
23 import android.service.notification.NotificationListenerService
24 import android.util.DisplayMetrics
25 import android.view.LayoutInflater
26 import com.android.internal.logging.MetricsLogger
27 import com.android.internal.statusbar.IStatusBarService
28 import com.android.internal.widget.LockPatternUtils
29 import com.android.keyguard.KeyguardSecurityModel
30 import com.android.keyguard.KeyguardUpdateMonitor
31 import com.android.keyguard.KeyguardViewController
32 import com.android.systemui.animation.DialogTransitionAnimator
33 import com.android.systemui.biometrics.AuthController
34 import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor
35 import com.android.systemui.communal.domain.interactor.CommunalInteractor
36 import com.android.systemui.demomode.DemoModeController
37 import com.android.systemui.dump.DumpManager
38 import com.android.systemui.keyguard.ScreenLifecycle
39 import com.android.systemui.keyguard.WakefulnessLifecycle
40 import com.android.systemui.keyguard.ui.transitions.DeviceEntryIconTransition
41 import com.android.systemui.log.LogBuffer
42 import com.android.systemui.log.dagger.BiometricLog
43 import com.android.systemui.log.dagger.BroadcastDispatcherLog
44 import com.android.systemui.log.dagger.FaceAuthLog
45 import com.android.systemui.log.dagger.SceneFrameworkLog
46 import com.android.systemui.media.controls.ui.controller.MediaHierarchyManager
47 import com.android.systemui.model.SysUiState
48 import com.android.systemui.plugins.ActivityStarter
49 import com.android.systemui.plugins.DarkIconDispatcher
50 import com.android.systemui.plugins.statusbar.StatusBarStateController
51 import com.android.systemui.scene.shared.logger.SceneLogger
52 import com.android.systemui.shared.system.ActivityManagerWrapper
53 import com.android.systemui.statusbar.LockscreenShadeTransitionController
54 import com.android.systemui.statusbar.NotificationListener
55 import com.android.systemui.statusbar.NotificationLockscreenUserManager
56 import com.android.systemui.statusbar.NotificationMediaManager
57 import com.android.systemui.statusbar.NotificationShadeDepthController
58 import com.android.systemui.statusbar.SysuiStatusBarStateController
59 import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator
60 import com.android.systemui.statusbar.notification.collection.NotifCollection
61 import com.android.systemui.statusbar.notification.logging.NotificationPanelLogger
62 import com.android.systemui.statusbar.notification.stack.AmbientState
63 import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
64 import com.android.systemui.statusbar.notification.stack.NotificationStackSizeCalculator
65 import com.android.systemui.statusbar.notification.stack.ui.view.NotificationStatsLogger
66 import com.android.systemui.statusbar.phone.DozeParameters
67 import com.android.systemui.statusbar.phone.KeyguardBypassController
68 import com.android.systemui.statusbar.phone.LSShadeTransitionLogger
69 import com.android.systemui.statusbar.phone.ScreenOffAnimationController
70 import com.android.systemui.statusbar.phone.ScrimController
71 import com.android.systemui.statusbar.phone.SystemUIDialogManager
72 import com.android.systemui.statusbar.policy.DeviceProvisionedController
73 import com.android.systemui.statusbar.policy.HeadsUpManager
74 import com.android.systemui.statusbar.policy.KeyguardStateController
75 import com.android.systemui.statusbar.policy.ZenModeController
76 import com.android.systemui.statusbar.window.StatusBarWindowController
77 import com.android.systemui.unfold.UnfoldTransitionProgressProvider
78 import com.android.systemui.util.mockito.mock
79 import com.android.systemui.util.settings.GlobalSettings
80 import com.android.wm.shell.bubbles.Bubbles
81 import dagger.Binds
82 import dagger.Module
83 import dagger.Provides
84 import java.util.Optional
85 
86 @Module(includes = [TestMocksModule.Bindings::class])
87 data class TestMocksModule(
88     @get:Provides val activityStarter: ActivityStarter = mock(),
89     @get:Provides val activityManagerWrapper: ActivityManagerWrapper = mock(),
90     @get:Provides val ambientState: AmbientState = mock(),
91     @get:Provides val authController: AuthController = mock(),
92     @get:Provides val bubbles: Optional<Bubbles> = Optional.of(mock()),
93     @get:Provides val darkIconDispatcher: DarkIconDispatcher = mock(),
94     @get:Provides val demoModeController: DemoModeController = mock(),
95     @get:Provides val deviceProvisionedController: DeviceProvisionedController = mock(),
96     @get:Provides val dozeParameters: DozeParameters = mock(),
97     @get:Provides val dumpManager: DumpManager = mock(),
98     @get:Provides val fingerprintManager: FingerprintManager = mock(),
99     @get:Provides val headsUpManager: HeadsUpManager = mock(),
100     @get:Provides val guestResumeSessionReceiver: GuestResumeSessionReceiver = mock(),
101     @get:Provides val keyguardBypassController: KeyguardBypassController = mock(),
102     @get:Provides val keyguardSecurityModel: KeyguardSecurityModel = mock(),
103     @get:Provides val keyguardUpdateMonitor: KeyguardUpdateMonitor = mock(),
104     @get:Provides val layoutInflater: LayoutInflater = mock(),
105     @get:Provides
106     val lockscreenShadeTransitionController: LockscreenShadeTransitionController = mock(),
107     @get:Provides val mediaHierarchyManager: MediaHierarchyManager = mock(),
108     @get:Provides val notifCollection: NotifCollection = mock(),
109     @get:Provides val notificationListLogger: NotificationStatsLogger = mock(),
110     @get:Provides val notificationListener: NotificationListener = mock(),
111     @get:Provides val notificationLockscreenUserManager: NotificationLockscreenUserManager = mock(),
112     @get:Provides val notificationPanelLogger: NotificationPanelLogger = mock(),
113     @get:Provides val notificationMediaManager: NotificationMediaManager = mock(),
114     @get:Provides val notificationShadeDepthController: NotificationShadeDepthController = mock(),
115     @get:Provides
116     val notificationStackScrollLayoutController: NotificationStackScrollLayoutController = mock(),
117     @get:Provides val notificationStackSizeCalculator: NotificationStackSizeCalculator = mock(),
118     @get:Provides val notificationWakeUpCoordinator: NotificationWakeUpCoordinator = mock(),
119     @get:Provides val screenLifecycle: ScreenLifecycle = mock(),
120     @get:Provides val screenOffAnimationController: ScreenOffAnimationController = mock(),
121     @get:Provides val scrimController: ScrimController = mock(),
122     @get:Provides val statusBarStateController: SysuiStatusBarStateController = mock(),
123     @get:Provides val statusBarWindowController: StatusBarWindowController = mock(),
124     @get:Provides val wakefulnessLifecycle: WakefulnessLifecycle = mock(),
125     @get:Provides val keyguardViewController: KeyguardViewController = mock(),
126     @get:Provides val dialogTransitionAnimator: DialogTransitionAnimator = mock(),
127     @get:Provides val sysuiState: SysUiState = mock(),
128     @get:Provides
129     val unfoldTransitionProgressProvider: Optional<UnfoldTransitionProgressProvider> =
130         Optional.empty(),
131     @get:Provides val zenModeController: ZenModeController = mock(),
132     @get:Provides val systemUIDialogManager: SystemUIDialogManager = mock(),
133     @get:Provides val deviceEntryIconTransitions: Set<DeviceEntryIconTransition> = emptySet(),
134     @get:Provides val communalInteractor: CommunalInteractor = mock(),
135     @get:Provides val sceneLogger: SceneLogger = mock(),
136     @get:Provides val trustManager: TrustManager = mock(),
137     @get:Provides val primaryBouncerInteractor: PrimaryBouncerInteractor = mock(),
138     @get:Provides val keyguardStateController: KeyguardStateController = mock(),
139     @get:Provides val globalSettings: GlobalSettings = mock(),
140 
141     // log buffers
142     @get:[Provides BroadcastDispatcherLog]
143     val broadcastDispatcherLogger: LogBuffer = mock(),
144     @get:[Provides SceneFrameworkLog]
145     val sceneLogBuffer: LogBuffer = mock(),
146     @get:[Provides BiometricLog]
147     val biometricLogger: LogBuffer = mock(),
148     @get:[Provides FaceAuthLog]
149     val faceAuthLogger: LogBuffer = mock(),
150     @get:Provides val lsShadeTransitionLogger: LSShadeTransitionLogger = mock(),
151 
152     // framework mocks
153     @get:Provides val activityManager: ActivityManager = mock(),
154     @get:Provides val devicePolicyManager: DevicePolicyManager = mock(),
155     @get:Provides val displayMetrics: DisplayMetrics = mock(),
156     @get:Provides val metricsLogger: MetricsLogger = mock(),
157     @get:Provides val userManager: UserManager = mock(),
158     @get:Provides val lockPatternUtils: LockPatternUtils = mock(),
159 
160     // system server mocks
161     @get:Provides val mockStatusBarService: IStatusBarService = mock(),
162     @get:Provides val mockNotificationListenerService: NotificationListenerService = mock(),
163 ) {
164     @Module
165     interface Bindings {
166         @Binds
bindStatusBarStateControllernull167         fun bindStatusBarStateController(
168             sysuiStatusBarStateController: SysuiStatusBarStateController,
169         ): StatusBarStateController
170     }
171 }
172