ConfirmDeviceCredential should respond to cancel when launched through BP
Fixes: 128747871 Test: BiometricPrompt launched by ConfirmDeviceCredential is canceled Test: ConfirmLock* can also now be canceled Test: No effect on non-biometric related paths Change-Id: I237de136e63d523fece87fad7a93f4ecd66d800b
This commit is contained in:
@@ -16,19 +16,21 @@
|
||||
|
||||
package com.android.settings.password;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.DialogInterface;
|
||||
import android.hardware.biometrics.BiometricConstants;
|
||||
import android.hardware.biometrics.BiometricPrompt;
|
||||
import android.hardware.biometrics.BiometricPrompt.AuthenticationCallback;
|
||||
import android.hardware.biometrics.BiometricPrompt.AuthenticationResult;
|
||||
import android.hardware.biometrics.IBiometricConfirmDeviceCredentialCallback;
|
||||
import android.os.Bundle;
|
||||
import android.os.CancellationSignal;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.core.InstrumentedFragment;
|
||||
@@ -40,6 +42,8 @@ import java.util.concurrent.Executor;
|
||||
*/
|
||||
public class BiometricFragment extends InstrumentedFragment {
|
||||
|
||||
private static final String TAG = "ConfirmDeviceCredential/BiometricFragment";
|
||||
|
||||
// Re-set by the application. Should be done upon orientation changes, etc
|
||||
private Executor mClientExecutor;
|
||||
private AuthenticationCallback mClientCallback;
|
||||
@@ -48,7 +52,6 @@ public class BiometricFragment extends InstrumentedFragment {
|
||||
private int mUserId;
|
||||
|
||||
// Created/Initialized once and retained
|
||||
private final Handler mHandler = new Handler(Looper.getMainLooper());
|
||||
private Bundle mBundle;
|
||||
private BiometricPrompt mBiometricPrompt;
|
||||
private CancellationSignal mCancellationSignal;
|
||||
@@ -82,6 +85,20 @@ public class BiometricFragment extends InstrumentedFragment {
|
||||
}
|
||||
};
|
||||
|
||||
// TODO(b/123378871): Remove when moved.
|
||||
private final IBiometricConfirmDeviceCredentialCallback mCancelCallback
|
||||
= new IBiometricConfirmDeviceCredentialCallback.Stub() {
|
||||
@Override
|
||||
public void cancel() {
|
||||
final Activity activity = getActivity();
|
||||
if (activity != null) {
|
||||
activity.finish();
|
||||
} else {
|
||||
Log.e(TAG, "Activity null!");
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* @param bundle Bundle passed from {@link BiometricPrompt.Builder#buildIntent()}
|
||||
* @return
|
||||
@@ -123,6 +140,7 @@ public class BiometricFragment extends InstrumentedFragment {
|
||||
mBiometricPrompt = new BiometricPrompt.Builder(getContext())
|
||||
.setTitle(mBundle.getString(BiometricPrompt.KEY_TITLE))
|
||||
.setUseDefaultTitle() // use default title if title is null/empty
|
||||
.setFromConfirmDeviceCredential()
|
||||
.setSubtitle(mBundle.getString(BiometricPrompt.KEY_SUBTITLE))
|
||||
.setDescription(mBundle.getString(BiometricPrompt.KEY_DESCRIPTION))
|
||||
.setConfirmationRequired(
|
||||
@@ -135,7 +153,7 @@ public class BiometricFragment extends InstrumentedFragment {
|
||||
|
||||
// TODO: CC doesn't use crypto for now
|
||||
mBiometricPrompt.authenticateUser(mCancellationSignal, mClientExecutor,
|
||||
mAuthenticationCallback, mUserId);
|
||||
mAuthenticationCallback, mUserId, mCancelCallback);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Reference in New Issue
Block a user