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