Merge "Fix disappearing biometric prompt for the managed profile" into rvc-dev

This commit is contained in:
TreeHugger Robot
2020-05-27 11:36:45 +00:00
committed by Android (Google) Code Review

View File

@@ -107,6 +107,7 @@ public class ConfirmDeviceCredentialActivity extends FragmentActivity {
private int mUserId; private int mUserId;
private int mCredentialMode; private int mCredentialMode;
private boolean mGoingToBackground; private boolean mGoingToBackground;
private boolean mWaitingForBiometricCallback;
private Executor mExecutor = (runnable -> { private Executor mExecutor = (runnable -> {
mHandler.post(runnable); mHandler.post(runnable);
@@ -116,6 +117,7 @@ public class ConfirmDeviceCredentialActivity extends FragmentActivity {
@Override @Override
public void onAuthenticationError(int errorCode, @NonNull CharSequence errString) { public void onAuthenticationError(int errorCode, @NonNull CharSequence errString) {
if (!mGoingToBackground) { if (!mGoingToBackground) {
mWaitingForBiometricCallback = false;
if (errorCode == BiometricPrompt.BIOMETRIC_ERROR_USER_CANCELED if (errorCode == BiometricPrompt.BIOMETRIC_ERROR_USER_CANCELED
|| errorCode == BiometricPrompt.BIOMETRIC_ERROR_CANCELED) { || errorCode == BiometricPrompt.BIOMETRIC_ERROR_CANCELED) {
finish(); finish();
@@ -123,11 +125,15 @@ public class ConfirmDeviceCredentialActivity extends FragmentActivity {
// All other errors go to some version of CC // All other errors go to some version of CC
showConfirmCredentials(); showConfirmCredentials();
} }
} else if (mWaitingForBiometricCallback) { // mGoingToBackground is true
mWaitingForBiometricCallback = false;
finish();
} }
} }
@Override @Override
public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) { public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) {
mWaitingForBiometricCallback = false;
mTrustManager.setDeviceLockedForUser(mUserId, false); mTrustManager.setDeviceLockedForUser(mUserId, false);
final boolean isStrongAuth = result.getAuthenticationType() final boolean isStrongAuth = result.getAuthenticationType()
== BiometricPrompt.AUTHENTICATION_RESULT_TYPE_DEVICE_CREDENTIAL; == BiometricPrompt.AUTHENTICATION_RESULT_TYPE_DEVICE_CREDENTIAL;
@@ -142,6 +148,7 @@ public class ConfirmDeviceCredentialActivity extends FragmentActivity {
@Override @Override
public void onAuthenticationFailed() { public void onAuthenticationFailed() {
mWaitingForBiometricCallback = false;
mDevicePolicyManager.reportFailedBiometricAttempt(mUserId); mDevicePolicyManager.reportFailedBiometricAttempt(mUserId);
} }
@@ -262,6 +269,7 @@ public class ConfirmDeviceCredentialActivity extends FragmentActivity {
finish(); finish();
} else if (launchedBiometric) { } else if (launchedBiometric) {
// Keep this activity alive until BiometricPrompt goes away // Keep this activity alive until BiometricPrompt goes away
mWaitingForBiometricCallback = true;
} else { } else {
Log.d(TAG, "No pattern, password or PIN set."); Log.d(TAG, "No pattern, password or PIN set.");
setResult(Activity.RESULT_OK); setResult(Activity.RESULT_OK);
@@ -320,7 +328,9 @@ public class ConfirmDeviceCredentialActivity extends FragmentActivity {
super.onPause(); super.onPause();
if (!isChangingConfigurations()) { if (!isChangingConfigurations()) {
mGoingToBackground = true; mGoingToBackground = true;
finish(); if (!mWaitingForBiometricCallback) {
finish();
}
} else { } else {
mGoingToBackground = false; mGoingToBackground = false;
} }