Skip to content

Commit 7a0d905

Browse files
committed
fixup! delegate final confirmation step to AOSP's ChooseLockPassword
Test: atest -c SettingsUnitTests:com.android.settings.password.generate
1 parent 5cff010 commit 7a0d905

File tree

7 files changed

+146
-246
lines changed

7 files changed

+146
-246
lines changed

src/com/android/settings/password/ChooseLockPassword.java

+43-6
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,9 @@ public static class ChooseLockPasswordFragment extends InstrumentedFragment
271271
protected boolean mForFace;
272272
protected boolean mForBiometrics;
273273

274+
// PIN/passphrase generation will delegate to this Fragment for the last confirmation step
275+
private boolean mFromPasswordGeneration;
276+
274277
private LockscreenCredential mFirstPassword;
275278
private RecyclerView mPasswordRestrictionView;
276279
protected boolean mIsAlphaMode;
@@ -515,6 +518,9 @@ public void onCreate(Bundle savedInstanceState) {
515518
if (mMinMetrics == null) mMinMetrics = new PasswordMetrics(CREDENTIAL_TYPE_NONE);
516519

517520
mTextChangedHandler = new TextChangedHandler();
521+
522+
mFromPasswordGeneration = intent.getBooleanExtra(
523+
ChooseLockSettingsHelper.EXTRA_KEY_FROM_PASSWORD_GENERATION, false);
518524
}
519525

520526
@Override
@@ -625,6 +631,21 @@ public void onViewCreated(View view, Bundle savedInstanceState) {
625631
.setUserId(mUserId)
626632
.show();
627633
}
634+
635+
if (mFromPasswordGeneration) {
636+
final LockscreenCredential generatedPassword = intent.getParcelableExtra(
637+
ChooseLockSettingsHelper.EXTRA_KEY_FROM_PASSWORD_GENERATION_GENERATED_PASSWORD, LockscreenCredential.class);
638+
if (generatedPassword != null) {
639+
final var isAutoPinConfirm = intent.getBooleanExtra(
640+
ChooseLockSettingsHelper.EXTRA_KEY_FROM_PASSWORD_GENERATION_AUTO_PIN_CONFIRM, false);
641+
mIsAutoPinConfirmOptionSetManually = true;
642+
mAutoPinConfirmOption.setChecked(isAutoPinConfirm);
643+
// simulate the user inputting this generated password so that it's
644+
// validated against existing AOSP validation code
645+
handleNext(generatedPassword);
646+
// do not zeroize generatedPassword; it might be stored in mChosenPassword
647+
}
648+
}
628649
} else {
629650

630651
// restore from previous state
@@ -815,14 +836,23 @@ private byte[] getPasswordHistoryHashFactor() {
815836
}
816837

817838
public void handleNext() {
839+
handleNext(null);
840+
}
841+
842+
public void handleNext(@Nullable LockscreenCredential chosenPasswordOverride) {
818843
if (mSaveAndFinishWorker != null) return;
819844
// TODO(b/120484642): This is a point of entry for passwords from the UI
820-
final Editable passwordText = mPasswordEntry.getText();
821-
if (TextUtils.isEmpty(passwordText)) {
822-
return;
845+
if (chosenPasswordOverride != null && mUiStage == Stage.Introduction) {
846+
// simulate generated password being used as user input
847+
mChosenPassword = chosenPasswordOverride;
848+
} else {
849+
final Editable passwordText = mPasswordEntry.getText();
850+
if (TextUtils.isEmpty(passwordText)) {
851+
return;
852+
}
853+
mChosenPassword = mIsAlphaMode ? LockscreenCredential.createPassword(passwordText)
854+
: LockscreenCredential.createPin(passwordText);
823855
}
824-
mChosenPassword = mIsAlphaMode ? LockscreenCredential.createPassword(passwordText)
825-
: LockscreenCredential.createPin(passwordText);
826856
if (mUiStage == Stage.Introduction) {
827857
if (validatePassword(mChosenPassword)) {
828858
mFirstPassword = mChosenPassword;
@@ -1031,7 +1061,14 @@ protected void updateUi() {
10311061
mAutoConfirmSecurityMessage.setVisibility(View.GONE);
10321062
}
10331063
final int stage = getStageType();
1034-
if (getStageType() != Stage.TYPE_NONE) {
1064+
if (mFromPasswordGeneration) {
1065+
// this is the third confirmation; let the user know that they're done after this
1066+
mMessage.setVisibility(View.VISIBLE);
1067+
final var msg = mIsAlphaMode
1068+
? R.string.lock_screen_generate_confirm_last_desc_passphrase
1069+
: R.string.lock_screen_generate_confirm_last_desc_pin;
1070+
mMessage.setText(getString(msg));
1071+
} else if (getStageType() != Stage.TYPE_NONE) {
10351072
int message = mUiStage.getMessage(mIsAlphaMode, stage);
10361073
if (message != 0) {
10371074
mMessage.setVisibility(View.VISIBLE);

src/com/android/settings/password/ChooseLockSettingsHelper.java

+13
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,19 @@ public final class ChooseLockSettingsHelper {
128128
public static final String EXTRA_KEY_CHOOSE_LOCK_SCREEN_DESCRIPTION =
129129
"choose_lock_setup_screen_description";
130130

131+
/**
132+
* Indicate whether it's being launched from PIN/passphrase password generation activity,
133+
* since that will defer verification and saving of the PIN/passphrase to the base AOSP
134+
* activity.
135+
**/
136+
public static final String EXTRA_KEY_FROM_PASSWORD_GENERATION = "from_password_generation";
137+
138+
public static final String EXTRA_KEY_FROM_PASSWORD_GENERATION_GENERATED_PASSWORD =
139+
"password_generation__generated_password";
140+
141+
public static final String EXTRA_KEY_FROM_PASSWORD_GENERATION_AUTO_PIN_CONFIRM =
142+
"password_generation__auto_pin_confirm";
143+
131144
@VisibleForTesting @NonNull LockPatternUtils mLockPatternUtils;
132145
@NonNull private final Activity mActivity;
133146
@Nullable private final Fragment mFragment;

0 commit comments

Comments
 (0)