Perform StorageServiceRestore on skip if already registered.

This commit is contained in:
Alex Hart
2026-03-20 12:44:43 -03:00
committed by Cody Henthorne
parent bb6507a456
commit e767434c2b
2 changed files with 26 additions and 11 deletions

View File

@@ -33,6 +33,7 @@ import kotlinx.coroutines.launch
import org.signal.core.ui.compose.ComposeFragment
import org.signal.core.ui.compose.theme.SignalTheme
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.MainActivity
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.registration.data.network.RegisterAccountResult
import org.thoughtcrime.securesms.registration.ui.RegistrationViewModel
@@ -131,32 +132,39 @@ class RestoreLocalBackupFragment : ComposeFragment() {
override fun skipRestore() {
sharedViewModel.skipRestore()
findNavController().safeNavigate(RestoreLocalBackupFragmentDirections.goToEnterPhoneNumber(EnterPhoneNumberMode.RESTART_AFTER_COLLECTION))
if (SignalStore.account.isRegistered) {
viewLifecycleOwner.lifecycleScope.launch {
restoreLocalBackupViewModel.performStorageServiceAccountRestoreIfNeeded()
startActivity(MainActivity.clearTop(requireContext()))
}
} else {
findNavController().safeNavigate(RestoreLocalBackupFragmentDirections.goToEnterPhoneNumber(EnterPhoneNumberMode.RESTART_AFTER_COLLECTION))
}
}
override fun confirmRestoreWithDifferentAccount() {
SignalStore.account.resetAccountEntropyPool()
SignalStore.account.resetAciAndPniIdentityKeysAfterFailedRestore()
sharedViewModel.clearRecoveryPassword()
enterBackupKeyViewModel.cancelRegistering()
sharedViewModel.intendToRestore(hasOldDevice = false, fromRemote = false, fromLocalV2 = true)
resetStateAfterFailedAccountMatch()
findNavController().safeNavigate(
RestoreLocalBackupFragmentDirections.goToEnterPhoneNumber(EnterPhoneNumberMode.RESTART_AFTER_COLLECTION)
)
}
override fun denyRestoreWithDifferentAccount() {
SignalStore.account.resetAccountEntropyPool()
SignalStore.account.resetAciAndPniIdentityKeysAfterFailedRestore()
resetStateAfterFailedAccountMatch()
SignalStore.backup.localRestoreAccountEntropyPool = null
sharedViewModel.clearRecoveryPassword()
enterBackupKeyViewModel.cancelRegistering()
sharedViewModel.intendToRestore(hasOldDevice = false, fromRemote = false, fromLocalV2 = true)
findNavController().safeNavigate(
RestoreLocalBackupFragmentDirections.goToEnterPhoneNumber(EnterPhoneNumberMode.COLLECT_FOR_LOCAL_V2_SIGNAL_BACKUPS_RESTORE)
)
}
private fun resetStateAfterFailedAccountMatch() {
SignalStore.account.resetAccountEntropyPool()
SignalStore.account.resetAciAndPniIdentityKeysAfterFailedRestore()
sharedViewModel.clearRecoveryPassword()
enterBackupKeyViewModel.cancelRegistering()
sharedViewModel.intendToRestore(hasOldDevice = false, fromRemote = false, fromLocalV2 = true)
}
override fun routeToLegacyBackupRestoration(uri: Uri) {
sharedViewModel.intendToRestore(hasOldDevice = false, fromRemote = false, fromLocalV2 = false)
localBackupRestore.launch(RestoreActivity.getLocalRestoreIntent(requireContext(), uri))

View File

@@ -23,6 +23,7 @@ import org.thoughtcrime.securesms.backup.v2.local.ArchiveFileSystem
import org.thoughtcrime.securesms.backup.v2.local.LocalArchiver
import org.thoughtcrime.securesms.backup.v2.local.SnapshotFileSystem
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.registration.ui.restore.StorageServiceRestore
import org.thoughtcrime.securesms.util.DateUtils
import java.util.Locale
@@ -108,6 +109,12 @@ class RestoreLocalBackupViewModel : ViewModel() {
}
}
suspend fun performStorageServiceAccountRestoreIfNeeded() {
if (SignalStore.account.restoredAccountEntropyPool || SignalStore.svr.masterKeyForInitialDataRestore != null) {
StorageServiceRestore.restore()
}
}
fun clearDialog() {
internalState.update { it.copy(dialog = null) }
}