Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e029aede authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Merge cherrypicks of ['googleplex-android-review.googlesource.com/29693724'] into 24Q4-release.

Change-Id: Ib05a6d5713e7571221506fbb262dcda8f2072b9c
parents 2f978bab db5761eb
Loading
Loading
Loading
Loading
+25 −11
Original line number Diff line number Diff line
@@ -1505,17 +1505,18 @@ public final class Utils extends com.android.settingslib.Utils {
     * @return biometric status when mandatory biometrics authentication is requested
     */
    public static BiometricStatus requestBiometricAuthenticationForMandatoryBiometrics(
            @NonNull Context context,
            boolean biometricsAuthenticationRequested, int userId) {
            @NonNull Context context, boolean biometricsAuthenticationRequested, int userId) {
        final BiometricManager biometricManager = context.getSystemService(BiometricManager.class);
        if (biometricManager == null) {
            Log.e(TAG, "Biometric Manager is null.");
            return BiometricStatus.NOT_ACTIVE;
        }
        final int status = biometricManager.canAuthenticate(userId,
                BiometricManager.Authenticators.MANDATORY_BIOMETRICS);
        if (android.hardware.biometrics.Flags.mandatoryBiometrics()
                && !biometricsAuthenticationRequested) {
            final UserManager userManager = context.getSystemService(
                    UserManager.class);
            final int status = biometricManager.canAuthenticate(getEffectiveUserId(
                    userManager, userId), BiometricManager.Authenticators.MANDATORY_BIOMETRICS);
            switch(status) {
                case BiometricManager.BIOMETRIC_SUCCESS:
                    return BiometricStatus.OK;
@@ -1544,8 +1545,10 @@ public final class Utils extends com.android.settingslib.Utils {
     */
    public static void launchBiometricPromptForMandatoryBiometrics(@NonNull Fragment fragment,
            int requestCode, int userId, boolean hideBackground) {
        final UserManager userManager = (UserManager) fragment.getContext().getSystemService(
                UserManager.class);
        fragment.startActivityForResult(getIntentForBiometricAuthentication(fragment.getResources(),
                userId, hideBackground), requestCode);
                getEffectiveUserId(userManager, userId), hideBackground), requestCode);
    }

    /**
@@ -1561,21 +1564,32 @@ public final class Utils extends com.android.settingslib.Utils {
     */
    public static void launchBiometricPromptForMandatoryBiometrics(@NonNull Activity activity,
            int requestCode, int userId, boolean hideBackground) {
        final UserManager userManager = activity.getSystemService(UserManager.class);
        activity.startActivityForResult(getIntentForBiometricAuthentication(
                activity.getResources(), userId, hideBackground), requestCode);
                activity.getResources(), getEffectiveUserId(userManager, userId),
                hideBackground), requestCode);
    }

    private static int getEffectiveUserId(UserManager userManager, int userId) {
        if (userManager != null) {
            return userManager.getCredentialOwnerProfile(userId);
        }
        return userId;
    }

    private static Intent getIntentForBiometricAuthentication(Resources resources, int userId,
            boolean hideBackground) {
    private static Intent getIntentForBiometricAuthentication(Resources resources,
            int effectiveUserId, boolean hideBackground) {
        final Intent intent = new Intent();
        if (android.hardware.biometrics.Flags.mandatoryBiometrics()) {
            intent.putExtra(BIOMETRIC_PROMPT_AUTHENTICATORS,
                    BiometricManager.Authenticators.MANDATORY_BIOMETRICS);
        }
        intent.putExtra(BIOMETRIC_PROMPT_NEGATIVE_BUTTON_TEXT,
                resources.getString(R.string.cancel));
        intent.putExtra(KeyguardManager.EXTRA_DESCRIPTION,
                resources.getString(R.string.mandatory_biometrics_prompt_description));
        intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_ALLOW_ANY_USER, true);
        intent.putExtra(EXTRA_USER_ID, userId);
        intent.putExtra(EXTRA_USER_ID, effectiveUserId);
        intent.putExtra(BIOMETRIC_PROMPT_HIDE_BACKGROUND, hideBackground);
        intent.setClassName(SETTINGS_PACKAGE_NAME,
                ConfirmDeviceCredentialActivity.InternalActivity.class.getName());
+4 −0
Original line number Diff line number Diff line
@@ -564,6 +564,8 @@ public class UtilsTest {
    @Test
    @EnableFlags(Flags.FLAG_MANDATORY_BIOMETRICS)
    public void testRequestBiometricAuthentication_biometricManagerReturnsSuccessForDifferentUser_shouldReturnError() {
        when(mContext.getSystemService(UserManager.class)).thenReturn(mMockUserManager);
        when(mMockUserManager.getCredentialOwnerProfile(USER_ID)).thenReturn(USER_ID);
        when(mBiometricManager.canAuthenticate(anyInt(),
                eq(BiometricManager.Authenticators.MANDATORY_BIOMETRICS)))
                .thenReturn(BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE);
@@ -579,6 +581,8 @@ public class UtilsTest {
    @EnableFlags(Flags.FLAG_MANDATORY_BIOMETRICS)
    public void testLaunchBiometricPrompt_checkIntentValues() {
        when(mFragment.getContext()).thenReturn(mContext);
        when(mContext.getSystemService(UserManager.class)).thenReturn(mMockUserManager);
        when(mMockUserManager.getCredentialOwnerProfile(USER_ID)).thenReturn(USER_ID);

        final int requestCode = 1;
        final ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class);