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