Allow Device Management Role Holder to update Settings strings.

Test: manual
Bug: 188414370
Change-Id: I6e1a06619799a9e99382d791e72e2e4518f93cac
This commit is contained in:
Jonathan Scott
2022-01-19 15:19:08 +00:00
parent 47d115c3ff
commit e0d439472f
55 changed files with 788 additions and 231 deletions

View File

@@ -22,6 +22,8 @@ import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_HIGH;
import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_LOW;
import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_MEDIUM;
import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_NONE;
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_IT_ADMIN_CANT_RESET_SCREEN_LOCK;
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_SCREEN_LOCK_SETUP_MESSAGE;
import static com.android.settings.password.ChooseLockPassword.ChooseLockPasswordFragment.RESULT_FINISHED;
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_CALLER_APP_NAME;
@@ -29,7 +31,6 @@ import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_D
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_IS_CALLING_APP_ADMIN;
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_REQUESTED_MIN_COMPLEXITY;
import android.accessibilityservice.AccessibilityServiceInfo;
import android.app.Activity;
import android.app.Dialog;
import android.app.admin.DevicePolicyManager;
@@ -394,13 +395,16 @@ public class ChooseLockGeneric extends SettingsActivity {
}
} else {
if (mIsManagedProfile) {
textView.setText(R.string.lock_settings_picker_profile_message);
textView.setText(mDpm.getString(WORK_PROFILE_SCREEN_LOCK_SETUP_MESSAGE,
() -> getString(R.string.lock_settings_picker_profile_message)));
} else {
int profileUserId = Utils.getManagedProfileId(mUserManager, mUserId);
if (mController.isScreenLockRestrictedByAdmin()
&& profileUserId != UserHandle.USER_NULL) {
final StringBuilder description = new StringBuilder(getText(
R.string.lock_settings_picker_admin_restricted_personal_message));
final StringBuilder description = new StringBuilder(
mDpm.getString(WORK_PROFILE_IT_ADMIN_CANT_RESET_SCREEN_LOCK, () ->
getString(
R.string.lock_settings_picker_admin_restricted_personal_message)));
final LinkifyUtils.OnClickListener clickListener = () -> {
final Bundle extras = new Bundle();
extras.putInt(Intent.EXTRA_USER_ID, profileUserId);

View File

@@ -18,6 +18,13 @@ package com.android.settings.password;
import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_NONE;
import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_NUMERIC;
import static android.app.admin.DevicePolicyResources.Strings.UNDEFINED;
import static android.app.admin.DevicePolicyResources.Strings.Settings.PASSWORD_RECENTLY_USED;
import static android.app.admin.DevicePolicyResources.Strings.Settings.PIN_RECENTLY_USED;
import static android.app.admin.DevicePolicyResources.Strings.Settings.REENTER_WORK_PROFILE_PASSWORD_HEADER;
import static android.app.admin.DevicePolicyResources.Strings.Settings.REENTER_WORK_PROFILE_PIN_HEADER;
import static android.app.admin.DevicePolicyResources.Strings.Settings.SET_WORK_PROFILE_PASSWORD_HEADER;
import static android.app.admin.DevicePolicyResources.Strings.Settings.SET_WORK_PROFILE_PIN_HEADER;
import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_NONE;
import static com.android.internal.widget.PasswordValidationError.CONTAINS_INVALID_CHARACTERS;
@@ -259,11 +266,13 @@ public class ChooseLockPassword extends SettingsActivity {
Introduction(
R.string.lockpassword_choose_your_password_header, // password
SET_WORK_PROFILE_PASSWORD_HEADER,
R.string.lockpassword_choose_your_profile_password_header,
R.string.lockpassword_choose_your_password_header_for_fingerprint,
R.string.lockpassword_choose_your_password_header_for_face,
R.string.lockpassword_choose_your_password_header_for_biometrics,
R.string.lockpassword_choose_your_pin_header, // pin
SET_WORK_PROFILE_PIN_HEADER,
R.string.lockpassword_choose_your_profile_pin_header,
R.string.lockpassword_choose_your_pin_header_for_fingerprint,
R.string.lockpassword_choose_your_pin_header_for_face,
@@ -274,11 +283,13 @@ public class ChooseLockPassword extends SettingsActivity {
NeedToConfirm(
R.string.lockpassword_confirm_your_password_header,
REENTER_WORK_PROFILE_PASSWORD_HEADER,
R.string.lockpassword_reenter_your_profile_password_header,
R.string.lockpassword_confirm_your_password_header,
R.string.lockpassword_confirm_your_password_header,
R.string.lockpassword_confirm_your_password_header,
R.string.lockpassword_confirm_your_pin_header,
REENTER_WORK_PROFILE_PIN_HEADER,
R.string.lockpassword_reenter_your_profile_pin_header,
R.string.lockpassword_confirm_your_pin_header,
R.string.lockpassword_confirm_your_pin_header,
@@ -289,11 +300,13 @@ public class ChooseLockPassword extends SettingsActivity {
ConfirmWrong(
R.string.lockpassword_confirm_passwords_dont_match,
UNDEFINED,
R.string.lockpassword_confirm_passwords_dont_match,
R.string.lockpassword_confirm_passwords_dont_match,
R.string.lockpassword_confirm_passwords_dont_match,
R.string.lockpassword_confirm_passwords_dont_match,
R.string.lockpassword_confirm_pins_dont_match,
UNDEFINED,
R.string.lockpassword_confirm_pins_dont_match,
R.string.lockpassword_confirm_pins_dont_match,
R.string.lockpassword_confirm_pins_dont_match,
@@ -303,11 +316,13 @@ public class ChooseLockPassword extends SettingsActivity {
R.string.lockpassword_confirm_label);
Stage(int hintInAlpha,
String hintOverrideInAlphaForProfile,
int hintInAlphaForProfile,
int hintInAlphaForFingerprint,
int hintInAlphaForFace,
int hintInAlphaForBiometrics,
int hintInNumeric,
String hintOverrideInNumericForProfile,
int hintInNumericForProfile,
int hintInNumericForFingerprint,
int hintInNumericForFace,
@@ -317,12 +332,14 @@ public class ChooseLockPassword extends SettingsActivity {
int nextButtonText) {
this.alphaHint = hintInAlpha;
this.alphaHintOverrideForProfile = hintOverrideInAlphaForProfile;
this.alphaHintForProfile = hintInAlphaForProfile;
this.alphaHintForFingerprint = hintInAlphaForFingerprint;
this.alphaHintForFace = hintInAlphaForFace;
this.alphaHintForBiometrics = hintInAlphaForBiometrics;
this.numericHint = hintInNumeric;
this.numericHintOverrideForProfile = hintOverrideInNumericForProfile;
this.numericHintForProfile = hintInNumericForProfile;
this.numericHintForFingerprint = hintInNumericForFingerprint;
this.numericHintForFace = hintInNumericForFace;
@@ -341,6 +358,7 @@ public class ChooseLockPassword extends SettingsActivity {
// Password header
public final int alphaHint;
public final String alphaHintOverrideForProfile;
public final int alphaHintForProfile;
public final int alphaHintForFingerprint;
public final int alphaHintForFace;
@@ -348,6 +366,7 @@ public class ChooseLockPassword extends SettingsActivity {
// PIN header
public final int numericHint;
public final String numericHintOverrideForProfile;
public final int numericHintForProfile;
public final int numericHintForFingerprint;
public final int numericHintForFace;
@@ -361,26 +380,34 @@ public class ChooseLockPassword extends SettingsActivity {
public final int buttonText;
public @StringRes int getHint(boolean isAlpha, int type, boolean isProfile) {
public String getHint(Context context, boolean isAlpha, int type, boolean isProfile) {
if (isAlpha) {
if (type == TYPE_FINGERPRINT) {
return alphaHintForFingerprint;
return context.getString(alphaHintForFingerprint);
} else if (type == TYPE_FACE) {
return alphaHintForFace;
return context.getString(alphaHintForFace);
} else if (type == TYPE_BIOMETRIC) {
return alphaHintForBiometrics;
return context.getString(alphaHintForBiometrics);
} else if (isProfile) {
return context.getSystemService(DevicePolicyManager.class)
.getString(alphaHintOverrideForProfile,
() -> context.getString(alphaHintForProfile));
} else {
return isProfile ? alphaHintForProfile : alphaHint;
return context.getString(alphaHint);
}
} else {
if (type == TYPE_FINGERPRINT) {
return numericHintForFingerprint;
return context.getString(numericHintForFingerprint);
} else if (type == TYPE_FACE) {
return numericHintForFace;
return context.getString(numericHintForFace);
} else if (type == TYPE_BIOMETRIC) {
return numericHintForBiometrics;
return context.getString(numericHintForBiometrics);
} else if (isProfile) {
return context.getSystemService(DevicePolicyManager.class)
.getString(numericHintOverrideForProfile,
() -> context.getString(numericHintForProfile));
} else {
return isProfile ? numericHintForProfile : numericHint;
return context.getString(numericHint);
}
}
}
@@ -556,8 +583,8 @@ public class ChooseLockPassword extends SettingsActivity {
if (activity instanceof SettingsActivity) {
final SettingsActivity sa = (SettingsActivity) activity;
int title = Stage.Introduction.getHint(mIsAlphaMode, getStageType(),
mIsManagedProfile);
String title = Stage.Introduction.getHint(
getContext(), mIsAlphaMode, getStageType(), mIsManagedProfile);
sa.setTitle(title);
mLayout.setHeaderText(title);
}
@@ -818,9 +845,17 @@ public class ChooseLockPassword extends SettingsActivity {
messages.add(getString(R.string.lockpassword_pin_no_sequential_digits));
break;
case RECENTLY_USED:
messages.add(getString(mIsAlphaMode
? R.string.lockpassword_password_recently_used
: R.string.lockpassword_pin_recently_used));
DevicePolicyManager devicePolicyManager =
getContext().getSystemService(DevicePolicyManager.class);
if (mIsAlphaMode) {
messages.add(devicePolicyManager.getString(
PASSWORD_RECENTLY_USED,
() -> getString(R.string.lockpassword_password_recently_used)));
} else {
messages.add(devicePolicyManager.getString(
PIN_RECENTLY_USED,
() -> getString(R.string.lockpassword_pin_recently_used)));
}
break;
default:
Log.wtf(TAG, "unknown error validating password: " + error);
@@ -851,8 +886,8 @@ public class ChooseLockPassword extends SettingsActivity {
} else {
// Hide password requirement view when we are just asking user to confirm the pw.
mPasswordRestrictionView.setVisibility(View.GONE);
setHeaderText(getString(mUiStage.getHint(mIsAlphaMode, getStageType(),
mIsManagedProfile)));
setHeaderText(mUiStage.getHint(getContext(), mIsAlphaMode, getStageType(),
mIsManagedProfile));
setNextEnabled(canInput && length >= LockPatternUtils.MIN_LOCK_PASSWORD_SIZE);
mSkipOrClearButton.setVisibility(toVisibility(canInput && length > 0));
}

View File

@@ -16,6 +16,7 @@
package com.android.settings.password;
import static android.app.admin.DevicePolicyResources.Strings.Settings.SET_WORK_PROFILE_PATTERN_HEADER;
import static android.view.View.ACCESSIBILITY_LIVE_REGION_POLITE;
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_UNIFICATION_PROFILE_CREDENTIAL;
@@ -23,6 +24,7 @@ import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_U
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.admin.DevicePolicyManager;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.Intent;
@@ -474,15 +476,18 @@ public class ChooseLockPattern extends SettingsActivity {
}
private void updateActivityTitle() {
final int msg;
final String msg;
if (mForFingerprint) {
msg = R.string.lockpassword_choose_your_pattern_header_for_fingerprint;
msg = getString(R.string.lockpassword_choose_your_pattern_header_for_fingerprint);
} else if (mForFace) {
msg = R.string.lockpassword_choose_your_pattern_header_for_face;
msg = getString(R.string.lockpassword_choose_your_pattern_header_for_face);
} else if (mIsManagedProfile) {
msg = getContext().getSystemService(DevicePolicyManager.class)
.getString(SET_WORK_PROFILE_PATTERN_HEADER,
() -> getString(
R.string.lockpassword_choose_your_profile_pattern_header));
} else {
msg = mIsManagedProfile
? R.string.lockpassword_choose_your_profile_pattern_header
: R.string.lockpassword_choose_your_pattern_header;
msg = getString(R.string.lockpassword_choose_your_pattern_header);
}
getActivity().setTitle(msg);
}

View File

@@ -17,6 +17,13 @@
package com.android.settings.password;
import static android.app.admin.DevicePolicyResources.Strings.Settings.CONFIRM_WORK_PROFILE_PASSWORD_HEADER;
import static android.app.admin.DevicePolicyResources.Strings.Settings.CONFIRM_WORK_PROFILE_PATTERN_HEADER;
import static android.app.admin.DevicePolicyResources.Strings.Settings.CONFIRM_WORK_PROFILE_PIN_HEADER;
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.android.settings.Utils.SETTINGS_PACKAGE_NAME;
import android.app.Activity;
@@ -259,19 +266,36 @@ public class ConfirmDeviceCredentialActivity extends FragmentActivity {
private String getTitleFromCredentialType(@LockPatternUtils.CredentialType int credentialType,
boolean isEffectiveUserManagedProfile) {
int overrideStringId;
int defaultStringId;
switch (credentialType) {
case LockPatternUtils.CREDENTIAL_TYPE_PIN:
return isEffectiveUserManagedProfile
? getString(R.string.lockpassword_confirm_your_work_pin_header)
: getString(R.string.lockpassword_confirm_your_pin_header);
if (isEffectiveUserManagedProfile) {
return mDevicePolicyManager.getString(
CONFIRM_WORK_PROFILE_PIN_HEADER,
() -> getString(R.string.lockpassword_confirm_your_work_pin_header));
}
return getString(R.string.lockpassword_confirm_your_pin_header);
case LockPatternUtils.CREDENTIAL_TYPE_PATTERN:
return isEffectiveUserManagedProfile
? getString(R.string.lockpassword_confirm_your_work_pattern_header)
: getString(R.string.lockpassword_confirm_your_pattern_header);
if (isEffectiveUserManagedProfile) {
return mDevicePolicyManager.getString(
CONFIRM_WORK_PROFILE_PATTERN_HEADER,
() -> getString(
R.string.lockpassword_confirm_your_work_pattern_header));
}
return getString(R.string.lockpassword_confirm_your_pattern_header);
case LockPatternUtils.CREDENTIAL_TYPE_PASSWORD:
return isEffectiveUserManagedProfile
? getString(R.string.lockpassword_confirm_your_work_password_header)
: getString(R.string.lockpassword_confirm_your_password_header);
if (isEffectiveUserManagedProfile) {
return mDevicePolicyManager.getString(
CONFIRM_WORK_PROFILE_PASSWORD_HEADER,
() -> getString(
R.string.lockpassword_confirm_your_work_password_header));
}
return getString(R.string.lockpassword_confirm_your_password_header);
}
return null;
}
@@ -280,17 +304,29 @@ public class ConfirmDeviceCredentialActivity extends FragmentActivity {
boolean isEffectiveUserManagedProfile) {
switch (credentialType) {
case LockPatternUtils.CREDENTIAL_TYPE_PIN:
return isEffectiveUserManagedProfile
? getString(R.string.lockpassword_confirm_your_pin_generic_profile)
: getString(R.string.lockpassword_confirm_your_pin_generic);
if (isEffectiveUserManagedProfile) {
return mDevicePolicyManager.getString(WORK_PROFILE_CONFIRM_PIN,
() -> getString(
R.string.lockpassword_confirm_your_pin_generic_profile));
}
return getString(R.string.lockpassword_confirm_your_pin_generic);
case LockPatternUtils.CREDENTIAL_TYPE_PATTERN:
return isEffectiveUserManagedProfile
? getString(R.string.lockpassword_confirm_your_pattern_generic_profile)
: getString(R.string.lockpassword_confirm_your_pattern_generic);
if (isEffectiveUserManagedProfile) {
return mDevicePolicyManager.getString(WORK_PROFILE_CONFIRM_PATTERN,
() -> getString(
R.string.lockpassword_confirm_your_pattern_generic_profile));
}
return getString(R.string.lockpassword_confirm_your_pattern_generic);
case LockPatternUtils.CREDENTIAL_TYPE_PASSWORD:
return isEffectiveUserManagedProfile
? getString(R.string.lockpassword_confirm_your_password_generic_profile)
: getString(R.string.lockpassword_confirm_your_password_generic);
if (isEffectiveUserManagedProfile) {
return mDevicePolicyManager.getString(WORK_PROFILE_CONFIRM_PASSWORD,
() -> getString(
R.string.lockpassword_confirm_your_password_generic_profile));
}
return getString(R.string.lockpassword_confirm_your_password_generic);
}
return null;
}

View File

@@ -17,6 +17,8 @@
// TODO (b/35202196): move this class out of the root of the package.
package com.android.settings.password;
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_LOCK_ATTEMPTS_FAILED;
import static com.android.settings.Utils.SETTINGS_PACKAGE_NAME;
import android.annotation.Nullable;
@@ -243,13 +245,16 @@ public abstract class ConfirmDeviceCredentialBaseFragment extends InstrumentedFr
// Last try
final String title = getActivity().getString(
R.string.lock_last_attempt_before_wipe_warning_title);
final int messageId = getLastTryErrorMessage(userType);
LastTryDialog.show(fragmentManager, title, messageId,
final String overrideMessageId = getLastTryOverrideErrorMessageId(userType);
final int defaultMessageId = getLastTryDefaultErrorMessage(userType);
final String message = mDevicePolicyManager.getString(
overrideMessageId, () -> getString(defaultMessageId));
LastTryDialog.show(fragmentManager, title, message,
android.R.string.ok, false /* dismiss */);
} else {
// Device, profile, or secondary user is wiped
final int messageId = getWipeMessage(userType);
LastTryDialog.show(fragmentManager, null /* title */, messageId,
final String message = getWipeMessage(userType);
LastTryDialog.show(fragmentManager, null /* title */, message,
R.string.lock_failed_attempts_now_wiping_dialog_dismiss, true /* dismiss */);
}
}
@@ -266,16 +271,18 @@ public abstract class ConfirmDeviceCredentialBaseFragment extends InstrumentedFr
}
}
protected abstract int getLastTryErrorMessage(int userType);
protected abstract String getLastTryOverrideErrorMessageId(int userType);
protected abstract int getLastTryDefaultErrorMessage(int userType);
private int getWipeMessage(int userType) {
private String getWipeMessage(int userType) {
switch (userType) {
case USER_TYPE_PRIMARY:
return R.string.lock_failed_attempts_now_wiping_device;
return getString(R.string.lock_failed_attempts_now_wiping_device);
case USER_TYPE_MANAGED_PROFILE:
return R.string.lock_failed_attempts_now_wiping_profile;
return mDevicePolicyManager.getString(WORK_PROFILE_LOCK_ATTEMPTS_FAILED,
() -> getString(R.string.lock_failed_attempts_now_wiping_profile));
case USER_TYPE_SECONDARY:
return R.string.lock_failed_attempts_now_wiping_user;
return getString(R.string.lock_failed_attempts_now_wiping_user);
default:
throw new IllegalArgumentException("Unrecognized user type:" + userType);
}
@@ -311,7 +318,7 @@ public abstract class ConfirmDeviceCredentialBaseFragment extends InstrumentedFr
private static final String ARG_BUTTON = "button";
private static final String ARG_DISMISS = "dismiss";
static boolean show(FragmentManager from, String title, int message, int button,
static boolean show(FragmentManager from, String title, String message, int button,
boolean dismiss) {
LastTryDialog existent = (LastTryDialog) from.findFragmentByTag(TAG);
if (existent != null && !existent.isRemoving()) {
@@ -319,7 +326,7 @@ public abstract class ConfirmDeviceCredentialBaseFragment extends InstrumentedFr
}
Bundle args = new Bundle();
args.putString(ARG_TITLE, title);
args.putInt(ARG_MESSAGE, message);
args.putString(ARG_MESSAGE, message);
args.putInt(ARG_BUTTON, button);
args.putBoolean(ARG_DISMISS, dismiss);
@@ -349,7 +356,7 @@ public abstract class ConfirmDeviceCredentialBaseFragment extends InstrumentedFr
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = new AlertDialog.Builder(getActivity())
.setTitle(getArguments().getString(ARG_TITLE))
.setMessage(getArguments().getInt(ARG_MESSAGE))
.setMessage(getArguments().getString(ARG_MESSAGE))
.setPositiveButton(getArguments().getInt(ARG_BUTTON), null)
.create();
dialog.setCanceledOnTouchOutside(false);

View File

@@ -16,6 +16,16 @@
package com.android.settings.password;
import static android.app.admin.DevicePolicyResources.Strings.UNDEFINED;
import static android.app.admin.DevicePolicyResources.Strings.Settings.CONFIRM_WORK_PROFILE_PASSWORD_HEADER;
import static android.app.admin.DevicePolicyResources.Strings.Settings.CONFIRM_WORK_PROFILE_PIN_HEADER;
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_PASSWORD;
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_PIN;
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_LAST_PASSWORD_ATTEMPT_BEFORE_WIPE;
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_LAST_PIN_ATTEMPT_BEFORE_WIPE;
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_PASSWORD_REQUIRED;
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_PIN_REQUIRED;
import android.annotation.Nullable;
import android.app.admin.DevicePolicyManager;
import android.app.settings.SettingsEnums;
@@ -73,6 +83,17 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
R.string.lockpassword_strong_auth_required_work_password
};
private static final String[] DETAIL_TEXT_OVERRIDES = new String[] {
UNDEFINED,
UNDEFINED,
WORK_PROFILE_CONFIRM_PIN,
WORK_PROFILE_CONFIRM_PASSWORD,
UNDEFINED,
UNDEFINED,
WORK_PROFILE_PIN_REQUIRED,
WORK_PROFILE_PASSWORD_REQUIRED
};
public static class InternalActivity extends ConfirmLockPassword {
}
@@ -160,10 +181,10 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
headerMessage = mDevicePolicyManager.getOrganizationNameForUser(mUserId);
}
if (TextUtils.isEmpty(headerMessage)) {
headerMessage = getString(getDefaultHeader());
headerMessage = getDefaultHeader();
}
if (TextUtils.isEmpty(detailsMessage)) {
detailsMessage = getString(getDefaultDetails());
detailsMessage = getDefaultDetails();
}
mGlifLayout.setHeaderText(headerMessage);
mGlifLayout.setDescriptionText(detailsMessage);
@@ -228,29 +249,37 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
}, 5000);
}
private int getDefaultHeader() {
private String getDefaultHeader() {
if (mFrp) {
return mIsAlpha ? R.string.lockpassword_confirm_your_password_header_frp
: R.string.lockpassword_confirm_your_pin_header_frp;
return mIsAlpha ? getString(R.string.lockpassword_confirm_your_password_header_frp)
: getString(R.string.lockpassword_confirm_your_pin_header_frp);
}
if (mIsManagedProfile) {
return mIsAlpha ? R.string.lockpassword_confirm_your_work_password_header
: R.string.lockpassword_confirm_your_work_pin_header;
if (mIsAlpha) {
return mDevicePolicyManager.getString(
CONFIRM_WORK_PROFILE_PASSWORD_HEADER,
() -> getString(
R.string.lockpassword_confirm_your_work_password_header));
}
return mDevicePolicyManager.getString(
CONFIRM_WORK_PROFILE_PIN_HEADER,
() -> getString(R.string.lockpassword_confirm_your_work_pin_header));
}
return mIsAlpha ? R.string.lockpassword_confirm_your_password_header
: R.string.lockpassword_confirm_your_pin_header;
return mIsAlpha ? getString(R.string.lockpassword_confirm_your_password_header)
: getString(R.string.lockpassword_confirm_your_pin_header);
}
private int getDefaultDetails() {
private String getDefaultDetails() {
if (mFrp) {
return mIsAlpha ? R.string.lockpassword_confirm_your_password_details_frp
: R.string.lockpassword_confirm_your_pin_details_frp;
return mIsAlpha ? getString(R.string.lockpassword_confirm_your_password_details_frp)
: getString(R.string.lockpassword_confirm_your_pin_details_frp);
}
boolean isStrongAuthRequired = isStrongAuthRequired();
// Map boolean flags to an index by isStrongAuth << 2 + isManagedProfile << 1 + isAlpha.
int index = ((isStrongAuthRequired ? 1 : 0) << 2) + ((mIsManagedProfile ? 1 : 0) << 1)
+ (mIsAlpha ? 1 : 0);
return DETAIL_TEXTS[index];
return mDevicePolicyManager.getString(
DETAIL_TEXT_OVERRIDES[index], () -> getString(DETAIL_TEXTS[index]));
}
private int getErrorMessage() {
@@ -259,7 +288,17 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
}
@Override
protected int getLastTryErrorMessage(int userType) {
protected String getLastTryOverrideErrorMessageId(int userType) {
if (userType == USER_TYPE_MANAGED_PROFILE) {
return mIsAlpha ? WORK_PROFILE_LAST_PASSWORD_ATTEMPT_BEFORE_WIPE
: WORK_PROFILE_LAST_PIN_ATTEMPT_BEFORE_WIPE;
}
return UNDEFINED;
}
@Override
protected int getLastTryDefaultErrorMessage(int userType) {
switch (userType) {
case USER_TYPE_PRIMARY:
return mIsAlpha ? R.string.lock_last_password_attempt_before_wipe_device

View File

@@ -16,6 +16,12 @@
package com.android.settings.password;
import static android.app.admin.DevicePolicyResources.Strings.UNDEFINED;
import static android.app.admin.DevicePolicyResources.Strings.Settings.CONFIRM_WORK_PROFILE_PATTERN_HEADER;
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_PATTERN;
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_LAST_PATTERN_ATTEMPT_BEFORE_WIPE;
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_PATTERN_REQUIRED;
import android.annotation.Nullable;
import android.annotation.SuppressLint;
import android.app.Activity;
@@ -258,19 +264,25 @@ public class ConfirmLockPattern extends ConfirmDeviceCredentialBaseActivity {
mGlifLayout.getDescriptionTextView().setAlpha(0f);
}
private int getDefaultDetails() {
private String getDefaultDetails() {
if (mFrp) {
return R.string.lockpassword_confirm_your_pattern_details_frp;
return getString(R.string.lockpassword_confirm_your_pattern_details_frp);
}
final boolean isStrongAuthRequired = isStrongAuthRequired();
if (mIsManagedProfile) {
return isStrongAuthRequired
? R.string.lockpassword_strong_auth_required_work_pattern
: R.string.lockpassword_confirm_your_pattern_generic_profile;
if (isStrongAuthRequired) {
return mDevicePolicyManager.getString(WORK_PROFILE_PATTERN_REQUIRED,
() -> getString(
R.string.lockpassword_strong_auth_required_work_pattern));
} else {
return mDevicePolicyManager.getString(WORK_PROFILE_CONFIRM_PATTERN,
() -> getString(
R.string.lockpassword_confirm_your_pattern_generic_profile));
}
} else {
return isStrongAuthRequired
? R.string.lockpassword_strong_auth_required_device_pattern
: R.string.lockpassword_confirm_your_pattern_generic;
? getString(R.string.lockpassword_strong_auth_required_device_pattern)
: getString(R.string.lockpassword_confirm_your_pattern_generic);
}
}
@@ -352,11 +364,16 @@ public class ConfirmLockPattern extends ConfirmDeviceCredentialBaseActivity {
mGlifLayout.getHeaderTextView().announceForAccessibility(mGlifLayout.getHeaderText());
}
private int getDefaultHeader() {
if (mFrp) return R.string.lockpassword_confirm_your_pattern_header_frp;
return mIsManagedProfile
? R.string.lockpassword_confirm_your_work_pattern_header
: R.string.lockpassword_confirm_your_pattern_header;
private String getDefaultHeader() {
if (mFrp) return getString(R.string.lockpassword_confirm_your_pattern_header_frp);
if (mIsManagedProfile) {
return mDevicePolicyManager.getString(
CONFIRM_WORK_PROFILE_PATTERN_HEADER,
() -> getString(R.string.lockpassword_confirm_your_work_pattern_header));
}
return getString(R.string.lockpassword_confirm_your_pattern_header);
}
private Runnable mClearPatternRunnable = new Runnable() {
@@ -550,7 +567,16 @@ public class ConfirmLockPattern extends ConfirmDeviceCredentialBaseActivity {
}
@Override
protected int getLastTryErrorMessage(int userType) {
protected String getLastTryOverrideErrorMessageId(int userType) {
if (userType == USER_TYPE_MANAGED_PROFILE) {
return WORK_PROFILE_LAST_PATTERN_ATTEMPT_BEFORE_WIPE;
}
return UNDEFINED;
}
@Override
protected int getLastTryDefaultErrorMessage(int userType) {
switch (userType) {
case USER_TYPE_PRIMARY:
return R.string.lock_last_pattern_attempt_before_wipe_device;