Add show emergency button call to biometric prompt
useDefaultSubtitle has to be set explicitly from promptInfo rather than being assumed true remove subtext for managed profile challenge screen to create space for emergency call button Test: manually tested Bug: 286391641 Bug: 286422726 Change-Id: I848e00dcd0013124e59ef711c3615e6773c3d210
This commit is contained in:
@@ -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;
|
||||||
|
@@ -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
|
||||||
|
@@ -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) {
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user