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:
Joshua McCloskey
2023-12-21 21:31:53 +00:00
committed by Joshua Mccloskey
parent e28934a9f9
commit e5f62676c8
23 changed files with 184 additions and 48 deletions

View File

@@ -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 ";

View File

@@ -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();

View File

@@ -165,7 +165,7 @@ public class FaceEnrollEnrolling extends BiometricsEnrollEnrolling {
disabledFeatures[i] = mDisabledFeatures.get(i);
}
return new FaceEnrollSidecar(disabledFeatures);
return new FaceEnrollSidecar(disabledFeatures, getIntent());
}
@Override

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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();
}
}

View File

@@ -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;
}

View File

@@ -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();

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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();
}
}

View File

@@ -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()
}
}

View File

@@ -191,6 +191,7 @@ class FingerprintEnrollmentV2Activity : FragmentActivity() {
GatekeeperPasswordProvider(LockPatternUtils(context)),
pressToAuthInteractor,
enrollType,
getIntent(),
)
var challenge: Long? = intent.getExtra(BiometricEnrollBase.EXTRA_KEY_CHALLENGE) as Long?

View File

@@ -232,6 +232,7 @@ class FingerprintSettingsV2Fragment :
GatekeeperPasswordProvider(LockPatternUtils(context.applicationContext)),
pressToAuthInteractor,
Settings,
getIntent()
)
val token = intent.getByteArrayExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN)

View File

@@ -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;
}

View File

@@ -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);
}
}

View File

@@ -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();
}

View File

@@ -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();
}

View File

@@ -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 });

View File

@@ -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);

View File

@@ -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);

View File

@@ -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

View File

@@ -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()