diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/v2/ui/RegistrationCheckpoint.kt b/app/src/main/java/org/thoughtcrime/securesms/registration/v2/ui/RegistrationCheckpoint.kt
index f679d3fcd0..c1d03c2b50 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/registration/v2/ui/RegistrationCheckpoint.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/registration/v2/ui/RegistrationCheckpoint.kt
@@ -12,9 +12,7 @@ package org.thoughtcrime.securesms.registration.v2.ui
enum class RegistrationCheckpoint {
INITIALIZATION,
PERMISSIONS_GRANTED,
- BACKUP_DETECTED,
- BACKUP_SELECTED,
- BACKUP_RESTORED,
+ BACKUP_RESTORED_OR_SKIPPED,
PUSH_NETWORK_AUDITED,
PHONE_NUMBER_CONFIRMED,
PIN_CONFIRMED,
diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/v2/ui/RegistrationV2ViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/registration/v2/ui/RegistrationV2ViewModel.kt
index 4229b17622..f779d0c061 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/registration/v2/ui/RegistrationV2ViewModel.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/registration/v2/ui/RegistrationV2ViewModel.kt
@@ -99,7 +99,7 @@ class RegistrationV2ViewModel : ViewModel() {
fun onBackupSuccessfullyRestored() {
val recoveryPassword = SignalStore.svr().recoveryPassword
store.update {
- it.copy(registrationCheckpoint = RegistrationCheckpoint.BACKUP_RESTORED, recoveryPassword = SignalStore.svr().recoveryPassword, canSkipSms = recoveryPassword != null)
+ it.copy(registrationCheckpoint = RegistrationCheckpoint.BACKUP_RESTORED_OR_SKIPPED, recoveryPassword = SignalStore.svr().recoveryPassword, canSkipSms = recoveryPassword != null)
}
}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/restore/restorecomplete/RestoreCompleteV2Fragment.kt b/app/src/main/java/org/thoughtcrime/securesms/restore/restorecomplete/RestoreCompleteV2Fragment.kt
new file mode 100644
index 0000000000..2aa6f67135
--- /dev/null
+++ b/app/src/main/java/org/thoughtcrime/securesms/restore/restorecomplete/RestoreCompleteV2Fragment.kt
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2024 Signal Messenger, LLC
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+package org.thoughtcrime.securesms.restore.restorecomplete
+
+import android.os.Bundle
+import android.view.View
+import org.signal.core.util.logging.Log
+import org.thoughtcrime.securesms.LoggingFragment
+import org.thoughtcrime.securesms.R
+import org.thoughtcrime.securesms.keyvalue.SignalStore
+import org.thoughtcrime.securesms.restore.RestoreActivity
+
+/**
+ * This is a hack placeholder fragment so we can reuse the existing V1 device transfer fragments without changing their navigation calls.
+ * The original calls expect to be navigating from the [NewDeviceTransferCompleteFragment] to [EnterPhoneNumberFragment]
+ * This approximates that by taking the place of [EnterPhoneNumberFragment],
+ * then bridging us back to [RegistrationV2Activity] by immediately closing the [RestoreActivity].
+ */
+class RestoreCompleteV2Fragment : LoggingFragment(R.layout.fragment_registration_blank) {
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ Log.d(TAG, "Finishing activity…")
+ onBackupCompletedSuccessfully()
+ }
+
+ private fun onBackupCompletedSuccessfully() {
+ Log.d(TAG, "onBackupCompletedSuccessfully()")
+ SignalStore.internalValues().setForceEnterRestoreV2Flow(false)
+ val activity = requireActivity() as RestoreActivity
+ activity.finishActivitySuccessfully()
+ }
+
+ companion object {
+ private val TAG = Log.tag(RestoreCompleteV2Fragment::class.java)
+ }
+}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/restore/restorelocalbackup/RestoreLocalBackupFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/restore/restorelocalbackup/RestoreLocalBackupFragment.kt
index 276acfa927..1a22c4471c 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/restore/restorelocalbackup/RestoreLocalBackupFragment.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/restore/restorelocalbackup/RestoreLocalBackupFragment.kt
@@ -55,6 +55,14 @@ class RestoreLocalBackupFragment : LoggingFragment(R.layout.fragment_restore_loc
binding.restoreButton.setOnClickListener { presentBackupPassPhrasePromptDialog() }
+ // TODO [regv2]: check for re-register and skip ahead to phone number entry
+
+ if (SignalStore.settings().isBackupEnabled) {
+ Log.i(TAG, "Backups enabled, so a backup must have been previously restored.")
+ onBackupCompletedSuccessfully()
+ return
+ }
+
restoreLocalBackupViewModel.uiState.observe(viewLifecycleOwner) { fragmentState ->
fragmentState.backupInfo?.let {
presentBackupFileInfo(backupSize = it.size, backupTimestamp = it.timestamp)
diff --git a/app/src/main/java/org/thoughtcrime/securesms/restore/transferorrestore/TransferOrRestoreV2Fragment.kt b/app/src/main/java/org/thoughtcrime/securesms/restore/transferorrestore/TransferOrRestoreV2Fragment.kt
index b96b888302..7622f03771 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/restore/transferorrestore/TransferOrRestoreV2Fragment.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/restore/transferorrestore/TransferOrRestoreV2Fragment.kt
@@ -66,9 +66,7 @@ class TransferOrRestoreV2Fragment : LoggingFragment(R.layout.fragment_transfer_r
private fun launchSelection(restorationType: BackupRestorationType) {
when (restorationType) {
BackupRestorationType.DEVICE_TRANSFER -> {
- // TODO [regv2]
- Log.w(TAG, "Not yet implemented!", NotImplementedError())
- Toast.makeText(requireContext(), "Not yet implemented!", Toast.LENGTH_LONG).show()
+ NavHostFragment.findNavController(this).safeNavigate(TransferOrRestoreV2FragmentDirections.actionNewDeviceTransferInstructions())
}
BackupRestorationType.LOCAL_BACKUP -> {
NavHostFragment.findNavController(this).safeNavigate(TransferOrRestoreV2FragmentDirections.actionTransferOrRestoreToRestore())
diff --git a/app/src/main/res/navigation/registration.xml b/app/src/main/res/navigation/registration.xml
index c1b2fa3fa8..47653ccb26 100644
--- a/app/src/main/res/navigation/registration.xml
+++ b/app/src/main/res/navigation/registration.xml
@@ -13,7 +13,7 @@
@@ -296,7 +296,7 @@
app:exitAnim="@anim/nav_default_exit_anim"
app:popEnterAnim="@anim/nav_default_pop_enter_anim"
app:popExitAnim="@anim/nav_default_pop_exit_anim"
- app:popUpTo="@id/restoreBackupFragment"
+ app:popUpTo="@id/restoreBackupFragmentV2"
app:popUpToInclusive="true" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ app:startDestination="@id/transferOrRestore">
+
+
+
+
+ app:destination="@id/choose_local_backup_fragment"
+ app:enterAnim="@anim/nav_default_enter_anim"
+ app:exitAnim="@anim/nav_default_exit_anim"
+ app:popEnterAnim="@anim/nav_default_pop_enter_anim"
+ app:popExitAnim="@anim/nav_default_pop_exit_anim"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file