summaryrefslogtreecommitdiff
path: root/packages/CredentialManager/src
diff options
context:
space:
mode:
author Arpan Kaphle <akaphle@google.com> 2024-04-03 23:11:49 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-04-03 23:11:49 +0000
commitc2f77c0e643eb18b78a765d2f85728fc2a19ad8d (patch)
treea13a78591785b8ade604e3196045b944cff4c214 /packages/CredentialManager/src
parent2d1f21794679e84356a569e912e5f67a79ee7a4c (diff)
parent0cc43597b2930448278d97e59c58e38545ebba53 (diff)
Merge "Biometric Credman Layered UI Bugfix" into main
Diffstat (limited to 'packages/CredentialManager/src')
-rw-r--r--packages/CredentialManager/src/com/android/credentialmanager/common/BiometricHandler.kt20
-rw-r--r--packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialComponents.kt7
2 files changed, 18 insertions, 9 deletions
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/common/BiometricHandler.kt b/packages/CredentialManager/src/com/android/credentialmanager/common/BiometricHandler.kt
index d21077ee7c5a..a30956ecf5a5 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/common/BiometricHandler.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/common/BiometricHandler.kt
@@ -98,7 +98,8 @@ fun runBiometricFlow(
context: Context,
openMoreOptionsPage: () -> Unit,
sendDataToProvider: (EntryInfo, BiometricPrompt.AuthenticationResult) -> Unit,
- onCancelFlowAndFinish: (String) -> Unit,
+ onCancelFlowAndFinish: () -> Unit,
+ onIllegalStateAndFinish: (String) -> Unit,
getRequestDisplayInfo: RequestDisplayInfo? = null,
getProviderInfoList: List<ProviderInfo>? = null,
getProviderDisplayInfo: ProviderDisplayInfo? = null,
@@ -131,7 +132,7 @@ fun runBiometricFlow(
val callback: BiometricPrompt.AuthenticationCallback =
setupBiometricAuthenticationCallback(sendDataToProvider, biometricEntry,
- onCancelFlowAndFinish)
+ onCancelFlowAndFinish, onIllegalStateAndFinish)
val cancellationSignal = CancellationSignal()
cancellationSignal.setOnCancelListener {
@@ -211,7 +212,8 @@ private fun removeDeviceCredential(requestAllowedAuthenticators: Int): Int {
private fun setupBiometricAuthenticationCallback(
sendDataToProvider: (EntryInfo, BiometricPrompt.AuthenticationResult) -> Unit,
selectedEntry: EntryInfo,
- onCancelFlowAndFinish: (String) -> Unit
+ onCancelFlowAndFinish: () -> Unit,
+ onIllegalStateAndFinish: (String) -> Unit,
): BiometricPrompt.AuthenticationCallback {
val callback: BiometricPrompt.AuthenticationCallback =
object : BiometricPrompt.AuthenticationCallback() {
@@ -224,14 +226,12 @@ private fun setupBiometricAuthenticationCallback(
if (authResult != null) {
sendDataToProvider(selectedEntry, authResult)
} else {
- onCancelFlowAndFinish("The biometric flow succeeded but unexpectedly " +
+ onIllegalStateAndFinish("The biometric flow succeeded but unexpectedly " +
"returned a null value.")
- // TODO(b/326243754) : Propagate to provider
}
} catch (e: Exception) {
- onCancelFlowAndFinish("The biometric flow succeeded but failed on handling " +
+ onIllegalStateAndFinish("The biometric flow succeeded but failed on handling " +
"the result. See: \n$e\n")
- // TODO(b/326243754) : Propagate to provider
}
}
@@ -245,6 +245,12 @@ private fun setupBiometricAuthenticationCallback(
override fun onAuthenticationError(errorCode: Int, errString: CharSequence?) {
super.onAuthenticationError(errorCode, errString)
Log.d(TAG, "Authentication error-ed out: $errorCode and $errString")
+ if (errorCode == BiometricPrompt.BIOMETRIC_ERROR_USER_CANCELED) {
+ // Note that because the biometric prompt is imbued directly
+ // into the selector, parity applies to the selector's cancellation instead
+ // of the provider's biometric prompt cancellation.
+ onCancelFlowAndFinish()
+ }
// TODO(b/326243754) : Propagate to provider
}
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialComponents.kt b/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialComponents.kt
index b59ccc264630..4d7272c7716e 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialComponents.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialComponents.kt
@@ -148,7 +148,8 @@ fun GetCredentialScreen(
// activeEntry will always be what represents the single tap flow
biometricEntry = getCredentialUiState.activeEntry,
onMoreOptionSelected = viewModel::getFlowOnMoreOptionSelected,
- onCancelFlowAndFinish = viewModel::onIllegalUiState,
+ onCancelFlowAndFinish = viewModel::onUserCancel,
+ onIllegalStateAndFinish = viewModel::onIllegalUiState,
requestDisplayInfo = getCredentialUiState.requestDisplayInfo,
providerInfoList = getCredentialUiState.providerInfoList,
providerDisplayInfo = getCredentialUiState.providerDisplayInfo,
@@ -212,7 +213,8 @@ fun GetCredentialScreen(
@Composable
internal fun BiometricSelectionPage(
biometricEntry: EntryInfo?,
- onCancelFlowAndFinish: (String) -> Unit,
+ onCancelFlowAndFinish: () -> Unit,
+ onIllegalStateAndFinish: (String) -> Unit,
onMoreOptionSelected: () -> Unit,
requestDisplayInfo: RequestDisplayInfo,
providerInfoList: List<ProviderInfo>,
@@ -230,6 +232,7 @@ internal fun BiometricSelectionPage(
openMoreOptionsPage = onMoreOptionSelected,
sendDataToProvider = onBiometricEntrySelected,
onCancelFlowAndFinish = onCancelFlowAndFinish,
+ onIllegalStateAndFinish = onIllegalStateAndFinish,
getRequestDisplayInfo = requestDisplayInfo,
getProviderInfoList = providerInfoList,
getProviderDisplayInfo = providerDisplayInfo,