Merge "Show customized message for private space while choosing lock" into main

This commit is contained in:
Joseph Vincent
2023-12-19 10:37:05 +00:00
committed by Android (Google) Code Review
4 changed files with 70 additions and 16 deletions

View File

@@ -1312,6 +1312,12 @@
<string name="private_space_lock_setup_title">Choose a lock for your private space</string>
<!-- private space lock setup screen description [CHAR LIMIT=NONE] -->
<string name="private_space_lock_setup_description">You can unlock your private space using your fingerprint. For security, this option requires a backup lock.</string>
<!-- Header for private space choose your PIN screen [CHAR LIMIT=40] -->
<string name="private_space_choose_your_pin_header">Set a PIN for your private space</string>
<!-- Header for private space choose your password screen [CHAR LIMIT=40] -->
<string name="private_space_choose_your_password_header">Set a password for your private space</string>
<!-- Header for private space choose your pattern screen [CHAR LIMIT=40] -->
<string name="private_space_choose_your_pattern_header">Set a pattern for your private space</string>
<!-- TODO(b/309950257): Remove below strings once QSTIle fulfillment is complete. -->
<!-- Header in hide Private Space settings page to unhide Private Space. [CHAR LIMIT=90] -->

View File

@@ -260,7 +260,6 @@ public class ChooseLockPassword extends SettingsActivity {
private LockscreenCredential mFirstPassword;
private RecyclerView mPasswordRestrictionView;
protected boolean mIsAlphaMode;
protected boolean mIsManagedProfile;
protected FooterButton mSkipOrClearButton;
private FooterButton mNextButton;
private TextView mMessage;
@@ -272,6 +271,14 @@ public class ChooseLockPassword extends SettingsActivity {
private static final int CONFIRM_EXISTING_REQUEST = 58;
static final int RESULT_FINISHED = RESULT_FIRST_USER;
/** Used to store the profile type for which pin/password is being set */
protected enum ProfileType {
None,
Managed,
Private,
Other
};
protected ProfileType mProfileType;
/**
* Keep track internally of where the user is in choosing a pattern.
@@ -285,12 +292,14 @@ public class ChooseLockPassword extends SettingsActivity {
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.private_space_choose_your_password_header, // private space password
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,
R.string.lockpassword_choose_your_pin_header_for_biometrics,
R.string.private_space_choose_your_pin_header, // private space pin
R.string.lock_settings_picker_biometrics_added_security_message,
R.string.lock_settings_picker_biometrics_added_security_message,
R.string.next_label),
@@ -302,12 +311,14 @@ public class ChooseLockPassword extends SettingsActivity {
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_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,
R.string.lockpassword_confirm_your_pin_header,
R.string.lockpassword_confirm_your_pin_header,
0,
0,
R.string.lockpassword_confirm_label),
@@ -319,12 +330,14 @@ public class ChooseLockPassword extends SettingsActivity {
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,
R.string.lockpassword_confirm_pins_dont_match,
R.string.lockpassword_confirm_pins_dont_match,
0,
0,
R.string.lockpassword_confirm_label);
@@ -335,29 +348,33 @@ public class ChooseLockPassword extends SettingsActivity {
int hintInAlphaForFingerprint,
int hintInAlphaForFace,
int hintInAlphaForBiometrics,
int hintInAlphaForPrivateProfile,
int hintInNumeric,
String hintOverrideInNumericForProfile,
int hintInNumericForProfile,
int hintInNumericForFingerprint,
int hintInNumericForFace,
int hintInNumericForBiometrics,
int hintInNumericForPrivateProfile,
int messageInAlphaForBiometrics,
int messageInNumericForBiometrics,
int nextButtonText) {
this.alphaHint = hintInAlpha;
this.alphaHintOverrideForProfile = hintOverrideInAlphaForProfile;
this.alphaHintForProfile = hintInAlphaForProfile;
this.alphaHintForManagedProfile = hintInAlphaForProfile;
this.alphaHintForFingerprint = hintInAlphaForFingerprint;
this.alphaHintForFace = hintInAlphaForFace;
this.alphaHintForBiometrics = hintInAlphaForBiometrics;
this.alphaHintForPrivateProfile = hintInAlphaForPrivateProfile;
this.numericHint = hintInNumeric;
this.numericHintOverrideForProfile = hintOverrideInNumericForProfile;
this.numericHintForProfile = hintInNumericForProfile;
this.numericHintForManagedProfile = hintInNumericForProfile;
this.numericHintForFingerprint = hintInNumericForFingerprint;
this.numericHintForFace = hintInNumericForFace;
this.numericHintForBiometrics = hintInNumericForBiometrics;
this.numericHintForPrivateProfile = hintInNumericForPrivateProfile;
this.alphaMessageForBiometrics = messageInAlphaForBiometrics;
this.numericMessageForBiometrics = messageInNumericForBiometrics;
@@ -372,16 +389,18 @@ public class ChooseLockPassword extends SettingsActivity {
// Password header
public final int alphaHint;
public final int alphaHintForPrivateProfile;
public final String alphaHintOverrideForProfile;
public final int alphaHintForProfile;
public final int alphaHintForManagedProfile;
public final int alphaHintForFingerprint;
public final int alphaHintForFace;
public final int alphaHintForBiometrics;
// PIN header
public final int numericHint;
public final int numericHintForPrivateProfile;
public final String numericHintOverrideForProfile;
public final int numericHintForProfile;
public final int numericHintForManagedProfile;
public final int numericHintForFingerprint;
public final int numericHintForFace;
public final int numericHintForBiometrics;
@@ -394,32 +413,38 @@ public class ChooseLockPassword extends SettingsActivity {
public final int buttonText;
public String getHint(Context context, boolean isAlpha, int type, boolean isProfile) {
public String getHint(Context context, boolean isAlpha, int type, ProfileType profile) {
if (isAlpha) {
if (type == TYPE_FINGERPRINT) {
if (android.os.Flags.allowPrivateProfile()
&& profile.equals(ProfileType.Private)) {
return context.getString(alphaHintForPrivateProfile);
} else if (type == TYPE_FINGERPRINT) {
return context.getString(alphaHintForFingerprint);
} else if (type == TYPE_FACE) {
return context.getString(alphaHintForFace);
} else if (type == TYPE_BIOMETRIC) {
return context.getString(alphaHintForBiometrics);
} else if (isProfile) {
} else if (profile.equals(ProfileType.Managed)) {
return context.getSystemService(DevicePolicyManager.class).getResources()
.getString(alphaHintOverrideForProfile,
() -> context.getString(alphaHintForProfile));
() -> context.getString(alphaHintForManagedProfile));
} else {
return context.getString(alphaHint);
}
} else {
if (type == TYPE_FINGERPRINT) {
if (android.os.Flags.allowPrivateProfile()
&& profile.equals(ProfileType.Private)) {
return context.getString(numericHintForPrivateProfile);
} else if (type == TYPE_FINGERPRINT) {
return context.getString(numericHintForFingerprint);
} else if (type == TYPE_FACE) {
return context.getString(numericHintForFace);
} else if (type == TYPE_BIOMETRIC) {
return context.getString(numericHintForBiometrics);
} else if (isProfile) {
} else if (profile.equals(ProfileType.Managed)) {
return context.getSystemService(DevicePolicyManager.class).getResources()
.getString(numericHintOverrideForProfile,
() -> context.getString(numericHintForProfile));
() -> context.getString(numericHintForManagedProfile));
} else {
return context.getString(numericHint);
}
@@ -455,7 +480,7 @@ public class ChooseLockPassword extends SettingsActivity {
}
// Only take this argument into account if it belongs to the current profile.
mUserId = Utils.getUserIdFromBundle(getActivity(), intent.getExtras());
mIsManagedProfile = UserManager.get(getActivity()).isManagedProfile(mUserId);
mProfileType = getProfileType();
mForFingerprint = intent.getBooleanExtra(
ChooseLockSettingsHelper.EXTRA_KEY_FOR_FINGERPRINT, false);
mForFace = intent.getBooleanExtra(ChooseLockSettingsHelper.EXTRA_KEY_FOR_FACE, false);
@@ -602,7 +627,7 @@ public class ChooseLockPassword extends SettingsActivity {
if (activity instanceof SettingsActivity) {
final SettingsActivity sa = (SettingsActivity) activity;
String title = Stage.Introduction.getHint(
getContext(), mIsAlphaMode, getStageType(), mIsManagedProfile);
getContext(), mIsAlphaMode, getStageType(), mProfileType);
sa.setTitle(title);
mLayout.setHeaderText(title);
}
@@ -938,7 +963,7 @@ public class ChooseLockPassword extends SettingsActivity {
// Hide password requirement view when we are just asking user to confirm the pw.
mPasswordRestrictionView.setVisibility(View.GONE);
setHeaderText(mUiStage.getHint(getContext(), mIsAlphaMode, getStageType(),
mIsManagedProfile));
mProfileType));
setNextEnabled(canInput && length >= LockPatternUtils.MIN_LOCK_PASSWORD_SIZE);
mSkipOrClearButton.setVisibility(toVisibility(canInput && length > 0));
@@ -1116,5 +1141,18 @@ public class ChooseLockPassword extends SettingsActivity {
}
}
}
private ProfileType getProfileType() {
UserManager userManager = getContext().createContextAsUser(UserHandle.of(mUserId),
/*flags=*/0).getSystemService(UserManager.class);
if (userManager.isManagedProfile()) {
return ProfileType.Managed;
} else if (android.os.Flags.allowPrivateProfile() && userManager.isPrivateProfile()) {
return ProfileType.Private;
} else if (userManager.isProfile()) {
return ProfileType.Other;
}
return ProfileType.None;
}
}
}

