Reland:Launch multiple biometric enrollment when no biometric is enrolled
When a user clicks the biometric item in the Device unlock page and no biometric is enrolled: - Fingerint clicked: Launch fingerprint enroll then face enroll. - Face clicked: Launch face enroll then fingerprint enroll. Also fixed work profile not working issue: - Use BiometricEnrollActivity.InternalActivity to provide correct userId for work profile. - Use the canAuthenticate() function that take userId as input. Bug: 370940762 Test: atest FaceSafetySourceTest FingerprintSafetySourceTest Flag: com.android.settings.flags.biometrics_onboarding_education Change-Id: I0800c5bb71cc3813e0336ed65898d099857175ef
This commit is contained in:
@@ -335,7 +335,7 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
|
||||
// enrollments already exists.
|
||||
if (!setupWizard && !mParentalOptionsRequired) {
|
||||
final BiometricManager bm = getSystemService(BiometricManager.class);
|
||||
final @BiometricError int result = bm.canAuthenticate(authenticators);
|
||||
final @BiometricError int result = bm.canAuthenticate(mUserId, authenticators);
|
||||
if (result != BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED) {
|
||||
Log.e(TAG, "Unexpected result (has enrollments): " + result);
|
||||
finish();
|
||||
|
||||
@@ -19,11 +19,15 @@ package com.android.settings.safetycenter;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.hardware.face.FaceManager;
|
||||
import android.hardware.fingerprint.FingerprintManager;
|
||||
import android.safetycenter.SafetyEvent;
|
||||
import android.safetycenter.SafetySourceData;
|
||||
import android.safetycenter.SafetySourceIssue;
|
||||
import android.safetycenter.SafetySourceStatus;
|
||||
|
||||
import com.android.settings.Utils;
|
||||
|
||||
/** Static helpers for setting SafetyCenter data for biometric safety sources. */
|
||||
public final class BiometricSourcesUtils {
|
||||
|
||||
@@ -89,6 +93,15 @@ public final class BiometricSourcesUtils {
|
||||
.setSafetySourceData(context, safetySourceId, safetySourceData, safetyEvent);
|
||||
}
|
||||
|
||||
/** Check whether the multiple biometrics enrollment is needed. */
|
||||
public static boolean isMultipleBiometricsEnrollmentNeeded(Context context, int userId) {
|
||||
FaceManager faceManager = Utils.getFaceManagerOrNull(context);
|
||||
FingerprintManager fingerprintManager = Utils.getFingerprintManagerOrNull(context);
|
||||
return Utils.isMultipleBiometricsSupported(context)
|
||||
&& !faceManager.hasEnrolledTemplates(userId)
|
||||
&& !fingerprintManager.hasEnrolledFingerprints(userId);
|
||||
}
|
||||
|
||||
/** Helper method for creating a pending intent. */
|
||||
public static PendingIntent createPendingIntent(
|
||||
Context context, Intent intent, int requestCode) {
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.android.settings.safetycenter;
|
||||
|
||||
import static com.android.settings.biometrics.BiometricEnrollActivity.EXTRA_LAUNCH_FACE_ENROLL_FIRST;
|
||||
import static com.android.settings.safetycenter.BiometricSourcesUtils.REQUEST_CODE_FACE_SETTING;
|
||||
|
||||
import android.content.Context;
|
||||
@@ -27,6 +28,7 @@ import android.os.UserManager;
|
||||
import android.safetycenter.SafetyEvent;
|
||||
|
||||
import com.android.settings.Utils;
|
||||
import com.android.settings.biometrics.BiometricEnrollActivity;
|
||||
import com.android.settings.biometrics.BiometricNavigationUtils;
|
||||
import com.android.settings.biometrics.face.FaceStatusUtils;
|
||||
import com.android.settings.flags.Flags;
|
||||
@@ -73,6 +75,16 @@ public final class FaceSafetySource {
|
||||
Context profileParentContext = context.createContextAsUser(profileParentUserHandle, 0);
|
||||
|
||||
if (Utils.hasFaceHardware(context)) {
|
||||
boolean isMultipleBiometricsEnrollmentNeeded =
|
||||
BiometricSourcesUtils.isMultipleBiometricsEnrollmentNeeded(context, userId);
|
||||
String settingClassName = isMultipleBiometricsEnrollmentNeeded
|
||||
? BiometricEnrollActivity.InternalActivity.class.getName()
|
||||
: faceStatusUtils.getSettingsClassName();
|
||||
Bundle bundle = new Bundle();
|
||||
if (isMultipleBiometricsEnrollmentNeeded) {
|
||||
// Launch face enrollment first then fingerprint enrollment.
|
||||
bundle.putBoolean(EXTRA_LAUNCH_FACE_ENROLL_FIRST, true);
|
||||
}
|
||||
RestrictedLockUtils.EnforcedAdmin disablingAdmin = faceStatusUtils.getDisablingAdmin();
|
||||
BiometricSourcesUtils.setBiometricSafetySourceData(
|
||||
SAFETY_SOURCE_ID,
|
||||
@@ -84,9 +96,9 @@ public final class FaceSafetySource {
|
||||
biometricNavigationUtils
|
||||
.getBiometricSettingsIntent(
|
||||
context,
|
||||
faceStatusUtils.getSettingsClassName(),
|
||||
settingClassName,
|
||||
disablingAdmin,
|
||||
Bundle.EMPTY)
|
||||
bundle)
|
||||
.setIdentifier(Integer.toString(userId)),
|
||||
REQUEST_CODE_FACE_SETTING),
|
||||
disablingAdmin == null /* enabled */,
|
||||
|
||||
@@ -27,6 +27,7 @@ import android.os.UserManager;
|
||||
import android.safetycenter.SafetyEvent;
|
||||
|
||||
import com.android.settings.Utils;
|
||||
import com.android.settings.biometrics.BiometricEnrollActivity;
|
||||
import com.android.settings.biometrics.BiometricNavigationUtils;
|
||||
import com.android.settings.biometrics.fingerprint.FingerprintStatusUtils;
|
||||
import com.android.settings.flags.Flags;
|
||||
@@ -74,6 +75,11 @@ public final class FingerprintSafetySource {
|
||||
Context profileParentContext = context.createContextAsUser(profileParentUserHandle, 0);
|
||||
|
||||
if (Utils.hasFingerprintHardware(context)) {
|
||||
boolean isMultipleBiometricsEnrollmentNeeded =
|
||||
BiometricSourcesUtils.isMultipleBiometricsEnrollmentNeeded(context, userId);
|
||||
String settingClassName = isMultipleBiometricsEnrollmentNeeded
|
||||
? BiometricEnrollActivity.InternalActivity.class.getName()
|
||||
: fingerprintStatusUtils.getSettingsClassName();
|
||||
RestrictedLockUtils.EnforcedAdmin disablingAdmin =
|
||||
fingerprintStatusUtils.getDisablingAdmin();
|
||||
BiometricSourcesUtils.setBiometricSafetySourceData(
|
||||
@@ -86,7 +92,7 @@ public final class FingerprintSafetySource {
|
||||
biometricNavigationUtils
|
||||
.getBiometricSettingsIntent(
|
||||
context,
|
||||
fingerprintStatusUtils.getSettingsClassName(),
|
||||
settingClassName,
|
||||
disablingAdmin,
|
||||
Bundle.EMPTY)
|
||||
.setIdentifier(Integer.toString(userId)),
|
||||
|
||||
Reference in New Issue
Block a user