Loading src/com/android/settings/Utils.java +25 −11 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } /** Loading @@ -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()); Loading tests/robotests/src/com/android/settings/UtilsTest.java +4 −0 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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); Loading Loading
src/com/android/settings/Utils.java +25 −11 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } /** Loading @@ -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()); Loading
tests/robotests/src/com/android/settings/UtilsTest.java +4 −0 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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); Loading