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