From e767434c2b778cdc3860fc93758837e34af85690 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Fri, 20 Mar 2026 12:44:43 -0300 Subject: [PATCH] Perform StorageServiceRestore on skip if already registered. --- .../local/RestoreLocalBackupFragment.kt | 30 ++++++++++++------- .../local/RestoreLocalBackupViewModel.kt | 7 +++++ 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/ui/restore/local/RestoreLocalBackupFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/registration/ui/restore/local/RestoreLocalBackupFragment.kt index e762e2f2d5..8ab0de4205 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/ui/restore/local/RestoreLocalBackupFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/ui/restore/local/RestoreLocalBackupFragment.kt @@ -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)) diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/ui/restore/local/RestoreLocalBackupViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/registration/ui/restore/local/RestoreLocalBackupViewModel.kt index f1b2d86bad..6066500c93 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/ui/restore/local/RestoreLocalBackupViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/ui/restore/local/RestoreLocalBackupViewModel.kt @@ -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) } }