Adding biometric FRR Notification atom.
Test: statsd_testdrive 793 Test: statsd_testdrive 184 Test: m -j50 RunSettingsRoboTests ROBOTEST_FILTER=com.android.settings.biometrics Test: atest FingerprintUpdaterTest FaceUpdaterTest Bug: 302171089 Change-Id: I4c921b75321db79cc975b98b54b176a43379cd7c
This commit is contained in:
committed by
Joshua Mccloskey
parent
e28934a9f9
commit
e5f62676c8
@@ -25,6 +25,7 @@ import android.app.admin.DevicePolicyManager;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentSender;
|
||||
import android.hardware.biometrics.BiometricManager;
|
||||
import android.hardware.biometrics.SensorProperties;
|
||||
import android.hardware.face.FaceManager;
|
||||
import android.hardware.face.FaceSensorPropertiesInternal;
|
||||
@@ -65,6 +66,7 @@ import java.lang.annotation.RetentionPolicy;
|
||||
*/
|
||||
public class BiometricUtils {
|
||||
private static final String TAG = "BiometricUtils";
|
||||
public static final String EXTRA_ENROLL_REASON = BiometricManager.EXTRA_ENROLL_REASON;
|
||||
|
||||
/** The character ' • ' to separate the setup choose options */
|
||||
public static final String SEPARATOR = " \u2022 ";
|
||||
|
@@ -265,6 +265,8 @@ public class FaceEnrollEducation extends BiometricEnrollBase {
|
||||
}
|
||||
|
||||
intent.putExtra(EXTRA_KEY_REQUIRE_DIVERSITY, !mSwitchDiversity.isChecked());
|
||||
intent.putExtra(BiometricUtils.EXTRA_ENROLL_REASON,
|
||||
getIntent().getIntExtra(BiometricUtils.EXTRA_ENROLL_REASON, -1));
|
||||
|
||||
if (!mSwitchDiversity.isChecked() && mAccessibilityEnabled) {
|
||||
FaceEnrollAccessibilityDialog dialog = FaceEnrollAccessibilityDialog.newInstance();
|
||||
|
@@ -165,7 +165,7 @@ public class FaceEnrollEnrolling extends BiometricsEnrollEnrolling {
|
||||
disabledFeatures[i] = mDisabledFeatures.get(i);
|
||||
}
|
||||
|
||||
return new FaceEnrollSidecar(disabledFeatures);
|
||||
return new FaceEnrollSidecar(disabledFeatures, getIntent());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -484,6 +484,9 @@ public class FaceEnrollIntroduction extends BiometricEnrollIntroduction {
|
||||
protected Intent getEnrollingIntent() {
|
||||
Intent intent = new Intent(this, FaceEnrollEducation.class);
|
||||
WizardManagerHelper.copyWizardManagerExtras(getIntent(), intent);
|
||||
intent.putExtra(BiometricUtils.EXTRA_ENROLL_REASON,
|
||||
getIntent().getIntExtra(BiometricUtils.EXTRA_ENROLL_REASON, -1));
|
||||
|
||||
return intent;
|
||||
}
|
||||
|
||||
|
@@ -18,6 +18,7 @@ package com.android.settings.biometrics.face;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.Intent;
|
||||
import android.hardware.face.FaceManager;
|
||||
|
||||
import com.android.settings.biometrics.BiometricEnrollSidecar;
|
||||
@@ -33,8 +34,11 @@ public class FaceEnrollSidecar extends BiometricEnrollSidecar {
|
||||
|
||||
private FaceUpdater mFaceUpdater;
|
||||
|
||||
public FaceEnrollSidecar(int[] disabledFeatures) {
|
||||
private Intent mIntent;
|
||||
|
||||
public FaceEnrollSidecar(int[] disabledFeatures, Intent intent) {
|
||||
mDisabledFeatures = Arrays.copyOf(disabledFeatures, disabledFeatures.length);
|
||||
mIntent = intent;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -47,7 +51,7 @@ public class FaceEnrollSidecar extends BiometricEnrollSidecar {
|
||||
public void startEnrollment() {
|
||||
super.startEnrollment();
|
||||
mFaceUpdater.enroll(mUserId, mToken, mEnrollmentCancel,
|
||||
mEnrollmentCallback, mDisabledFeatures);
|
||||
mEnrollmentCallback, mDisabledFeatures, mIntent);
|
||||
}
|
||||
|
||||
private FaceManager.EnrollmentCallback mEnrollmentCallback
|
||||
|
@@ -17,8 +17,10 @@
|
||||
package com.android.settings.biometrics.face;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.hardware.face.Face;
|
||||
import android.hardware.face.FaceEnrollCell;
|
||||
import android.hardware.face.FaceEnrollOptions;
|
||||
import android.hardware.face.FaceManager;
|
||||
import android.os.CancellationSignal;
|
||||
import android.view.Surface;
|
||||
@@ -26,6 +28,7 @@ import android.view.Surface;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.settings.Utils;
|
||||
import com.android.settings.biometrics.BiometricUtils;
|
||||
import com.android.settings.safetycenter.BiometricsSafetySource;
|
||||
|
||||
/**
|
||||
@@ -49,19 +52,19 @@ public class FaceUpdater {
|
||||
|
||||
/** Wrapper around the {@link FaceManager#enroll} method. */
|
||||
public void enroll(int userId, byte[] hardwareAuthToken, CancellationSignal cancel,
|
||||
FaceManager.EnrollmentCallback callback, int[] disabledFeatures) {
|
||||
FaceManager.EnrollmentCallback callback, int[] disabledFeatures, Intent intent) {
|
||||
this.enroll(userId, hardwareAuthToken, cancel,
|
||||
new NotifyingEnrollmentCallback(mContext, callback), disabledFeatures,
|
||||
null, false);
|
||||
null, false, intent);
|
||||
}
|
||||
|
||||
/** Wrapper around the {@link FaceManager#enroll} method. */
|
||||
public void enroll(int userId, byte[] hardwareAuthToken, CancellationSignal cancel,
|
||||
FaceManager.EnrollmentCallback callback, int[] disabledFeatures,
|
||||
@Nullable Surface previewSurface, boolean debugConsent) {
|
||||
@Nullable Surface previewSurface, boolean debugConsent, Intent intent) {
|
||||
mFaceManager.enroll(userId, hardwareAuthToken, cancel,
|
||||
new NotifyingEnrollmentCallback(mContext, callback), disabledFeatures,
|
||||
previewSurface, debugConsent);
|
||||
previewSurface, debugConsent, toFaceEnrollOptions(intent));
|
||||
}
|
||||
|
||||
/** Wrapper around the {@link FaceManager#remove} method. */
|
||||
@@ -135,4 +138,14 @@ public class FaceUpdater {
|
||||
BiometricsSafetySource.onBiometricsChanged(mContext); // biometrics data changed
|
||||
}
|
||||
}
|
||||
|
||||
private FaceEnrollOptions toFaceEnrollOptions(Intent intent) {
|
||||
final int reason = intent.getIntExtra(BiometricUtils.EXTRA_ENROLL_REASON, -1);
|
||||
final FaceEnrollOptions.Builder builder = new FaceEnrollOptions.Builder();
|
||||
builder.setEnrollReason(FaceEnrollOptions.ENROLL_REASON_UNKNOWN);
|
||||
if (reason != -1) {
|
||||
builder.setEnrollReason(reason);
|
||||
}
|
||||
return builder.build();
|
||||
}
|
||||
}
|
||||
|
@@ -352,7 +352,7 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
|
||||
@Override
|
||||
protected BiometricEnrollSidecar getSidecar() {
|
||||
final FingerprintEnrollSidecar sidecar = new FingerprintEnrollSidecar(this,
|
||||
FingerprintManager.ENROLL_ENROLL);
|
||||
FingerprintManager.ENROLL_ENROLL, getIntent());
|
||||
return sidecar;
|
||||
}
|
||||
|
||||
|
@@ -292,6 +292,8 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements
|
||||
@Override
|
||||
protected Intent getFingerprintEnrollingIntent() {
|
||||
final Intent ret = super.getFingerprintEnrollingIntent();
|
||||
ret.putExtra(BiometricUtils.EXTRA_ENROLL_REASON,
|
||||
getIntent().getIntExtra(BiometricUtils.EXTRA_ENROLL_REASON, -1));
|
||||
if (Flags.udfpsEnrollCalibration()) {
|
||||
if (mCalibrator != null) {
|
||||
ret.putExtras(mCalibrator.getExtrasForNextIntent(true));
|
||||
@@ -349,7 +351,7 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements
|
||||
FingerprintEnrollEnrolling.TAG_SIDECAR);
|
||||
if (mSidecar == null) {
|
||||
mSidecar = new FingerprintEnrollSidecar(this,
|
||||
FingerprintManager.ENROLL_FIND_SENSOR);
|
||||
FingerprintManager.ENROLL_FIND_SENSOR, getIntent());
|
||||
getSupportFragmentManager().beginTransaction()
|
||||
.add(mSidecar, FingerprintEnrollEnrolling.TAG_SIDECAR)
|
||||
.commitAllowingStateLoss();
|
||||
|
@@ -59,7 +59,6 @@ import com.google.android.setupdesign.util.DeviceHelper;
|
||||
import java.util.List;
|
||||
|
||||
public class FingerprintEnrollIntroduction extends BiometricEnrollIntroduction {
|
||||
|
||||
private static final String TAG = "FingerprintIntro";
|
||||
|
||||
@VisibleForTesting
|
||||
@@ -388,6 +387,8 @@ public class FingerprintEnrollIntroduction extends BiometricEnrollIntroduction {
|
||||
intent.putExtras(mCalibrator.getExtrasForNextIntent(false));
|
||||
}
|
||||
}
|
||||
intent.putExtra(BiometricUtils.EXTRA_ENROLL_REASON,
|
||||
getIntent().getIntExtra(BiometricUtils.EXTRA_ENROLL_REASON, -1));
|
||||
return intent;
|
||||
}
|
||||
|
||||
|
@@ -21,6 +21,8 @@ import static android.hardware.fingerprint.FingerprintManager.ENROLL_ENROLL;
|
||||
import android.app.Activity;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.hardware.fingerprint.FingerprintEnrollOptions;
|
||||
import android.hardware.fingerprint.FingerprintManager;
|
||||
import android.os.SystemClock;
|
||||
import android.util.Log;
|
||||
@@ -28,6 +30,9 @@ import android.util.Log;
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.biometrics.BiometricEnrollSidecar;
|
||||
import com.android.settings.biometrics.BiometricUtils;
|
||||
|
||||
import com.google.android.setupcompat.util.WizardManagerHelper;
|
||||
|
||||
/**
|
||||
* Sidecar fragment to handle the state around fingerprint enrollment.
|
||||
@@ -39,15 +44,18 @@ public class FingerprintEnrollSidecar extends BiometricEnrollSidecar {
|
||||
private @FingerprintManager.EnrollReason int mEnrollReason;
|
||||
private final MessageDisplayController mMessageDisplayController;
|
||||
private final boolean mMessageDisplayControllerFlag;
|
||||
private final Intent mIntent;
|
||||
|
||||
/**
|
||||
* Create a new FingerprintEnrollSidecar object.
|
||||
* @param context associated context
|
||||
*
|
||||
* @param context associated context
|
||||
* @param enrollReason reason for enrollment
|
||||
*/
|
||||
public FingerprintEnrollSidecar(Context context,
|
||||
@FingerprintManager.EnrollReason int enrollReason) {
|
||||
@FingerprintManager.EnrollReason int enrollReason, Intent intent) {
|
||||
mEnrollReason = enrollReason;
|
||||
mIntent = intent;
|
||||
|
||||
int helpMinimumDisplayTime = context.getResources().getInteger(
|
||||
R.integer.enrollment_help_minimum_time_display);
|
||||
@@ -85,14 +93,21 @@ public class FingerprintEnrollSidecar extends BiometricEnrollSidecar {
|
||||
return;
|
||||
}
|
||||
|
||||
if (mIntent.getIntExtra(BiometricUtils.EXTRA_ENROLL_REASON, -1) == -1) {
|
||||
final boolean isSuw = WizardManagerHelper.isAnySetupWizard(mIntent);
|
||||
mIntent.putExtra(BiometricUtils.EXTRA_ENROLL_REASON,
|
||||
isSuw ? FingerprintEnrollOptions.ENROLL_REASON_SUW :
|
||||
FingerprintEnrollOptions.ENROLL_REASON_SETTINGS);
|
||||
}
|
||||
|
||||
if (mEnrollReason == ENROLL_ENROLL && mMessageDisplayControllerFlag) {
|
||||
//API calls need to be processed for {@link FingerprintEnrollEnrolling}
|
||||
mFingerprintUpdater.enroll(mToken, mEnrollmentCancel, mUserId,
|
||||
mMessageDisplayController, mEnrollReason);
|
||||
mMessageDisplayController, mEnrollReason, mIntent);
|
||||
} else {
|
||||
//No processing required for {@link FingerprintEnrollFindSensor}
|
||||
mFingerprintUpdater.enroll(mToken, mEnrollmentCancel, mUserId, mEnrollmentCallback,
|
||||
mEnrollReason);
|
||||
mEnrollReason, mIntent);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -100,7 +115,8 @@ public class FingerprintEnrollSidecar extends BiometricEnrollSidecar {
|
||||
mEnrollReason = enrollReason;
|
||||
}
|
||||
|
||||
@VisibleForTesting FingerprintManager.EnrollmentCallback mEnrollmentCallback
|
||||
@VisibleForTesting
|
||||
FingerprintManager.EnrollmentCallback mEnrollmentCallback
|
||||
= new FingerprintManager.EnrollmentCallback() {
|
||||
|
||||
@Override
|
||||
|
@@ -17,13 +17,16 @@
|
||||
package com.android.settings.biometrics.fingerprint;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.hardware.fingerprint.Fingerprint;
|
||||
import android.hardware.fingerprint.FingerprintEnrollOptions;
|
||||
import android.hardware.fingerprint.FingerprintManager;
|
||||
import android.os.CancellationSignal;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.settings.Utils;
|
||||
import com.android.settings.biometrics.BiometricUtils;
|
||||
import com.android.settings.safetycenter.BiometricsSafetySource;
|
||||
|
||||
/**
|
||||
@@ -48,9 +51,10 @@ public class FingerprintUpdater {
|
||||
/** Wrapper around the {@link FingerprintManager#enroll} method. */
|
||||
public void enroll(byte [] hardwareAuthToken, CancellationSignal cancel, int userId,
|
||||
FingerprintManager.EnrollmentCallback callback,
|
||||
@FingerprintManager.EnrollReason int enrollReason) {
|
||||
@FingerprintManager.EnrollReason int enrollReason, Intent intent) {
|
||||
mFingerprintManager.enroll(hardwareAuthToken, cancel, userId,
|
||||
new NotifyingEnrollmentCallback(mContext, callback), enrollReason);
|
||||
new NotifyingEnrollmentCallback(mContext, callback), enrollReason,
|
||||
toFingerprintEnrollOptions(intent));
|
||||
}
|
||||
|
||||
/** Wrapper around the {@link FingerprintManager#remove} method. */
|
||||
@@ -138,4 +142,14 @@ public class FingerprintUpdater {
|
||||
BiometricsSafetySource.onBiometricsChanged(mContext); // biometrics data changed
|
||||
}
|
||||
}
|
||||
|
||||
private FingerprintEnrollOptions toFingerprintEnrollOptions(Intent intent) {
|
||||
final int reason = intent.getIntExtra(BiometricUtils.EXTRA_ENROLL_REASON, -1);
|
||||
final FingerprintEnrollOptions.Builder builder = new FingerprintEnrollOptions.Builder();
|
||||
builder.setEnrollReason(FingerprintEnrollOptions.ENROLL_REASON_UNKNOWN);
|
||||
if (reason != -1) {
|
||||
builder.setEnrollReason(reason);
|
||||
}
|
||||
return builder.build();
|
||||
}
|
||||
}
|
||||
|
@@ -18,12 +18,16 @@ package com.android.settings.biometrics.fingerprint2.domain.interactor
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.hardware.biometrics.BiometricConstants;
|
||||
import android.hardware.biometrics.BiometricFingerprintConstants
|
||||
import android.hardware.fingerprint.FingerprintEnrollOptions;
|
||||
import android.hardware.fingerprint.FingerprintManager
|
||||
import android.hardware.fingerprint.FingerprintManager.GenerateChallengeCallback
|
||||
import android.hardware.fingerprint.FingerprintManager.RemovalCallback
|
||||
import android.os.CancellationSignal
|
||||
import android.util.Log
|
||||
import com.android.settings.biometrics.GatekeeperPasswordProvider
|
||||
import com.android.settings.biometrics.BiometricUtils
|
||||
import com.android.settings.biometrics.fingerprint2.conversion.Util.toEnrollError
|
||||
import com.android.settings.biometrics.fingerprint2.conversion.Util.toOriginalReason
|
||||
import com.android.settings.biometrics.fingerprint2.data.repository.FingerprintSensorRepository
|
||||
@@ -35,6 +39,8 @@ import com.android.settings.biometrics.fingerprint2.lib.model.FingerprintData
|
||||
import com.android.settings.biometrics.fingerprint2.lib.model.FingerprintFlow
|
||||
import com.android.settings.biometrics.fingerprint2.lib.model.SetupWizard
|
||||
import com.android.settings.password.ChooseLockSettingsHelper
|
||||
import com.android.systemui.biometrics.shared.model.toFingerprintSensor
|
||||
import com.google.android.setupcompat.util.WizardManagerHelper
|
||||
import kotlin.coroutines.resume
|
||||
import kotlin.coroutines.suspendCoroutine
|
||||
import kotlinx.coroutines.CancellableContinuation
|
||||
@@ -60,6 +66,7 @@ class FingerprintManagerInteractorImpl(
|
||||
private val gatekeeperPasswordProvider: GatekeeperPasswordProvider,
|
||||
private val pressToAuthInteractor: PressToAuthInteractor,
|
||||
private val fingerprintFlow: FingerprintFlow,
|
||||
private val intent: Intent,
|
||||
) : FingerprintManagerInteractor {
|
||||
|
||||
private val maxFingerprints =
|
||||
@@ -158,12 +165,21 @@ class FingerprintManagerInteractorImpl(
|
||||
}
|
||||
|
||||
val cancellationSignal = CancellationSignal()
|
||||
|
||||
if (intent.getIntExtra(BiometricUtils.EXTRA_ENROLL_REASON, -1) === -1) {
|
||||
val isSuw: Boolean = WizardManagerHelper.isAnySetupWizard(intent)
|
||||
intent.putExtra(BiometricUtils.EXTRA_ENROLL_REASON,
|
||||
if (isSuw) FingerprintEnrollOptions.ENROLL_REASON_SUW else
|
||||
FingerprintEnrollOptions.ENROLL_REASON_SETTINGS)
|
||||
}
|
||||
|
||||
fingerprintManager.enroll(
|
||||
hardwareAuthToken,
|
||||
cancellationSignal,
|
||||
applicationContext.userId,
|
||||
enrollmentCallback,
|
||||
enrollReason.toOriginalReason(),
|
||||
toFingerprintEnrollOptions(intent)
|
||||
)
|
||||
awaitClose {
|
||||
// If the stream has not been ended, and the user has stopped collecting the flow
|
||||
@@ -244,4 +260,15 @@ class FingerprintManagerInteractorImpl(
|
||||
applicationContext.userId,
|
||||
)
|
||||
}
|
||||
|
||||
private fun toFingerprintEnrollOptions(intent: Intent): FingerprintEnrollOptions {
|
||||
val reason: Int =
|
||||
intent.getIntExtra(BiometricUtils.EXTRA_ENROLL_REASON, -1)
|
||||
val builder: FingerprintEnrollOptions.Builder = FingerprintEnrollOptions.Builder()
|
||||
builder.setEnrollReason(FingerprintEnrollOptions.ENROLL_REASON_UNKNOWN)
|
||||
if (reason != -1) {
|
||||
builder.setEnrollReason(reason)
|
||||
}
|
||||
return builder.build()
|
||||
}
|
||||
}
|
||||
|
@@ -191,6 +191,7 @@ class FingerprintEnrollmentV2Activity : FragmentActivity() {
|
||||
GatekeeperPasswordProvider(LockPatternUtils(context)),
|
||||
pressToAuthInteractor,
|
||||
enrollType,
|
||||
getIntent(),
|
||||
)
|
||||
|
||||
var challenge: Long? = intent.getExtra(BiometricEnrollBase.EXTRA_KEY_CHALLENGE) as Long?
|
||||
|
@@ -232,6 +232,7 @@ class FingerprintSettingsV2Fragment :
|
||||
GatekeeperPasswordProvider(LockPatternUtils(context.applicationContext)),
|
||||
pressToAuthInteractor,
|
||||
Settings,
|
||||
getIntent()
|
||||
)
|
||||
|
||||
val token = intent.getByteArrayExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN)
|
||||
|
@@ -23,6 +23,7 @@ import static com.android.settings.biometrics2.ui.model.EnrollmentProgress.INITI
|
||||
import static com.android.settings.biometrics2.ui.model.EnrollmentProgress.INITIAL_STEPS;
|
||||
|
||||
import android.app.Application;
|
||||
import android.content.Intent;
|
||||
import android.content.res.Resources;
|
||||
import android.hardware.fingerprint.FingerprintManager.EnrollReason;
|
||||
import android.hardware.fingerprint.FingerprintManager.EnrollmentCallback;
|
||||
@@ -212,10 +213,11 @@ public class FingerprintEnrollProgressViewModel extends AndroidViewModel {
|
||||
res.getBoolean(R.bool.enrollment_progress_priority_over_help),
|
||||
res.getBoolean(R.bool.enrollment_prioritize_acquire_messages),
|
||||
res.getInteger(R.integer.enrollment_collect_time));
|
||||
mFingerprintUpdater.enroll(mToken, mCancellationSignal, mUserId, callback, reason);
|
||||
mFingerprintUpdater.enroll(mToken, mCancellationSignal, mUserId, callback, reason,
|
||||
new Intent());
|
||||
} else {
|
||||
mFingerprintUpdater.enroll(mToken, mCancellationSignal, mUserId, mEnrollmentCallback,
|
||||
reason);
|
||||
reason, new Intent());
|
||||
}
|
||||
return mCancellationSignal;
|
||||
}
|
||||
|
@@ -43,6 +43,7 @@ import android.content.Intent;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.res.Resources;
|
||||
import android.hardware.face.Face;
|
||||
import android.hardware.face.FaceEnrollOptions;
|
||||
import android.hardware.face.FaceManager;
|
||||
import android.hardware.face.FaceSensorProperties;
|
||||
import android.hardware.face.FaceSensorPropertiesInternal;
|
||||
@@ -196,6 +197,8 @@ public class FaceEnrollIntroductionTest {
|
||||
final Intent testIntent = new Intent();
|
||||
// Set the challenge token so the confirm screen will not be shown
|
||||
testIntent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, new byte[0]);
|
||||
testIntent.putExtra(BiometricUtils.EXTRA_ENROLL_REASON,
|
||||
FaceEnrollOptions.ENROLL_REASON_SETTINGS);
|
||||
|
||||
when(mFakeFeatureFactory.mFaceFeatureProvider.getPostureGuidanceIntent(any())).thenReturn(
|
||||
null /* Simulate no posture intent */);
|
||||
@@ -220,6 +223,8 @@ public class FaceEnrollIntroductionTest {
|
||||
testIntent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, new byte[0]);
|
||||
testIntent.putExtra(EXTRA_KEY_NEXT_LAUNCHED, false);
|
||||
testIntent.putExtra(EXTRA_LAUNCHED_POSTURE_GUIDANCE, false);
|
||||
testIntent.putExtra(BiometricUtils.EXTRA_ENROLL_REASON,
|
||||
FaceEnrollOptions.ENROLL_REASON_SETTINGS);
|
||||
|
||||
when(mFakeFeatureFactory.mFaceFeatureProvider.getPostureGuidanceIntent(any())).thenReturn(
|
||||
testIntent);
|
||||
@@ -641,4 +646,14 @@ public class FaceEnrollIntroductionTest {
|
||||
final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||
assertThat(dialog).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFaceEnrollIntroduction_forwardsEnrollOptions() {
|
||||
setupActivity();
|
||||
final Intent intent = mActivity.getEnrollingIntent();
|
||||
|
||||
assertThat(intent.getIntExtra(BiometricUtils.EXTRA_ENROLL_REASON, -1))
|
||||
.isEqualTo(FaceEnrollOptions.ENROLL_REASON_SETTINGS);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -669,7 +669,8 @@ public class FingerprintEnrollEnrollingTest {
|
||||
any(CancellationSignal.class),
|
||||
anyInt(),
|
||||
callbackCaptor.capture(),
|
||||
eq(FingerprintManager.ENROLL_ENROLL));
|
||||
eq(FingerprintManager.ENROLL_ENROLL),
|
||||
any());
|
||||
|
||||
return callbackCaptor.getValue();
|
||||
}
|
||||
|
@@ -227,7 +227,8 @@ public class FingerprintEnrollFindSensorTest {
|
||||
any(CancellationSignal.class),
|
||||
anyInt(),
|
||||
callbackCaptor.capture(),
|
||||
eq(FingerprintManager.ENROLL_FIND_SENSOR));
|
||||
eq(FingerprintManager.ENROLL_FIND_SENSOR),
|
||||
any());
|
||||
|
||||
return callbackCaptor.getValue();
|
||||
}
|
||||
|
@@ -40,6 +40,7 @@ import android.content.res.Resources;
|
||||
import android.hardware.biometrics.ComponentInfoInternal;
|
||||
import android.hardware.biometrics.SensorProperties;
|
||||
import android.hardware.fingerprint.Fingerprint;
|
||||
import android.hardware.fingerprint.FingerprintEnrollOptions;
|
||||
import android.hardware.fingerprint.FingerprintManager;
|
||||
import android.hardware.fingerprint.FingerprintSensorProperties;
|
||||
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
|
||||
@@ -52,6 +53,7 @@ import androidx.annotation.Nullable;
|
||||
import com.android.internal.widget.LockPatternUtils;
|
||||
import com.android.internal.widget.VerifyCredentialResponse;
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.biometrics.BiometricUtils;
|
||||
import com.android.settings.biometrics.GatekeeperPasswordProvider;
|
||||
|
||||
import com.google.android.setupcompat.util.WizardManagerHelper;
|
||||
@@ -289,6 +291,18 @@ public class FingerprintEnrollIntroductionTest {
|
||||
assertThat(mFingerprintEnrollIntroduction.shouldFinishWhenBackgrounded()).isEqualTo(true);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFingerprintEnrollIntroduction_forwardsEnrollOptions() {
|
||||
final Intent intent = newTokenOnlyIntent();
|
||||
intent.putExtra(BiometricUtils.EXTRA_ENROLL_REASON,
|
||||
FingerprintEnrollOptions.ENROLL_REASON_SETTINGS);
|
||||
setupFingerprintEnrollIntroWith(intent);
|
||||
|
||||
final Intent enrollingIntent = mFingerprintEnrollIntroduction.getEnrollingIntent();
|
||||
assertThat(enrollingIntent.getIntExtra(BiometricUtils.EXTRA_ENROLL_REASON, -1))
|
||||
.isEqualTo(FingerprintEnrollOptions.ENROLL_REASON_SUW);
|
||||
}
|
||||
|
||||
private Intent newTokenOnlyIntent() {
|
||||
return new Intent()
|
||||
.putExtra(EXTRA_KEY_CHALLENGE_TOKEN, new byte[] { 1 });
|
||||
|
@@ -25,6 +25,7 @@ import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.hardware.face.Face;
|
||||
import android.hardware.face.FaceEnrollCell;
|
||||
import android.hardware.face.FaceEnrollStages;
|
||||
@@ -93,7 +94,7 @@ public class FaceUpdaterTest {
|
||||
ArgumentCaptor<FaceManager.EnrollmentCallback> callbackCaptor =
|
||||
ArgumentCaptor.forClass(FaceManager.EnrollmentCallback.class);
|
||||
mFaceUpdater.enroll(USER_ID, HARDWARE_AUTH_TOKEN, CANCELLATION_SIGNAL, mEnrollmentCallback,
|
||||
DISABLED_FEATURES);
|
||||
DISABLED_FEATURES, new Intent());
|
||||
verify(mFaceManager).enroll(
|
||||
eq(USER_ID),
|
||||
same(HARDWARE_AUTH_TOKEN),
|
||||
@@ -101,7 +102,8 @@ public class FaceUpdaterTest {
|
||||
callbackCaptor.capture(),
|
||||
same(DISABLED_FEATURES),
|
||||
same(null),
|
||||
eq(false));
|
||||
eq(false),
|
||||
any());
|
||||
FaceManager.EnrollmentCallback callback = callbackCaptor.getValue();
|
||||
|
||||
callback.onEnrollmentError(ERR_MSG_ID, ERR_STRING);
|
||||
@@ -121,7 +123,7 @@ public class FaceUpdaterTest {
|
||||
ArgumentCaptor<FaceManager.EnrollmentCallback> callbackCaptor =
|
||||
ArgumentCaptor.forClass(FaceManager.EnrollmentCallback.class);
|
||||
mFaceUpdater.enroll(USER_ID, HARDWARE_AUTH_TOKEN, CANCELLATION_SIGNAL, mEnrollmentCallback,
|
||||
DISABLED_FEATURES);
|
||||
DISABLED_FEATURES, new Intent());
|
||||
verify(mFaceManager).enroll(
|
||||
eq(USER_ID),
|
||||
same(HARDWARE_AUTH_TOKEN),
|
||||
@@ -129,7 +131,8 @@ public class FaceUpdaterTest {
|
||||
callbackCaptor.capture(),
|
||||
same(DISABLED_FEATURES),
|
||||
same(null),
|
||||
eq(false));
|
||||
eq(false),
|
||||
any());
|
||||
FaceManager.EnrollmentCallback callback = callbackCaptor.getValue();
|
||||
|
||||
callback.onEnrollmentProgress(/* remaining= */ 0);
|
||||
@@ -142,7 +145,7 @@ public class FaceUpdaterTest {
|
||||
ArgumentCaptor<FaceManager.EnrollmentCallback> callbackCaptor =
|
||||
ArgumentCaptor.forClass(FaceManager.EnrollmentCallback.class);
|
||||
mFaceUpdater.enroll(USER_ID, HARDWARE_AUTH_TOKEN, CANCELLATION_SIGNAL, mEnrollmentCallback,
|
||||
DISABLED_FEATURES);
|
||||
DISABLED_FEATURES, new Intent());
|
||||
verify(mFaceManager).enroll(
|
||||
eq(USER_ID),
|
||||
same(HARDWARE_AUTH_TOKEN),
|
||||
@@ -150,7 +153,8 @@ public class FaceUpdaterTest {
|
||||
callbackCaptor.capture(),
|
||||
same(DISABLED_FEATURES),
|
||||
same(null),
|
||||
eq(false));
|
||||
eq(false),
|
||||
any());
|
||||
FaceManager.EnrollmentCallback callback = callbackCaptor.getValue();
|
||||
|
||||
callback.onEnrollmentProgress(/* remaining= */ 1);
|
||||
@@ -163,7 +167,7 @@ public class FaceUpdaterTest {
|
||||
ArgumentCaptor<FaceManager.EnrollmentCallback> callbackCaptor =
|
||||
ArgumentCaptor.forClass(FaceManager.EnrollmentCallback.class);
|
||||
mFaceUpdater.enroll(USER_ID, HARDWARE_AUTH_TOKEN, CANCELLATION_SIGNAL, mEnrollmentCallback,
|
||||
DISABLED_FEATURES, PREVIEW_SURFACE, DEBUG_CONSENT);
|
||||
DISABLED_FEATURES, PREVIEW_SURFACE, DEBUG_CONSENT, new Intent());
|
||||
verify(mFaceManager).enroll(
|
||||
eq(USER_ID),
|
||||
same(HARDWARE_AUTH_TOKEN),
|
||||
@@ -171,7 +175,8 @@ public class FaceUpdaterTest {
|
||||
callbackCaptor.capture(),
|
||||
same(DISABLED_FEATURES),
|
||||
same(PREVIEW_SURFACE),
|
||||
eq(DEBUG_CONSENT));
|
||||
eq(DEBUG_CONSENT),
|
||||
any());
|
||||
FaceManager.EnrollmentCallback callback = callbackCaptor.getValue();
|
||||
|
||||
callback.onEnrollmentError(ERR_MSG_ID, ERR_STRING);
|
||||
@@ -191,7 +196,7 @@ public class FaceUpdaterTest {
|
||||
ArgumentCaptor<FaceManager.EnrollmentCallback> callbackCaptor =
|
||||
ArgumentCaptor.forClass(FaceManager.EnrollmentCallback.class);
|
||||
mFaceUpdater.enroll(USER_ID, HARDWARE_AUTH_TOKEN, CANCELLATION_SIGNAL, mEnrollmentCallback,
|
||||
DISABLED_FEATURES, PREVIEW_SURFACE, DEBUG_CONSENT);
|
||||
DISABLED_FEATURES, PREVIEW_SURFACE, DEBUG_CONSENT, new Intent());
|
||||
verify(mFaceManager).enroll(
|
||||
eq(USER_ID),
|
||||
same(HARDWARE_AUTH_TOKEN),
|
||||
@@ -199,7 +204,8 @@ public class FaceUpdaterTest {
|
||||
callbackCaptor.capture(),
|
||||
same(DISABLED_FEATURES),
|
||||
same(PREVIEW_SURFACE),
|
||||
eq(DEBUG_CONSENT));
|
||||
eq(DEBUG_CONSENT),
|
||||
any());
|
||||
FaceManager.EnrollmentCallback callback = callbackCaptor.getValue();
|
||||
|
||||
callback.onEnrollmentProgress(/* remaining= */ 0);
|
||||
@@ -212,7 +218,7 @@ public class FaceUpdaterTest {
|
||||
ArgumentCaptor<FaceManager.EnrollmentCallback> callbackCaptor =
|
||||
ArgumentCaptor.forClass(FaceManager.EnrollmentCallback.class);
|
||||
mFaceUpdater.enroll(USER_ID, HARDWARE_AUTH_TOKEN, CANCELLATION_SIGNAL, mEnrollmentCallback,
|
||||
DISABLED_FEATURES, PREVIEW_SURFACE, DEBUG_CONSENT);
|
||||
DISABLED_FEATURES, PREVIEW_SURFACE, DEBUG_CONSENT, new Intent());
|
||||
verify(mFaceManager).enroll(
|
||||
eq(USER_ID),
|
||||
same(HARDWARE_AUTH_TOKEN),
|
||||
@@ -220,7 +226,8 @@ public class FaceUpdaterTest {
|
||||
callbackCaptor.capture(),
|
||||
same(DISABLED_FEATURES),
|
||||
same(PREVIEW_SURFACE),
|
||||
eq(DEBUG_CONSENT));
|
||||
eq(DEBUG_CONSENT),
|
||||
any());
|
||||
FaceManager.EnrollmentCallback callback = callbackCaptor.getValue();
|
||||
|
||||
callback.onEnrollmentProgress(/* remaining= */ 1);
|
||||
|
@@ -24,6 +24,7 @@ import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.hardware.fingerprint.Fingerprint;
|
||||
import android.hardware.fingerprint.FingerprintManager;
|
||||
import android.os.CancellationSignal;
|
||||
@@ -78,13 +79,14 @@ public class FingerprintUpdaterTest {
|
||||
ArgumentCaptor<FingerprintManager.EnrollmentCallback> callbackCaptor =
|
||||
ArgumentCaptor.forClass(FingerprintManager.EnrollmentCallback.class);
|
||||
mFingerprintUpdater.enroll(HARDWARE_AUTH_TOKEN, CANCELLATION_SIGNAL, USER_ID,
|
||||
mEnrollmentCallback, ENROLL_REASON);
|
||||
mEnrollmentCallback, ENROLL_REASON, new Intent());
|
||||
verify(mFingerprintManager).enroll(
|
||||
same(HARDWARE_AUTH_TOKEN),
|
||||
same(CANCELLATION_SIGNAL),
|
||||
eq(USER_ID),
|
||||
callbackCaptor.capture(),
|
||||
eq(ENROLL_REASON));
|
||||
eq(ENROLL_REASON),
|
||||
any());
|
||||
FingerprintManager.EnrollmentCallback callback = callbackCaptor.getValue();
|
||||
|
||||
callback.onEnrollmentError(ERR_MSG_ID, ERR_STRING);
|
||||
@@ -101,13 +103,14 @@ public class FingerprintUpdaterTest {
|
||||
ArgumentCaptor<FingerprintManager.EnrollmentCallback> callbackCaptor =
|
||||
ArgumentCaptor.forClass(FingerprintManager.EnrollmentCallback.class);
|
||||
mFingerprintUpdater.enroll(HARDWARE_AUTH_TOKEN, CANCELLATION_SIGNAL, USER_ID,
|
||||
mEnrollmentCallback, ENROLL_REASON);
|
||||
mEnrollmentCallback, ENROLL_REASON, new Intent());
|
||||
verify(mFingerprintManager).enroll(
|
||||
same(HARDWARE_AUTH_TOKEN),
|
||||
same(CANCELLATION_SIGNAL),
|
||||
eq(USER_ID),
|
||||
callbackCaptor.capture(),
|
||||
eq(ENROLL_REASON));
|
||||
eq(ENROLL_REASON),
|
||||
any());
|
||||
FingerprintManager.EnrollmentCallback callback = callbackCaptor.getValue();
|
||||
|
||||
callback.onEnrollmentProgress(/* remaining= */ 0);
|
||||
@@ -120,13 +123,14 @@ public class FingerprintUpdaterTest {
|
||||
ArgumentCaptor<FingerprintManager.EnrollmentCallback> callbackCaptor =
|
||||
ArgumentCaptor.forClass(FingerprintManager.EnrollmentCallback.class);
|
||||
mFingerprintUpdater.enroll(HARDWARE_AUTH_TOKEN, CANCELLATION_SIGNAL, USER_ID,
|
||||
mEnrollmentCallback, ENROLL_REASON);
|
||||
mEnrollmentCallback, ENROLL_REASON, new Intent());
|
||||
verify(mFingerprintManager).enroll(
|
||||
same(HARDWARE_AUTH_TOKEN),
|
||||
same(CANCELLATION_SIGNAL),
|
||||
eq(USER_ID),
|
||||
callbackCaptor.capture(),
|
||||
eq(ENROLL_REASON));
|
||||
eq(ENROLL_REASON),
|
||||
any());
|
||||
FingerprintManager.EnrollmentCallback callback = callbackCaptor.getValue();
|
||||
|
||||
callback.onEnrollmentProgress(/* remaining= */ 1);
|
||||
|
@@ -98,7 +98,7 @@ public class FingerprintEnrollProgressViewModelTest {
|
||||
mCallbackWrapper.mValue = invocation.getArgument(3);
|
||||
return null;
|
||||
}).when(mFingerprintUpdater).enroll(any(byte[].class), any(CancellationSignal.class),
|
||||
eq(TEST_USER_ID), any(EnrollmentCallback.class), anyInt());
|
||||
eq(TEST_USER_ID), any(EnrollmentCallback.class), anyInt(), any());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -112,7 +112,7 @@ public class FingerprintEnrollProgressViewModelTest {
|
||||
|
||||
assertThat(ret).isNotNull();
|
||||
verify(mFingerprintUpdater, only()).enroll(eq(token), any(CancellationSignal.class),
|
||||
eq(TEST_USER_ID), any(EnrollmentCallback.class), eq(enrollReason));
|
||||
eq(TEST_USER_ID), any(EnrollmentCallback.class), eq(enrollReason), any());
|
||||
assertThat(mCallbackWrapper.mValue instanceof MessageDisplayController).isFalse();
|
||||
}
|
||||
|
||||
@@ -127,7 +127,7 @@ public class FingerprintEnrollProgressViewModelTest {
|
||||
|
||||
assertThat(ret).isNotNull();
|
||||
verify(mFingerprintUpdater, only()).enroll(eq(token), any(CancellationSignal.class),
|
||||
eq(TEST_USER_ID), any(EnrollmentCallback.class), eq(enrollReason));
|
||||
eq(TEST_USER_ID), any(EnrollmentCallback.class), eq(enrollReason), any());
|
||||
assertThat(mCallbackWrapper.mValue instanceof MessageDisplayController).isFalse();
|
||||
}
|
||||
|
||||
@@ -146,7 +146,7 @@ public class FingerprintEnrollProgressViewModelTest {
|
||||
|
||||
assertThat(ret).isNotNull();
|
||||
verify(mFingerprintUpdater, only()).enroll(eq(token), any(CancellationSignal.class),
|
||||
eq(TEST_USER_ID), any(MessageDisplayController.class), eq(enrollReason));
|
||||
eq(TEST_USER_ID), any(MessageDisplayController.class), eq(enrollReason), any());
|
||||
assertThat(mCallbackWrapper.mValue).isNotNull();
|
||||
|
||||
assertThat(mCallbackWrapper.mValue instanceof MessageDisplayController).isTrue();
|
||||
@@ -158,7 +158,7 @@ public class FingerprintEnrollProgressViewModelTest {
|
||||
|
||||
// Shall not use the same MessageDisplayController
|
||||
verify(mFingerprintUpdater, times(2)).enroll(eq(token), any(CancellationSignal.class),
|
||||
eq(TEST_USER_ID), any(MessageDisplayController.class), eq(enrollReason));
|
||||
eq(TEST_USER_ID), any(MessageDisplayController.class), eq(enrollReason), any());
|
||||
assertThat(mCallbackWrapper.mValue).isNotNull();
|
||||
assertThat(callback1).isNotEqualTo(mCallbackWrapper.mValue);
|
||||
}
|
||||
@@ -170,7 +170,8 @@ public class FingerprintEnrollProgressViewModelTest {
|
||||
|
||||
assertThat(ret).isNull();
|
||||
verify(mFingerprintUpdater, never()).enroll(any(byte[].class),
|
||||
any(CancellationSignal.class), anyInt(), any(EnrollmentCallback.class), anyInt());
|
||||
any(CancellationSignal.class), anyInt(), any(EnrollmentCallback.class), anyInt(),
|
||||
any());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@@ -19,6 +19,7 @@ package com.android.settings.fingerprint2.domain.interactor
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.hardware.fingerprint.Fingerprint
|
||||
import android.hardware.fingerprint.FingerprintEnrollOptions
|
||||
import android.hardware.fingerprint.FingerprintManager
|
||||
import android.hardware.fingerprint.FingerprintManager.CryptoObject
|
||||
import android.hardware.fingerprint.FingerprintManager.FINGERPRINT_ERROR_LOCKOUT_PERMANENT
|
||||
@@ -99,6 +100,7 @@ class FingerprintManagerInteractorTest {
|
||||
gateKeeperPasswordProvider,
|
||||
pressToAuthInteractor,
|
||||
Default,
|
||||
Intent(),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -312,7 +314,8 @@ class FingerprintManagerInteractorTest {
|
||||
any(CancellationSignal::class.java),
|
||||
anyInt(),
|
||||
capture(enrollCallback),
|
||||
eq(FingerprintManager.ENROLL_FIND_SENSOR)
|
||||
eq(FingerprintManager.ENROLL_FIND_SENSOR),
|
||||
any(FingerprintEnrollOptions::class.java),
|
||||
)
|
||||
enrollCallback.value.onEnrollmentProgress(1)
|
||||
runCurrent()
|
||||
@@ -336,7 +339,8 @@ class FingerprintManagerInteractorTest {
|
||||
any(CancellationSignal::class.java),
|
||||
anyInt(),
|
||||
capture(enrollCallback),
|
||||
eq(FingerprintManager.ENROLL_FIND_SENSOR)
|
||||
eq(FingerprintManager.ENROLL_FIND_SENSOR),
|
||||
any(FingerprintEnrollOptions::class.java),
|
||||
)
|
||||
enrollCallback.value.onEnrollmentHelp(-1, "help")
|
||||
runCurrent()
|
||||
@@ -360,7 +364,8 @@ class FingerprintManagerInteractorTest {
|
||||
any(CancellationSignal::class.java),
|
||||
anyInt(),
|
||||
capture(enrollCallback),
|
||||
eq(FingerprintManager.ENROLL_FIND_SENSOR)
|
||||
eq(FingerprintManager.ENROLL_FIND_SENSOR),
|
||||
any(FingerprintEnrollOptions::class.java),
|
||||
)
|
||||
enrollCallback.value.onEnrollmentError(-1, "error")
|
||||
runCurrent()
|
||||
|
Reference in New Issue
Block a user