Fix navigation for creating a new pin if forgotten or skipped during registration
Co-authored-by: henry <henry.ph2@gmail.com> Closes #12183
This commit is contained in:
parent
12d1254d4e
commit
d3d9b95924
6 changed files with 22 additions and 2 deletions
|
@ -171,6 +171,8 @@ public abstract class PassphraseRequiredActivity extends BaseActivity implements
|
|||
return STATE_WELCOME_PUSH_SCREEN;
|
||||
} else if (SignalStore.storageService().needsAccountRestore()) {
|
||||
return STATE_ENTER_SIGNAL_PIN;
|
||||
} else if (userHasSkippedOrForgottenPin()) {
|
||||
return STATE_CREATE_SIGNAL_PIN;
|
||||
} else if (userMustSetProfileName()) {
|
||||
return STATE_CREATE_PROFILE_NAME;
|
||||
} else if (userMustCreateSignalPin()) {
|
||||
|
@ -190,6 +192,10 @@ public abstract class PassphraseRequiredActivity extends BaseActivity implements
|
|||
return !SignalStore.registrationValues().isRegistrationComplete() && !SignalStore.kbsValues().hasPin() && !SignalStore.kbsValues().lastPinCreateFailed() && !SignalStore.kbsValues().hasOptedOut();
|
||||
}
|
||||
|
||||
private boolean userHasSkippedOrForgottenPin() {
|
||||
return !SignalStore.registrationValues().isRegistrationComplete() && !SignalStore.kbsValues().hasPin() && !SignalStore.kbsValues().hasOptedOut() && SignalStore.kbsValues().isPinForgottenOrSkipped();
|
||||
}
|
||||
|
||||
private boolean userMustSetProfileName() {
|
||||
return !SignalStore.registrationValues().isRegistrationComplete() && Recipient.self().getProfileName().isEmpty();
|
||||
}
|
||||
|
|
|
@ -23,6 +23,7 @@ public final class KbsValues extends SignalStoreValues {
|
|||
private static final String LOCK_LOCAL_PIN_HASH = "kbs.registration_lock_local_pin_hash";
|
||||
private static final String LAST_CREATE_FAILED_TIMESTAMP = "kbs.last_create_failed_timestamp";
|
||||
public static final String OPTED_OUT = "kbs.opted_out";
|
||||
private static final String PIN_FORGOTTEN_OR_SKIPPED = "kbs.pin.forgotten.or.skipped";
|
||||
|
||||
KbsValues(KeyValueStore store) {
|
||||
super(store);
|
||||
|
@ -156,6 +157,14 @@ public final class KbsValues extends SignalStoreValues {
|
|||
return getLocalPinHash() != null;
|
||||
}
|
||||
|
||||
public synchronized boolean isPinForgottenOrSkipped() {
|
||||
return getBoolean(PIN_FORGOTTEN_OR_SKIPPED, false);
|
||||
}
|
||||
|
||||
public synchronized void setPinForgottenOrSkipped(boolean value) {
|
||||
putBoolean(PIN_FORGOTTEN_OR_SKIPPED, value);
|
||||
}
|
||||
|
||||
/** Should only be called by {@link org.thoughtcrime.securesms.pin.PinState}. */
|
||||
public synchronized void optOut() {
|
||||
getStore().beginWrite()
|
||||
|
|
|
@ -34,5 +34,6 @@ public final class PinRestoreActivity extends AppCompatActivity {
|
|||
final Intent chained = PassphraseRequiredActivity.chainIntent(createPin, main);
|
||||
|
||||
startActivity(chained);
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -227,6 +227,7 @@ public class PinRestoreEntryFragment extends LoggingFragment {
|
|||
}
|
||||
|
||||
private void onAccountLocked() {
|
||||
PinState.onPinRestoreForgottenOrSkipped();
|
||||
SafeNavigation.safeNavigate(Navigation.findNavController(requireView()), PinRestoreEntryFragmentDirections.actionAccountLocked());
|
||||
}
|
||||
|
||||
|
|
|
@ -86,6 +86,7 @@ public final class PinState {
|
|||
SignalStore.kbsValues().setKbsMasterKey(kbsData, pin);
|
||||
SignalStore.kbsValues().setV2RegistrationLockEnabled(false);
|
||||
SignalStore.pinValues().resetPinReminders();
|
||||
SignalStore.kbsValues().setPinForgottenOrSkipped(false);
|
||||
SignalStore.storageService().setNeedsAccountRestore(false);
|
||||
resetPinRetryCount(context, pin);
|
||||
ClearFallbackKbsEnclaveJob.clearAll();
|
||||
|
@ -99,6 +100,7 @@ public final class PinState {
|
|||
public static synchronized void onPinRestoreForgottenOrSkipped() {
|
||||
SignalStore.kbsValues().clearRegistrationLockAndPin();
|
||||
SignalStore.storageService().setNeedsAccountRestore(false);
|
||||
SignalStore.kbsValues().setPinForgottenOrSkipped(true);
|
||||
|
||||
updateState(buildInferredStateFromOtherFields());
|
||||
}
|
||||
|
@ -122,6 +124,7 @@ public final class PinState {
|
|||
KbsPinData kbsData = pinChangeSession.setPin(hashedPin, masterKey);
|
||||
|
||||
kbsValues.setKbsMasterKey(kbsData, pin);
|
||||
kbsValues.setPinForgottenOrSkipped(false);
|
||||
TextSecurePreferences.clearRegistrationLockV1(context);
|
||||
SignalStore.pinValues().setKeyboardType(keyboard);
|
||||
SignalStore.pinValues().resetPinReminders();
|
||||
|
|
|
@ -16,8 +16,8 @@
|
|||
app:destination="@id/pinLockedFragment"
|
||||
app:enterAnim="@anim/nav_default_enter_anim"
|
||||
app:exitAnim="@anim/nav_default_exit_anim"
|
||||
app:popEnterAnim="@anim/nav_default_pop_enter_anim"
|
||||
app:popExitAnim="@anim/nav_default_pop_exit_anim" />
|
||||
app:popUpTo="@id/signup"
|
||||
app:popUpToInclusive="true" />
|
||||
|
||||
</fragment>
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue