From 27ddc97ea490ca914b4133150fcdfb0f858f001d Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Thu, 7 Aug 2025 16:11:28 -0400 Subject: [PATCH] Use server rereg flag to show post reg restore flows. --- .../thoughtcrime/securesms/testing/SignalActivityRule.kt | 3 ++- .../registration/data/AccountRegistrationResult.kt | 3 ++- .../securesms/registration/data/RegistrationRepository.kt | 3 ++- .../securesms/registrationv3/data/RegistrationRepository.kt | 6 ++++-- .../securesms/registrationv3/ui/RegistrationViewModel.kt | 4 ++-- .../signalservice/internal/push/VerifyAccountResponse.java | 3 +++ 6 files changed, 15 insertions(+), 7 deletions(-) diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/SignalActivityRule.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/SignalActivityRule.kt index b0b5ad660b..7ca8e6d4c1 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/SignalActivityRule.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/SignalActivityRule.kt @@ -113,7 +113,8 @@ class SignalActivityRule(private val othersCount: Int = 4, private val createGro masterKey = null, pin = null, aciPreKeyCollection = RegistrationRepository.generateSignedAndLastResortPreKeys(SignalStore.account.aciIdentityKey, SignalStore.account.aciPreKeys), - pniPreKeyCollection = RegistrationRepository.generateSignedAndLastResortPreKeys(SignalStore.account.aciIdentityKey, SignalStore.account.pniPreKeys) + pniPreKeyCollection = RegistrationRepository.generateSignedAndLastResortPreKeys(SignalStore.account.aciIdentityKey, SignalStore.account.pniPreKeys), + reRegistration = false ) val localRegistrationData = LocalRegistrationMetadataUtil.createLocalRegistrationMetadata(SignalStore.account.aciIdentityKey, SignalStore.account.pniIdentityKey, registrationData, remoteResult, false) RegistrationRepository.registerAccountLocally(application, localRegistrationData) diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/data/AccountRegistrationResult.kt b/app/src/main/java/org/thoughtcrime/securesms/registration/data/AccountRegistrationResult.kt index 6d2f1d15fc..4a1e914d61 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/data/AccountRegistrationResult.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/data/AccountRegistrationResult.kt @@ -16,5 +16,6 @@ data class AccountRegistrationResult( val masterKey: MasterKey?, val pin: String?, val aciPreKeyCollection: PreKeyCollection, - val pniPreKeyCollection: PreKeyCollection + val pniPreKeyCollection: PreKeyCollection, + val reRegistration: Boolean ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/data/RegistrationRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/registration/data/RegistrationRepository.kt index a8d67256d2..7647d6b222 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/data/RegistrationRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/data/RegistrationRepository.kt @@ -444,7 +444,8 @@ object RegistrationRepository { masterKey = masterKey, pin = pin, aciPreKeyCollection = aciPreKeyCollection, - pniPreKeyCollection = pniPreKeyCollection + pniPreKeyCollection = pniPreKeyCollection, + reRegistration = accountRegistrationResponse.reregistration ) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/registrationv3/data/RegistrationRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/registrationv3/data/RegistrationRepository.kt index 499cd0562f..5db8634951 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registrationv3/data/RegistrationRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/registrationv3/data/RegistrationRepository.kt @@ -479,7 +479,8 @@ object RegistrationRepository { masterKey = masterKey, pin = pin, aciPreKeyCollection = aciPreKeyCollection, - pniPreKeyCollection = pniPreKeyCollection + pniPreKeyCollection = pniPreKeyCollection, + reRegistration = accountRegistrationResponse.reregistration ) } @@ -536,7 +537,8 @@ object RegistrationRepository { masterKey = MasterKey(message.masterKey!!.toByteArray()), pin = null, aciPreKeyCollection = aciPreKeys, - pniPreKeyCollection = pniPreKeys + pniPreKeyCollection = pniPreKeys, + reRegistration = true ) ) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/registrationv3/ui/RegistrationViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/registrationv3/ui/RegistrationViewModel.kt index d700b61d2a..1ab1080700 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registrationv3/ui/RegistrationViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/registrationv3/ui/RegistrationViewModel.kt @@ -909,8 +909,8 @@ class RegistrationViewModel : ViewModel() { Log.w(TAG, "Unable to start auth websocket", e) } - if (!remoteResult.storageCapable && !SignalStore.account.restoredAccountEntropyPool && SignalStore.registration.restoreDecisionState.isDecisionPending) { - Log.v(TAG, "Not storage capable or restored with AEP, and still pending restore decision, likely an account with no data to restore, skipping post register restore") + if (!remoteResult.reRegistration && SignalStore.registration.restoreDecisionState.isDecisionPending) { + Log.v(TAG, "Not re-registration, and still pending restore decision, likely an account with no data to restore, skipping post register restore") SignalStore.registration.restoreDecisionState = RestoreDecisionState.NewAccount } diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/VerifyAccountResponse.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/VerifyAccountResponse.java index 4fde11c6c0..08f6ebd938 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/VerifyAccountResponse.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/VerifyAccountResponse.java @@ -16,6 +16,9 @@ public class VerifyAccountResponse { @JsonProperty public String number; + @JsonProperty + public boolean reregistration; + @JsonCreator public VerifyAccountResponse() {}