diff --git a/app/src/main/java/org/thoughtcrime/securesms/devicetransfer/newdevice/NewDeviceTransferViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/devicetransfer/newdevice/NewDeviceTransferViewModel.kt index 760d6254f1..60fc42651e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/devicetransfer/newdevice/NewDeviceTransferViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/devicetransfer/newdevice/NewDeviceTransferViewModel.kt @@ -12,6 +12,8 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.thoughtcrime.securesms.database.model.databaseprotos.RestoreDecisionState +import org.thoughtcrime.securesms.dependencies.AppDependencies +import org.thoughtcrime.securesms.jobs.ReclaimUsernameAndLinkJob import org.thoughtcrime.securesms.keyvalue.Completed import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.registration.util.RegistrationUtil @@ -24,6 +26,8 @@ class NewDeviceTransferViewModel : ViewModel() { RegistrationRepository.registerAccountLocally(context, metadata) SignalStore.registration.localRegistrationMetadata = null RegistrationUtil.maybeMarkRegistrationComplete() + + AppDependencies.jobManager.add(ReclaimUsernameAndLinkJob()) } SignalStore.registration.restoreDecisionState = RestoreDecisionState.Completed diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/ui/RegistrationViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/registration/ui/RegistrationViewModel.kt index 05c07b1634..bcdfa5c5cb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/ui/RegistrationViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/ui/RegistrationViewModel.kt @@ -871,6 +871,8 @@ class RegistrationViewModel : ViewModel() { stopwatch.split("storage-sync") stopwatch.stop(TAG) + } else if (SignalStore.misc.needsUsernameRestore) { + AppDependencies.jobManager.runSynchronously(ReclaimUsernameAndLinkJob(), TimeUnit.SECONDS.toMillis(10)) } refreshRemoteConfig() 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 20b11876e0..56602a7d93 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 @@ -31,12 +31,14 @@ import org.thoughtcrime.securesms.dependencies.AppDependencies import org.thoughtcrime.securesms.jobs.MultiDeviceProfileContentUpdateJob import org.thoughtcrime.securesms.jobs.MultiDeviceProfileKeyUpdateJob import org.thoughtcrime.securesms.jobs.ProfileUploadJob +import org.thoughtcrime.securesms.jobs.ReclaimUsernameAndLinkJob import org.thoughtcrime.securesms.keyvalue.NewAccount import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.keyvalue.Skipped import org.thoughtcrime.securesms.keyvalue.Start import org.thoughtcrime.securesms.keyvalue.intendToRestore import org.thoughtcrime.securesms.keyvalue.isDecisionPending +import org.thoughtcrime.securesms.keyvalue.isTerminal import org.thoughtcrime.securesms.keyvalue.isWantingManualRemoteRestore import org.thoughtcrime.securesms.permissions.Permissions import org.thoughtcrime.securesms.pin.SvrRepository @@ -891,10 +893,12 @@ class RegistrationViewModel : ViewModel() { if (reglockEnabled || SignalStore.svr.hasOptedInWithAccess()) { SignalStore.onboarding.clearAll() - if (!SignalStore.registration.restoreDecisionState.isDecisionPending) { + if (SignalStore.registration.restoreDecisionState.isTerminal) { Log.d(TAG, "No pending restore decisions, can restore account from storage service") StorageServiceRestore.restore() } + } else if (SignalStore.registration.restoreDecisionState.isTerminal && SignalStore.misc.needsUsernameRestore) { + AppDependencies.jobManager.runSynchronously(ReclaimUsernameAndLinkJob(), 10.seconds.inWholeMilliseconds) } if (SignalStore.account.restoredAccountEntropyPool) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/restore/restorelocalbackup/RestoreLocalBackupViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/restore/restorelocalbackup/RestoreLocalBackupViewModel.kt index 5555653536..01828815a4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/restore/restorelocalbackup/RestoreLocalBackupViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/restore/restorelocalbackup/RestoreLocalBackupViewModel.kt @@ -17,6 +17,8 @@ import kotlinx.coroutines.launch import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.backup.BackupEvent import org.thoughtcrime.securesms.database.model.databaseprotos.RestoreDecisionState +import org.thoughtcrime.securesms.dependencies.AppDependencies +import org.thoughtcrime.securesms.jobs.ReclaimUsernameAndLinkJob import org.thoughtcrime.securesms.keyvalue.Completed import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.registration.data.RegistrationRepository @@ -94,6 +96,8 @@ class RestoreLocalBackupViewModel(fileBackupUri: Uri) : ViewModel() { RegistrationRepository.registerAccountLocally(context, it) SignalStore.registration.localRegistrationMetadata = null RegistrationUtil.maybeMarkRegistrationComplete() + + AppDependencies.jobManager.add(ReclaimUsernameAndLinkJob()) } SignalStore.registration.restoreDecisionState = RestoreDecisionState.Completed