• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.android.systemui.biometrics.domain.model
2 
3 import android.hardware.biometrics.PromptInfo
4 import com.android.systemui.biometrics.shared.model.BiometricUserInfo
5 
6 /**
7  * Preferences for BiometricPrompt, such as title & description, that are immutable while the prompt
8  * is showing.
9  *
10  * This roughly corresponds to a "request" by the system or an app to show BiometricPrompt and it
11  * contains a subset of the information in a [PromptInfo] that is relevant to SysUI.
12  */
13 sealed class BiometricPromptRequest(
14     val title: String,
15     val subtitle: String,
16     val description: String,
17     val userInfo: BiometricUserInfo,
18     val operationInfo: BiometricOperationInfo,
19 ) {
20     /** Prompt using one or more biometrics. */
21     class Biometric(
22         info: PromptInfo,
23         userInfo: BiometricUserInfo,
24         operationInfo: BiometricOperationInfo,
25         val modalities: BiometricModalities,
26     ) :
27         BiometricPromptRequest(
28             title = info.title?.toString() ?: "",
29             subtitle = info.subtitle?.toString() ?: "",
30             description = info.description?.toString() ?: "",
31             userInfo = userInfo,
32             operationInfo = operationInfo
33         ) {
34         val negativeButtonText: String = info.negativeButtonText?.toString() ?: ""
35     }
36 
37     /** Prompt using a credential (pin, pattern, password). */
38     sealed class Credential(
39         info: PromptInfo,
40         userInfo: BiometricUserInfo,
41         operationInfo: BiometricOperationInfo,
42     ) :
43         BiometricPromptRequest(
44             title = (info.deviceCredentialTitle ?: info.title)?.toString() ?: "",
45             subtitle = (info.deviceCredentialSubtitle ?: info.subtitle)?.toString() ?: "",
46             description = (info.deviceCredentialDescription ?: info.description)?.toString() ?: "",
47             userInfo = userInfo,
48             operationInfo = operationInfo,
49         ) {
50 
51         /** PIN prompt. */
52         class Pin(
53             info: PromptInfo,
54             userInfo: BiometricUserInfo,
55             operationInfo: BiometricOperationInfo,
56         ) : Credential(info, userInfo, operationInfo)
57 
58         /** Password prompt. */
59         class Password(
60             info: PromptInfo,
61             userInfo: BiometricUserInfo,
62             operationInfo: BiometricOperationInfo,
63         ) : Credential(info, userInfo, operationInfo)
64 
65         /** Pattern prompt. */
66         class Pattern(
67             info: PromptInfo,
68             userInfo: BiometricUserInfo,
69             operationInfo: BiometricOperationInfo,
70             val stealthMode: Boolean,
71         ) : Credential(info, userInfo, operationInfo)
72     }
73 }
74