Merge "Add show emergency button call to biometric prompt" into main

This commit is contained in:
Oli Thompson
2023-08-18 17:54:34 +00:00
committed by Android (Google) Code Review
5 changed files with 27 additions and 58 deletions

View File

@@ -16,9 +16,6 @@
package com.android.settings; package com.android.settings;
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_PASSWORD;
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_PATTERN;
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_PIN;
import static android.content.Intent.EXTRA_USER; import static android.content.Intent.EXTRA_USER;
import static android.content.Intent.EXTRA_USER_ID; import static android.content.Intent.EXTRA_USER_ID;
import static android.text.format.DateUtils.FORMAT_ABBREV_MONTH; import static android.text.format.DateUtils.FORMAT_ABBREV_MONTH;
@@ -791,36 +788,15 @@ public final class Utils extends com.android.settingslib.Utils {
@Nullable public static String getConfirmCredentialStringForUser(@NonNull Context context, @Nullable public static String getConfirmCredentialStringForUser(@NonNull Context context,
int userId, @LockPatternUtils.CredentialType int credentialType) { int userId, @LockPatternUtils.CredentialType int credentialType) {
final int effectiveUserId = UserManager.get(context).getCredentialOwnerProfile(userId); final int effectiveUserId = UserManager.get(context).getCredentialOwnerProfile(userId);
final boolean isEffectiveUserManagedProfile = UserManager.get(context) if (UserManager.get(context).isManagedProfile(effectiveUserId)) {
.isManagedProfile(effectiveUserId); return null;
final DevicePolicyManager devicePolicyManager = context }
.getSystemService(DevicePolicyManager.class);
switch (credentialType) { switch (credentialType) {
case LockPatternUtils.CREDENTIAL_TYPE_PIN: case LockPatternUtils.CREDENTIAL_TYPE_PIN:
if (isEffectiveUserManagedProfile) {
return devicePolicyManager.getResources().getString(WORK_PROFILE_CONFIRM_PIN,
() -> context.getString(
R.string.lockpassword_confirm_your_pin_generic_profile));
}
return context.getString(R.string.lockpassword_confirm_your_pin_generic); return context.getString(R.string.lockpassword_confirm_your_pin_generic);
case LockPatternUtils.CREDENTIAL_TYPE_PATTERN: case LockPatternUtils.CREDENTIAL_TYPE_PATTERN:
if (isEffectiveUserManagedProfile) {
return devicePolicyManager.getResources().getString(
WORK_PROFILE_CONFIRM_PATTERN,
() -> context.getString(
R.string.lockpassword_confirm_your_pattern_generic_profile));
}
return context.getString(R.string.lockpassword_confirm_your_pattern_generic); return context.getString(R.string.lockpassword_confirm_your_pattern_generic);
case LockPatternUtils.CREDENTIAL_TYPE_PASSWORD: case LockPatternUtils.CREDENTIAL_TYPE_PASSWORD:
if (isEffectiveUserManagedProfile) {
return devicePolicyManager.getResources().getString(
WORK_PROFILE_CONFIRM_PASSWORD,
() -> context.getString(
R.string.lockpassword_confirm_your_password_generic_profile));
}
return context.getString(R.string.lockpassword_confirm_your_password_generic); return context.getString(R.string.lockpassword_confirm_your_password_generic);
} }
return null; return null;

View File

@@ -126,10 +126,9 @@ public class BiometricFragment extends InstrumentedFragment {
final Bundle bundle = getArguments(); final Bundle bundle = getArguments();
final PromptInfo promptInfo = bundle.getParcelable(KEY_PROMPT_INFO); final PromptInfo promptInfo = bundle.getParcelable(KEY_PROMPT_INFO);
mBiometricPrompt = new BiometricPrompt.Builder(getContext()) BiometricPrompt.Builder promptBuilder = new BiometricPrompt.Builder(getContext())
.setTitle(promptInfo.getTitle()) .setTitle(promptInfo.getTitle())
.setUseDefaultTitle() // use default title if title is null/empty .setUseDefaultTitle() // use default title if title is null/empty
.setUseDefaultSubtitle() // use default subtitle if subtitle is null/empty
.setDeviceCredentialAllowed(true) .setDeviceCredentialAllowed(true)
.setSubtitle(promptInfo.getSubtitle()) .setSubtitle(promptInfo.getSubtitle())
.setDescription(promptInfo.getDescription()) .setDescription(promptInfo.getDescription())
@@ -140,9 +139,15 @@ public class BiometricFragment extends InstrumentedFragment {
.setConfirmationRequired(promptInfo.isConfirmationRequested()) .setConfirmationRequired(promptInfo.isConfirmationRequested())
.setDisallowBiometricsIfPolicyExists( .setDisallowBiometricsIfPolicyExists(
promptInfo.isDisallowBiometricsIfPolicyExists()) promptInfo.isDisallowBiometricsIfPolicyExists())
.setShowEmergencyCallButton(promptInfo.isShowEmergencyCallButton())
.setReceiveSystemEvents(true) .setReceiveSystemEvents(true)
.setAllowBackgroundAuthentication(true) .setAllowBackgroundAuthentication(true);
.build();
// Check if the default subtitle should be used if subtitle is null/empty
if (promptInfo.isUseDefaultSubtitle()) {
promptBuilder.setUseDefaultSubtitle();
}
mBiometricPrompt = promptBuilder.build();
} }
@Override @Override

View File

@@ -26,6 +26,7 @@ import android.app.Activity;
import android.app.KeyguardManager; import android.app.KeyguardManager;
import android.app.RemoteLockscreenValidationSession; import android.app.RemoteLockscreenValidationSession;
import android.app.admin.DevicePolicyManager; import android.app.admin.DevicePolicyManager;
import android.app.admin.ManagedSubscriptionsPolicy;
import android.app.trust.TrustManager; import android.app.trust.TrustManager;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Context; import android.content.Context;
@@ -200,6 +201,13 @@ public class ConfirmDeviceCredentialActivity extends FragmentActivity {
promptInfo.setDescription(mDetails); promptInfo.setDescription(mDetails);
promptInfo.setDisallowBiometricsIfPolicyExists(mCheckDevicePolicyManager); promptInfo.setDisallowBiometricsIfPolicyExists(mCheckDevicePolicyManager);
final int policyType = mDevicePolicyManager.getManagedSubscriptionsPolicy().getPolicyType();
if (isEffectiveUserManagedProfile
&& (policyType == ManagedSubscriptionsPolicy.TYPE_ALL_MANAGED_SUBSCRIPTIONS)) {
promptInfo.setShowEmergencyCallButton(true);
}
final @LockPatternUtils.CredentialType int credentialType = Utils.getCredentialType( final @LockPatternUtils.CredentialType int credentialType = Utils.getCredentialType(
mContext, effectiveUserId); mContext, effectiveUserId);
if (mTitle == null) { if (mTitle == null) {

View File

@@ -396,8 +396,7 @@ public class WifiDppUtils {
final int userId = UserHandle.myUserId(); final int userId = UserHandle.myUserId();
final BiometricPrompt.Builder builder = new BiometricPrompt.Builder(context) final BiometricPrompt.Builder builder = new BiometricPrompt.Builder(context)
.setTitle(context.getText(R.string.wifi_dpp_lockscreen_title)) .setTitle(context.getText(R.string.wifi_dpp_lockscreen_title));
.setUseDefaultSubtitle();
if (keyguardManager.isDeviceSecure()) { if (keyguardManager.isDeviceSecure()) {
builder.setDeviceCredentialAllowed(true); builder.setDeviceCredentialAllowed(true);

View File

@@ -16,15 +16,10 @@
package com.android.settings; package com.android.settings;
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_PASSWORD;
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_PATTERN;
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_PIN;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertNull; import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertThrows;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.eq;
@@ -399,45 +394,33 @@ public class UtilsTest {
} }
@Test @Test
public void getConfirmCredentialStringForUser_workPin_shouldReturnCorrectString() { public void getConfirmCredentialStringForUser_workPin_shouldReturnNull() {
setUpForConfirmCredentialString(true /* isEffectiveUserManagedProfile */); setUpForConfirmCredentialString(true /* isEffectiveUserManagedProfile */);
when(mDevicePolicyResourcesManager
.getString(eq(WORK_PROFILE_CONFIRM_PIN), any()))
.thenReturn("WORK PIN");
String confirmCredentialString = Utils.getConfirmCredentialStringForUser(mContext, String confirmCredentialString = Utils.getConfirmCredentialStringForUser(mContext,
USER_ID, LockPatternUtils.CREDENTIAL_TYPE_PIN); USER_ID, LockPatternUtils.CREDENTIAL_TYPE_PIN);
assertThat(confirmCredentialString).isEqualTo("WORK PIN"); assertNull(confirmCredentialString);
} }
@Test @Test
public void getConfirmCredentialStringForUser_workPattern_shouldReturnCorrectString() { public void getConfirmCredentialStringForUser_workPattern_shouldReturnNull() {
setUpForConfirmCredentialString(true /* isEffectiveUserManagedProfile */); setUpForConfirmCredentialString(true /* isEffectiveUserManagedProfile */);
when(mDevicePolicyResourcesManager
.getString(eq(WORK_PROFILE_CONFIRM_PATTERN), any()))
.thenReturn("WORK PATTERN");
String confirmCredentialString = Utils.getConfirmCredentialStringForUser(mContext, String confirmCredentialString = Utils.getConfirmCredentialStringForUser(mContext,
USER_ID, LockPatternUtils.CREDENTIAL_TYPE_PATTERN); USER_ID, LockPatternUtils.CREDENTIAL_TYPE_PATTERN);
assertThat(confirmCredentialString).isEqualTo("WORK PATTERN"); assertNull(confirmCredentialString);
} }
@Test @Test
public void getConfirmCredentialStringForUser_workPassword_shouldReturnCorrectString() { public void getConfirmCredentialStringForUser_workPassword_shouldReturnNull() {
setUpForConfirmCredentialString(true /* isEffectiveUserManagedProfile */); setUpForConfirmCredentialString(true /* isEffectiveUserManagedProfile */);
when(mDevicePolicyResourcesManager
.getString(eq(WORK_PROFILE_CONFIRM_PASSWORD), any()))
.thenReturn("WORK PASSWORD");
String confirmCredentialString = Utils.getConfirmCredentialStringForUser(mContext, String confirmCredentialString = Utils.getConfirmCredentialStringForUser(mContext,
USER_ID, LockPatternUtils.CREDENTIAL_TYPE_PASSWORD); USER_ID, LockPatternUtils.CREDENTIAL_TYPE_PASSWORD);
assertThat(confirmCredentialString).isEqualTo("WORK PASSWORD"); assertNull(confirmCredentialString);
} }
@Test @Test
@@ -454,7 +437,5 @@ public class UtilsTest {
when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mMockUserManager); when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mMockUserManager);
when(mMockUserManager.getCredentialOwnerProfile(USER_ID)).thenReturn(USER_ID); when(mMockUserManager.getCredentialOwnerProfile(USER_ID)).thenReturn(USER_ID);
when(mMockUserManager.isManagedProfile(USER_ID)).thenReturn(isEffectiveUserManagedProfile); when(mMockUserManager.isManagedProfile(USER_ID)).thenReturn(isEffectiveUserManagedProfile);
when(mContext.getSystemService(DevicePolicyManager.class)).thenReturn(mDevicePolicyManager);
when(mDevicePolicyManager.getResources()).thenReturn(mDevicePolicyResourcesManager);
} }
} }