1 package com.android.systemui.biometrics.data.repository
2 
3 import android.hardware.biometrics.PromptInfo
4 import com.android.systemui.biometrics.shared.model.PromptKind
5 import kotlinx.coroutines.flow.MutableStateFlow
6 import kotlinx.coroutines.flow.asStateFlow
7 
8 /** Fake implementation of [PromptRepository] for tests. */
9 class FakePromptRepository : PromptRepository {
10 
11     private val _isShowing = MutableStateFlow(false)
12     override val isShowing = _isShowing.asStateFlow()
13 
14     private val _promptInfo = MutableStateFlow<PromptInfo?>(null)
15     override val promptInfo = _promptInfo.asStateFlow()
16 
17     private val _userId = MutableStateFlow<Int?>(null)
18     override val userId = _userId.asStateFlow()
19 
20     private var _challenge = MutableStateFlow<Long?>(null)
21     override val challenge = _challenge.asStateFlow()
22 
23     private val _kind = MutableStateFlow<PromptKind>(PromptKind.Biometric())
24     override val kind = _kind.asStateFlow()
25 
26     private val _isConfirmationRequired = MutableStateFlow(false)
27     override val isConfirmationRequired = _isConfirmationRequired.asStateFlow()
28 
29     override fun setPrompt(
30         promptInfo: PromptInfo,
31         userId: Int,
32         gatekeeperChallenge: Long?,
33         kind: PromptKind,
34     ) = setPrompt(promptInfo, userId, gatekeeperChallenge, kind, forceConfirmation = false)
35 
36     fun setPrompt(
37         promptInfo: PromptInfo,
38         userId: Int,
39         gatekeeperChallenge: Long?,
40         kind: PromptKind,
41         forceConfirmation: Boolean = false,
42     ) {
43         _promptInfo.value = promptInfo
44         _userId.value = userId
45         _challenge.value = gatekeeperChallenge
46         _kind.value = kind
47         _isConfirmationRequired.value = promptInfo.isConfirmationRequested || forceConfirmation
48     }
49 
50     override fun unsetPrompt() {
51         _promptInfo.value = null
52         _userId.value = null
53         _challenge.value = null
54         _kind.value = PromptKind.Biometric()
55         _isConfirmationRequired.value = false
56     }
57 
58     fun setIsShowing(showing: Boolean) {
59         _isShowing.value = showing
60     }
61 }
62