private void SetResultSafe(FingerprintAuthenticationResult result) { if (!(_taskCompletionSource.Task.IsCanceled || _taskCompletionSource.Task.IsCompleted || _taskCompletionSource.Task.IsFaulted)) { _taskCompletionSource.SetResult(result); } }
protected override async Task<FingerprintAuthenticationResult> NativeAuthenticateAsync(AuthenticationRequestConfiguration authRequestConfig, CancellationToken cancellationToken = new CancellationToken()) { var result = new FingerprintAuthenticationResult(); SetupContextProperties(authRequestConfig); Tuple<bool, NSError> resTuple; using (cancellationToken.Register(CancelAuthentication)) { resTuple = await _context.EvaluatePolicyAsync(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, authRequestConfig.Reason); } if (resTuple.Item1) { result.Status = FingerprintAuthenticationResultStatus.Succeeded; } else { switch ((LAStatus)(int)resTuple.Item2.Code) { case LAStatus.AuthenticationFailed: var description = resTuple.Item2.Description; if (description != null && description.Contains("retry limit exceeded")) { result.Status = FingerprintAuthenticationResultStatus.TooManyAttempts; } else { result.Status = FingerprintAuthenticationResultStatus.Failed; } break; case LAStatus.UserCancel: case LAStatus.AppCancel: result.Status = FingerprintAuthenticationResultStatus.Canceled; break; case LAStatus.UserFallback: result.Status = FingerprintAuthenticationResultStatus.FallbackRequested; break; case LAStatus.TouchIDLockout: result.Status = FingerprintAuthenticationResultStatus.TooManyAttempts; break; default: result.Status = FingerprintAuthenticationResultStatus.UnknownError; break; } result.ErrorMessage = resTuple.Item2.LocalizedDescription; } CreateNewContext(); return result; }
private async Task SetResultAsync(FingerprintAuthenticationResult result) { if (result.Authenticated) { await Navigation.PushAsync(new SecretView()); } else { lblStatus.Text = $"{result.Status}: {result.ErrorMessage}"; } }
public override void OnAuthenticationError(FingerprintState errorCode, ICharSequence errString) { base.OnAuthenticationError(errorCode, errString); var message = errString != null ? errString.ToString() : string.Empty; var result = new FingerprintAuthenticationResult { Status = FingerprintAuthenticationResultStatus.Failed, ErrorMessage = message }; if (errorCode == FingerprintState.ErrorLockout) { result.Status = FingerprintAuthenticationResultStatus.TooManyAttempts; } SetResultSafe(result); }
// https://developer.android.com/reference/android/hardware/fingerprint/FingerprintManager.AuthenticationCallback.html public override void OnAuthenticationSucceeded(FingerprintManager.AuthenticationResult res) { base.OnAuthenticationSucceeded(res); var result = new FingerprintAuthenticationResult { Status = FingerprintAuthenticationResultStatus.Succeeded }; SetResultSafe(result); }
private async void Dismiss(FingerprintAuthenticationResult result, bool animation = true) { if (animation) { await AnimateResultAsync(result.Status); } _resultTaskCompletionSource.SetResult(result); Dismiss(); }