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