Fix navigation for creating a new pin if forgotten or skipped during registration

Co-authored-by: henry <henry.ph2@gmail.com>

Closes #12183
fork-5.53.8
clauz9 2022-04-23 02:10:01 +03:00 zatwierdzone przez Alex Hart
rodzic 12d1254d4e
commit d3d9b95924
6 zmienionych plików z 22 dodań i 2 usunięć

Wyświetl plik

@ -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();
}

Wyświetl plik

@ -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()

Wyświetl plik

@ -34,5 +34,6 @@ public final class PinRestoreActivity extends AppCompatActivity {
final Intent chained = PassphraseRequiredActivity.chainIntent(createPin, main);
startActivity(chained);
finish();
}
}

Wyświetl plik

@ -227,6 +227,7 @@ public class PinRestoreEntryFragment extends LoggingFragment {
}
private void onAccountLocked() {
PinState.onPinRestoreForgottenOrSkipped();
SafeNavigation.safeNavigate(Navigation.findNavController(requireView()), PinRestoreEntryFragmentDirections.actionAccountLocked());
}

Wyświetl plik

@ -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();

Wyświetl plik

@ -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>