Support accounts without pins in AEP restore flows.

This commit is contained in:
Cody Henthorne
2025-04-25 11:26:29 -04:00
parent b298cb6f89
commit 87cbe305f0
23 changed files with 65 additions and 85 deletions

View File

@@ -67,11 +67,6 @@ object QuickRegistrationRepository {
return TransferAccountResult.FAILED
}
val pin = SignalStore.svr.pin ?: run {
Log.w(TAG, "No pin")
return TransferAccountResult.FAILED
}
SignalNetwork
.provisioning
.sendReRegisterDeviceProvisioningMessage(
@@ -81,15 +76,15 @@ object QuickRegistrationRepository {
e164 = SignalStore.account.requireE164(),
aci = SignalStore.account.requireAci().toByteString(),
accountEntropyPool = SignalStore.account.accountEntropyPool.value,
pin = pin,
pin = SignalStore.svr.pin,
platform = RegistrationProvisionMessage.Platform.ANDROID,
backupTimestampMs = SignalStore.backup.lastBackupTime.coerceAtLeast(0L),
backupTimestampMs = SignalStore.backup.lastBackupTime.coerceAtLeast(0L).takeIf { it > 0 },
tier = when (SignalStore.backup.backupTier) {
MessageBackupTier.PAID -> RegistrationProvisionMessage.Tier.PAID
MessageBackupTier.FREE -> RegistrationProvisionMessage.Tier.FREE
null -> null
},
backupSizeBytes = SignalStore.backup.totalBackupSize,
backupSizeBytes = SignalStore.backup.totalBackupSize.takeIf { it > 0 },
restoreMethodToken = restoreMethodToken
)
)

View File

@@ -894,12 +894,12 @@ class RegistrationViewModel : ViewModel() {
Log.w(TAG, "Unable to start auth websocket", e)
}
if (!remoteResult.storageCapable && SignalStore.registration.restoreDecisionState.isDecisionPending) {
Log.v(TAG, "Not storage capable and still pending restore decision, likely an account with no data to restore, skipping post register restore")
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")
SignalStore.registration.restoreDecisionState = RestoreDecisionState.NewAccount
}
if (reglockEnabled || SignalStore.svr.hasOptedInWithAccess()) {
if (reglockEnabled || SignalStore.account.restoredAccountEntropyPool) {
SignalStore.onboarding.clearAll()
if (SignalStore.registration.restoreDecisionState.isTerminal) {

View File

@@ -158,17 +158,15 @@ class RestoreViaQrViewModel : ViewModel() {
Log.i(TAG, "Saving restore method token: ***${result.message.restoreMethodToken.takeLast(4)}")
SignalStore.registration.restoreMethodToken = result.message.restoreMethodToken
SignalStore.registration.isOtherDeviceAndroid = result.message.platform == RegistrationProvisionMessage.Platform.ANDROID
if (result.message.backupTimestampMs > 0) {
SignalStore.backup.backupTier = result.message.tier.let {
when (it) {
RegistrationProvisionMessage.Tier.FREE -> MessageBackupTier.FREE
RegistrationProvisionMessage.Tier.PAID -> MessageBackupTier.PAID
null -> null
}
}
SignalStore.backup.lastBackupTime = result.message.backupTimestampMs
SignalStore.backup.usedBackupMediaSpace = result.message.backupSizeBytes
SignalStore.backup.lastBackupTime = result.message.backupTimestampMs ?: 0
SignalStore.backup.usedBackupMediaSpace = result.message.backupSizeBytes ?: 0
SignalStore.backup.backupTier = when (result.message.tier) {
RegistrationProvisionMessage.Tier.FREE -> MessageBackupTier.FREE
RegistrationProvisionMessage.Tier.PAID -> MessageBackupTier.PAID
null -> null
}
store.update { it.copy(isRegistering = true, provisioningMessage = result.message, qrState = QrState.Scanned) }
shutdown()
} else {