diff options
author | 2024-04-03 23:11:49 +0000 | |
---|---|---|
committer | 2024-04-03 23:11:49 +0000 | |
commit | c2f77c0e643eb18b78a765d2f85728fc2a19ad8d (patch) | |
tree | a13a78591785b8ade604e3196045b944cff4c214 /packages/CredentialManager/src | |
parent | 2d1f21794679e84356a569e912e5f67a79ee7a4c (diff) | |
parent | 0cc43597b2930448278d97e59c58e38545ebba53 (diff) |
Merge "Biometric Credman Layered UI Bugfix" into main
Diffstat (limited to 'packages/CredentialManager/src')
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, |