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.dagger.SysUISingleton 22 import com.android.systemui.keyguard.shared.model.BiometricUnlockMode 23 import com.android.systemui.keyguard.shared.model.BiometricUnlockModel 24 import com.android.systemui.keyguard.shared.model.BiometricUnlockSource 25 import com.android.systemui.keyguard.shared.model.CameraLaunchSourceModel 26 import com.android.systemui.keyguard.shared.model.DismissAction 27 import com.android.systemui.keyguard.shared.model.DozeTransitionModel 28 import com.android.systemui.keyguard.shared.model.KeyguardDone 29 import com.android.systemui.keyguard.shared.model.StatusBarState 30 import dagger.Binds 31 import dagger.Module 32 import javax.inject.Inject 33 import kotlinx.coroutines.flow.Flow 34 import kotlinx.coroutines.flow.MutableSharedFlow 35 import kotlinx.coroutines.flow.MutableStateFlow 36 import kotlinx.coroutines.flow.StateFlow 37 import kotlinx.coroutines.flow.asStateFlow 38 39 /** Fake implementation of [KeyguardRepository] */ 40 @SysUISingleton 41 class FakeKeyguardRepository @Inject constructor() : KeyguardRepository { 42 private val _deferKeyguardDone: MutableSharedFlow<KeyguardDone> = MutableSharedFlow() 43 override val keyguardDone: Flow<KeyguardDone> = _deferKeyguardDone 44 45 private val _keyguardDoneAnimationsFinished: MutableSharedFlow<Unit> = 46 MutableSharedFlow(extraBufferCapacity = 1) 47 override val keyguardDoneAnimationsFinished: Flow<Unit> = _keyguardDoneAnimationsFinished 48 49 private val _dismissAction = MutableStateFlow<DismissAction>(DismissAction.None) 50 override val dismissAction: StateFlow<DismissAction> = _dismissAction 51 52 private val _animateBottomAreaDozingTransitions = MutableStateFlow(false) 53 override val animateBottomAreaDozingTransitions: StateFlow<Boolean> = 54 _animateBottomAreaDozingTransitions 55 56 private val _isKeyguardShowing = MutableStateFlow(false) 57 override val isKeyguardShowing: StateFlow<Boolean> = _isKeyguardShowing 58 59 private val _isKeyguardUnlocked = MutableStateFlow(false) 60 override val isKeyguardDismissible: StateFlow<Boolean> = _isKeyguardUnlocked.asStateFlow() 61 62 private val _isKeyguardOccluded = MutableStateFlow(false) 63 override val isKeyguardOccluded: StateFlow<Boolean> = _isKeyguardOccluded 64 65 private val _isDozing = MutableStateFlow(false) 66 override val isDozing: StateFlow<Boolean> = _isDozing 67 68 private val _dozeTimeTick = MutableStateFlow<Long>(0L) 69 override val dozeTimeTick = _dozeTimeTick 70 71 override val showDismissibleKeyguard = MutableStateFlow<Long>(0L) 72 73 private val _lastDozeTapToWakePosition = MutableStateFlow<Point?>(null) 74 override val lastDozeTapToWakePosition = _lastDozeTapToWakePosition.asStateFlow() 75 76 private val _isAodAvailable = MutableStateFlow(false) 77 override val isAodAvailable: StateFlow<Boolean> = _isAodAvailable 78 79 private val _isDreaming = MutableStateFlow(false) 80 override val isDreaming: MutableStateFlow<Boolean> = _isDreaming 81 82 private val _isDreamingWithOverlay = MutableStateFlow(false) 83 override val isDreamingWithOverlay: Flow<Boolean> = _isDreamingWithOverlay 84 85 private val _dozeAmount = MutableStateFlow(0f) 86 override val linearDozeAmount: Flow<Float> = _dozeAmount 87 88 private val _statusBarState = MutableStateFlow(StatusBarState.SHADE) 89 override val statusBarState: StateFlow<StatusBarState> = _statusBarState 90 91 private val _dozeTransitionModel = MutableStateFlow(DozeTransitionModel()) 92 override val dozeTransitionModel: Flow<DozeTransitionModel> = _dozeTransitionModel 93 94 private val _isUdfpsSupported = MutableStateFlow(false) 95 96 override val isKeyguardGoingAway = MutableStateFlow(false) 97 98 private val _biometricUnlockState = 99 MutableStateFlow(BiometricUnlockModel(BiometricUnlockMode.NONE, null)) 100 override val biometricUnlockState: StateFlow<BiometricUnlockModel> = 101 _biometricUnlockState.asStateFlow() 102 103 private val _fingerprintSensorLocation = MutableStateFlow<Point?>(null) 104 override val fingerprintSensorLocation: Flow<Point?> = _fingerprintSensorLocation 105 106 private val _faceSensorLocation = MutableStateFlow<Point?>(null) 107 override val faceSensorLocation: Flow<Point?> = _faceSensorLocation 108 109 private val _isQuickSettingsVisible = MutableStateFlow(false) 110 override val isQuickSettingsVisible: Flow<Boolean> = _isQuickSettingsVisible.asStateFlow() 111 112 private val _keyguardAlpha = MutableStateFlow(1f) 113 override val keyguardAlpha: StateFlow<Float> = _keyguardAlpha 114 115 override val panelAlpha: MutableStateFlow<Float> = MutableStateFlow(1f) 116 override val zoomOut: MutableStateFlow<Float> = MutableStateFlow(0f) 117 118 override val lastRootViewTapPosition: MutableStateFlow<Point?> = MutableStateFlow(null) 119 120 override val ambientIndicationVisible: MutableStateFlow<Boolean> = MutableStateFlow(false) 121 122 private val _isEncryptedOrLockdown = MutableStateFlow(true) 123 override val isEncryptedOrLockdown: Flow<Boolean> = _isEncryptedOrLockdown 124 125 private val _isKeyguardEnabled = MutableStateFlow(true) 126 override val isKeyguardEnabled: StateFlow<Boolean> = _isKeyguardEnabled.asStateFlow() 127 128 override val topClippingBounds = MutableStateFlow<Int?>(null) 129 130 private var isShowKeyguardWhenReenabled: Boolean = false 131 132 private val _canIgnoreAuthAndReturnToGone = MutableStateFlow(false) 133 override val canIgnoreAuthAndReturnToGone = _canIgnoreAuthAndReturnToGone.asStateFlow() 134 135 override val onCameraLaunchDetected = MutableStateFlow(CameraLaunchSourceModel()) 136 setQuickSettingsVisiblenull137 override fun setQuickSettingsVisible(isVisible: Boolean) { 138 _isQuickSettingsVisible.value = isVisible 139 } 140 isKeyguardShowingnull141 override fun isKeyguardShowing(): Boolean { 142 return _isKeyguardShowing.value 143 } 144 setAnimateDozingTransitionsnull145 override fun setAnimateDozingTransitions(animate: Boolean) { 146 _animateBottomAreaDozingTransitions.tryEmit(animate) 147 } 148 setKeyguardShowingnull149 fun setKeyguardShowing(isShowing: Boolean) { 150 _isKeyguardShowing.value = isShowing 151 } 152 setKeyguardGoingAwaynull153 fun setKeyguardGoingAway(isGoingAway: Boolean) { 154 isKeyguardGoingAway.value = isGoingAway 155 } 156 setKeyguardOccludednull157 fun setKeyguardOccluded(isOccluded: Boolean) { 158 _isKeyguardOccluded.value = isOccluded 159 } 160 setKeyguardDismissiblenull161 fun setKeyguardDismissible(isUnlocked: Boolean) { 162 _isKeyguardUnlocked.value = isUnlocked 163 } 164 setIsDozingnull165 override fun setIsDozing(isDozing: Boolean) { 166 _isDozing.value = isDozing 167 } 168 dozeTimeTicknull169 override fun dozeTimeTick() { 170 _dozeTimeTick.value = _dozeTimeTick.value + 1 171 } 172 setDismissActionnull173 override fun setDismissAction(dismissAction: DismissAction) { 174 _dismissAction.value = dismissAction 175 } 176 setKeyguardDonenull177 override suspend fun setKeyguardDone(timing: KeyguardDone) { 178 _deferKeyguardDone.emit(timing) 179 } 180 keyguardDoneAnimationsFinishednull181 override fun keyguardDoneAnimationsFinished() { 182 _keyguardDoneAnimationsFinished.tryEmit(Unit) 183 } 184 setKeyguardEnablednull185 override fun setKeyguardEnabled(enabled: Boolean) { 186 _isKeyguardEnabled.value = enabled 187 } 188 dozeTimeTicknull189 fun dozeTimeTick(millis: Long) { 190 _dozeTimeTick.value = millis 191 } 192 showDismissibleKeyguardnull193 override fun showDismissibleKeyguard() { 194 showDismissibleKeyguard.value = showDismissibleKeyguard.value + 1 195 } 196 setLastDozeTapToWakePositionnull197 override fun setLastDozeTapToWakePosition(position: Point) { 198 _lastDozeTapToWakePosition.value = position 199 } 200 setAodAvailablenull201 override fun setAodAvailable(value: Boolean) { 202 _isAodAvailable.value = value 203 } 204 setDreamingnull205 override fun setDreaming(isDreaming: Boolean) { 206 _isDreaming.value = isDreaming 207 // Intentionally set both for testing, to avoid races with merge() in the interactor that 208 // would make testing difficult 209 _isDreamingWithOverlay.value = isDreaming 210 } 211 setDreamingWithOverlaynull212 fun setDreamingWithOverlay(isDreaming: Boolean) { 213 _isDreamingWithOverlay.value = isDreaming 214 } 215 setDozeAmountnull216 fun setDozeAmount(dozeAmount: Float) { 217 _dozeAmount.value = dozeAmount 218 } 219 setBiometricUnlockStatenull220 override fun setBiometricUnlockState( 221 mode: BiometricUnlockMode, 222 source: BiometricUnlockSource?, 223 ) { 224 _biometricUnlockState.tryEmit(BiometricUnlockModel(mode, source)) 225 } 226 setBiometricUnlockStatenull227 fun setBiometricUnlockState(mode: BiometricUnlockMode) { 228 setBiometricUnlockState(mode, BiometricUnlockSource.FINGERPRINT_SENSOR) 229 } 230 setBiometricUnlockSourcenull231 fun setBiometricUnlockSource(source: BiometricUnlockSource?) { 232 setBiometricUnlockState(BiometricUnlockMode.NONE, source) 233 } 234 setFaceSensorLocationnull235 fun setFaceSensorLocation(location: Point?) { 236 _faceSensorLocation.tryEmit(location) 237 } 238 setFingerprintSensorLocationnull239 fun setFingerprintSensorLocation(location: Point?) { 240 _fingerprintSensorLocation.tryEmit(location) 241 } 242 setDozeTransitionModelnull243 fun setDozeTransitionModel(model: DozeTransitionModel) { 244 _dozeTransitionModel.value = model 245 } 246 setStatusBarStatenull247 fun setStatusBarState(state: StatusBarState) { 248 _statusBarState.value = state 249 } 250 isUdfpsSupportednull251 override fun isUdfpsSupported(): Boolean { 252 return _isUdfpsSupported.value 253 } 254 setKeyguardAlphanull255 override fun setKeyguardAlpha(alpha: Float) { 256 _keyguardAlpha.value = alpha 257 } 258 setPanelAlphanull259 override fun setPanelAlpha(alpha: Float) { 260 panelAlpha.value = alpha 261 } 262 setZoomOutnull263 override fun setZoomOut(zoomOutFromShadeRadius: Float) { 264 zoomOut.value = zoomOutFromShadeRadius 265 } 266 setIsEncryptedOrLockdownnull267 fun setIsEncryptedOrLockdown(value: Boolean) { 268 _isEncryptedOrLockdown.value = value 269 } 270 setShowKeyguardWhenReenablednull271 override fun setShowKeyguardWhenReenabled(isShowKeyguardWhenReenabled: Boolean) { 272 this.isShowKeyguardWhenReenabled = isShowKeyguardWhenReenabled 273 } 274 isShowKeyguardWhenReenablednull275 override fun isShowKeyguardWhenReenabled(): Boolean { 276 return isShowKeyguardWhenReenabled 277 } 278 setCanIgnoreAuthAndReturnToGonenull279 override fun setCanIgnoreAuthAndReturnToGone(canWake: Boolean) { 280 _canIgnoreAuthAndReturnToGone.value = canWake 281 } 282 } 283 284 @Module 285 interface FakeKeyguardRepositoryModule { bindFakenull286 @Binds fun bindFake(fake: FakeKeyguardRepository): KeyguardRepository 287 } 288