1  /*
2   * Copyright (C) 2022 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  
18  package com.android.systemui.keyguard.data.repository
19  
20  import android.graphics.Point
21  import com.android.systemui.common.shared.model.Position
22  import com.android.systemui.keyguard.shared.model.BiometricUnlockModel
23  import com.android.systemui.keyguard.shared.model.BiometricUnlockSource
24  import com.android.systemui.keyguard.shared.model.DozeTransitionModel
25  import com.android.systemui.keyguard.shared.model.KeyguardRootViewVisibilityState
26  import com.android.systemui.keyguard.shared.model.ScreenModel
27  import com.android.systemui.keyguard.shared.model.ScreenState
28  import com.android.systemui.keyguard.shared.model.StatusBarState
29  import com.android.systemui.keyguard.shared.model.WakeSleepReason
30  import com.android.systemui.keyguard.shared.model.WakefulnessModel
31  import com.android.systemui.keyguard.shared.model.WakefulnessState
32  import kotlinx.coroutines.flow.Flow
33  import kotlinx.coroutines.flow.MutableStateFlow
34  import kotlinx.coroutines.flow.StateFlow
35  import kotlinx.coroutines.flow.asStateFlow
36  
37  /** Fake implementation of [KeyguardRepository] */
38  class FakeKeyguardRepository : KeyguardRepository {
39  
40      private val _animateBottomAreaDozingTransitions = MutableStateFlow(false)
41      override val animateBottomAreaDozingTransitions: StateFlow<Boolean> =
42          _animateBottomAreaDozingTransitions
43  
44      private val _bottomAreaAlpha = MutableStateFlow(1f)
45      override val bottomAreaAlpha: StateFlow<Float> = _bottomAreaAlpha
46  
47      private val _clockPosition = MutableStateFlow(Position(0, 0))
48      override val clockPosition: StateFlow<Position> = _clockPosition
49  
50      private val _isKeyguardShowing = MutableStateFlow(false)
51      override val isKeyguardShowing: Flow<Boolean> = _isKeyguardShowing
52  
53      private val _isKeyguardUnlocked = MutableStateFlow(false)
54      override val isKeyguardUnlocked: StateFlow<Boolean> = _isKeyguardUnlocked.asStateFlow()
55  
56      private val _isKeyguardOccluded = MutableStateFlow(false)
57      override val isKeyguardOccluded: Flow<Boolean> = _isKeyguardOccluded
58  
59      private val _isDozing = MutableStateFlow(false)
60      override val isDozing: StateFlow<Boolean> = _isDozing
61  
62      private val _dozeTimeTick = MutableStateFlow<Long>(0L)
63      override val dozeTimeTick = _dozeTimeTick
64  
65      private val _lastDozeTapToWakePosition = MutableStateFlow<Point?>(null)
66      override val lastDozeTapToWakePosition = _lastDozeTapToWakePosition.asStateFlow()
67  
68      private val _isAodAvailable = MutableStateFlow(false)
69      override val isAodAvailable: Flow<Boolean> = _isAodAvailable
70  
71      private val _isDreaming = MutableStateFlow(false)
72      override val isDreaming: Flow<Boolean> = _isDreaming
73  
74      private val _isDreamingWithOverlay = MutableStateFlow(false)
75      override val isDreamingWithOverlay: Flow<Boolean> = _isDreamingWithOverlay
76  
77      private val _isActiveDreamLockscreenHosted = MutableStateFlow(false)
78      override val isActiveDreamLockscreenHosted: StateFlow<Boolean> = _isActiveDreamLockscreenHosted
79  
80      private val _dozeAmount = MutableStateFlow(0f)
81      override val linearDozeAmount: Flow<Float> = _dozeAmount
82  
83      private val _statusBarState = MutableStateFlow(StatusBarState.SHADE)
84      override val statusBarState: Flow<StatusBarState> = _statusBarState
85  
86      private val _dozeTransitionModel = MutableStateFlow(DozeTransitionModel())
87      override val dozeTransitionModel: Flow<DozeTransitionModel> = _dozeTransitionModel
88  
89      private val _wakefulnessModel =
90          MutableStateFlow(
91              WakefulnessModel(WakefulnessState.ASLEEP, WakeSleepReason.OTHER, WakeSleepReason.OTHER)
92          )
93      override val wakefulness = _wakefulnessModel
94  
95      private val _screenModel = MutableStateFlow(ScreenModel(ScreenState.SCREEN_OFF))
96      override val screenModel = _screenModel
97  
98      private val _isUdfpsSupported = MutableStateFlow(false)
99  
100      private val _isKeyguardGoingAway = MutableStateFlow(false)
101      override val isKeyguardGoingAway: Flow<Boolean> = _isKeyguardGoingAway
102  
103      private val _biometricUnlockState = MutableStateFlow(BiometricUnlockModel.NONE)
104      override val biometricUnlockState: Flow<BiometricUnlockModel> = _biometricUnlockState
105  
106      private val _fingerprintSensorLocation = MutableStateFlow<Point?>(null)
107      override val fingerprintSensorLocation: Flow<Point?> = _fingerprintSensorLocation
108  
109      private val _faceSensorLocation = MutableStateFlow<Point?>(null)
110      override val faceSensorLocation: Flow<Point?> = _faceSensorLocation
111  
112      private val _biometricUnlockSource = MutableStateFlow<BiometricUnlockSource?>(null)
113      override val biometricUnlockSource: Flow<BiometricUnlockSource?> = _biometricUnlockSource
114  
115      private val _isQuickSettingsVisible = MutableStateFlow(false)
116      override val isQuickSettingsVisible: Flow<Boolean> = _isQuickSettingsVisible.asStateFlow()
117  
118      private val _keyguardAlpha = MutableStateFlow(1f)
119      override val keyguardAlpha: StateFlow<Float> = _keyguardAlpha
120  
121      private val _keyguardRootViewVisibility =
122          MutableStateFlow(
123              KeyguardRootViewVisibilityState(
124                  0,
125                  goingToFullShade = false,
126                  occlusionTransitionRunning = false
127              )
128          )
129      override val keyguardRootViewVisibility: Flow<KeyguardRootViewVisibilityState> =
130          _keyguardRootViewVisibility.asStateFlow()
131  
132      override fun setQuickSettingsVisible(isVisible: Boolean) {
133          _isQuickSettingsVisible.value = isVisible
134      }
135  
136      override fun isKeyguardShowing(): Boolean {
137          return _isKeyguardShowing.value
138      }
139  
140      private var _isBypassEnabled = false
141      override fun isBypassEnabled(): Boolean {
142          return _isBypassEnabled
143      }
144  
145      override fun setAnimateDozingTransitions(animate: Boolean) {
146          _animateBottomAreaDozingTransitions.tryEmit(animate)
147      }
148  
149      @Deprecated("Deprecated as part of b/278057014")
150      override fun setBottomAreaAlpha(alpha: Float) {
151          _bottomAreaAlpha.value = alpha
152      }
153  
154      override fun setClockPosition(x: Int, y: Int) {
155          _clockPosition.value = Position(x, y)
156      }
157  
158      fun setKeyguardShowing(isShowing: Boolean) {
159          _isKeyguardShowing.value = isShowing
160      }
161  
162      fun setKeyguardGoingAway(isGoingAway: Boolean) {
163          _isKeyguardGoingAway.value = isGoingAway
164      }
165  
166      fun setKeyguardOccluded(isOccluded: Boolean) {
167          _isKeyguardOccluded.value = isOccluded
168      }
169  
170      override fun setIsDozing(isDozing: Boolean) {
171          _isDozing.value = isDozing
172      }
173  
174      override fun dozeTimeTick() {
175          _dozeTimeTick.value = _dozeTimeTick.value + 1
176      }
177  
178      fun dozeTimeTick(millis: Long) {
179          _dozeTimeTick.value = millis
180      }
181  
182      override fun setLastDozeTapToWakePosition(position: Point) {
183          _lastDozeTapToWakePosition.value = position
184      }
185  
186      fun setAodAvailable(isAodAvailable: Boolean) {
187          _isAodAvailable.value = isAodAvailable
188      }
189  
190      fun setDreaming(isDreaming: Boolean) {
191          _isDreaming.value = isDreaming
192      }
193  
194      fun setDreamingWithOverlay(isDreaming: Boolean) {
195          _isDreamingWithOverlay.value = isDreaming
196      }
197  
198      override fun setIsActiveDreamLockscreenHosted(isLockscreenHosted: Boolean) {
199          _isActiveDreamLockscreenHosted.value = isLockscreenHosted
200      }
201  
202      fun setDozeAmount(dozeAmount: Float) {
203          _dozeAmount.value = dozeAmount
204      }
205  
206      fun setWakefulnessModel(model: WakefulnessModel) {
207          _wakefulnessModel.value = model
208      }
209  
210      fun setBiometricUnlockState(state: BiometricUnlockModel) {
211          _biometricUnlockState.tryEmit(state)
212      }
213  
214      fun setBiometricUnlockSource(source: BiometricUnlockSource?) {
215          _biometricUnlockSource.tryEmit(source)
216      }
217  
218      fun setFaceSensorLocation(location: Point?) {
219          _faceSensorLocation.tryEmit(location)
220      }
221  
222      fun setFingerprintSensorLocation(location: Point?) {
223          _fingerprintSensorLocation.tryEmit(location)
224      }
225  
226      fun setDozeTransitionModel(model: DozeTransitionModel) {
227          _dozeTransitionModel.value = model
228      }
229  
230      fun setStatusBarState(state: StatusBarState) {
231          _statusBarState.value = state
232      }
233  
234      fun setKeyguardUnlocked(isUnlocked: Boolean) {
235          _isKeyguardUnlocked.value = isUnlocked
236      }
237  
238      fun setBypassEnabled(isEnabled: Boolean) {
239          _isBypassEnabled = isEnabled
240      }
241  
242      fun setScreenModel(screenModel: ScreenModel) {
243          _screenModel.value = screenModel
244      }
245  
246      override fun isUdfpsSupported(): Boolean {
247          return _isUdfpsSupported.value
248      }
249  
250      override fun setKeyguardAlpha(alpha: Float) {
251          _keyguardAlpha.value = alpha
252      }
253  
254      override fun setKeyguardVisibility(
255          statusBarState: Int,
256          goingToFullShade: Boolean,
257          occlusionTransitionRunning: Boolean
258      ) {
259          _keyguardRootViewVisibility.value =
260              KeyguardRootViewVisibilityState(
261                  statusBarState,
262                  goingToFullShade,
263                  occlusionTransitionRunning
264              )
265      }
266  }
267