View File

@@ -478,6 +478,8 @@ public class ChooseLockPattern extends SettingsActivity {
.getString(SET_WORK_PROFILE_PATTERN_HEADER,
() -> getString(
R.string.lockpassword_choose_your_profile_pattern_header));
} else if (android.os.Flags.allowPrivateProfile() && isPrivateProfile()) {
msg = getString(R.string.private_space_choose_your_pattern_header);
} else {
msg = getString(R.string.lockpassword_choose_your_pattern_header);
}
@@ -879,5 +881,11 @@ public class ChooseLockPattern extends SettingsActivity {
getActivity().finish();
}
private boolean isPrivateProfile() {
UserManager userManager = getContext().createContextAsUser(UserHandle.of(mUserId),
/*flags=*/0).getSystemService(UserManager.class);
return userManager.isPrivateProfile();
}
}
}

View File

@@ -20,6 +20,7 @@ import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_PASSW
import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_PATTERN;
import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_PIN;
import static com.android.settings.password.ChooseLockGeneric.ChooseLockGenericFragment.HIDE_INSECURE_OPTIONS;
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_CHOOSE_LOCK_SCREEN_TITLE;
import android.content.Context;
import android.content.Intent;
@@ -94,6 +95,7 @@ public class PrivateSpaceLockController extends AbstractPreferenceController {
final Bundle extras = new Bundle();
extras.putInt(Intent.EXTRA_USER_ID, mProfileUserId);
extras.putBoolean(HIDE_INSECURE_OPTIONS, true);
extras.putInt(EXTRA_KEY_CHOOSE_LOCK_SCREEN_TITLE, R.string.private_space_lock_setup_title);
new SubSettingLauncher(mContext)
.setDestination(ChooseLockGeneric.ChooseLockGenericFragment.class.getName())
.setSourceMetricsCategory(mHost.getMetricsCategory())