From 60192c4b463cd0f2cc0b5ac3d82407a005184bbd Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Thu, 2 Jul 2026 15:12:42 -0400 Subject: [PATCH] Fix icons and restore options in regV5. --- .../org/signal/core/ui/compose/SignalIcons.kt | 6 ++ .../main/res/drawable/symbol_folder_24.xml | 0 .../res/drawable/symbol_folder_display_48.xml | 10 +++ .../symbol_mobile_next_display_48.xml | 14 ++++ .../symbol_signal_backups_display_48.xml | 26 +++++++ .../main/res/drawable/symbol_transfer_24.xml | 0 .../drawable/symbol_transfer_display_48.xml | 15 +++++ .../registration/RegistrationNavigation.kt | 2 + .../complete/DeviceTransferCompleteScreen.kt | 4 +- .../DeviceTransferInstructionsScreen.kt | 4 +- .../LocalBackupRestoreScreen.kt | 6 +- .../ArchiveRestoreSelectionScreen.kt | 67 +++---------------- .../ArchiveRestoreSelectionScreenEvents.kt | 2 - .../ArchiveRestoreSelectionState.kt | 2 - .../ArchiveRestoreSelectionViewModel.kt | 24 ++++--- .../org/signal/registration/test/TestTags.kt | 2 +- .../src/main/res/values/strings.xml | 2 - .../ArchiveRestoreSelectionViewModelTest.kt | 51 +++++--------- 18 files changed, 119 insertions(+), 118 deletions(-) rename {feature/registration => core/ui}/src/main/res/drawable/symbol_folder_24.xml (100%) create mode 100644 core/ui/src/main/res/drawable/symbol_folder_display_48.xml create mode 100644 core/ui/src/main/res/drawable/symbol_mobile_next_display_48.xml create mode 100644 core/ui/src/main/res/drawable/symbol_signal_backups_display_48.xml rename {feature/registration => core/ui}/src/main/res/drawable/symbol_transfer_24.xml (100%) create mode 100644 core/ui/src/main/res/drawable/symbol_transfer_display_48.xml diff --git a/core/ui/src/main/java/org/signal/core/ui/compose/SignalIcons.kt b/core/ui/src/main/java/org/signal/core/ui/compose/SignalIcons.kt index 007949505e..b4578c1e32 100644 --- a/core/ui/src/main/java/org/signal/core/ui/compose/SignalIcons.kt +++ b/core/ui/src/main/java/org/signal/core/ui/compose/SignalIcons.kt @@ -58,6 +58,8 @@ enum class SignalIcons(private val icon: SignalIcon) : SignalIcon by icon { FlashOff(icon(R.drawable.symbol_flash_slash_24)), FlashOn(icon(R.drawable.symbol_flash_24)), Flip(icon(R.drawable.symbol_flip_24)), + Folder(icon(R.drawable.symbol_folder_24)), + FolderDisplay(icon(R.drawable.symbol_folder_display_48)), Forward(icon(R.drawable.symbol_forward_24)), Info(icon(R.drawable.symbol_info_24)), Keyboard(icon(R.drawable.ic_keyboard_24)), @@ -65,6 +67,7 @@ enum class SignalIcons(private val icon: SignalIcon) : SignalIcon by icon { Lock(icon(R.drawable.symbol_lock_24)), Maximize(icon(R.drawable.symbol_maximize_24)), Mic(icon(R.drawable.symbol_mic_24)), + MobileNextDisplay(icon(R.drawable.symbol_mobile_next_display_48)), MoreVertical(icon(R.drawable.symbol_more_vertical_24)), PersonCircle(icon(R.drawable.symbol_person_circle_24)), Phone(icon(R.drawable.symbol_phone_24)), @@ -77,8 +80,11 @@ enum class SignalIcons(private val icon: SignalIcon) : SignalIcon by icon { Search(icon(R.drawable.symbol_search_24)), Settings(icon(R.drawable.symbol_settings_android_24)), Share(icon(R.drawable.symbol_share_android_24)), + SignalBackupsDisplay(icon(R.drawable.symbol_signal_backups_display_48)), Sticker(icon(R.drawable.symbol_sticker_24)), Text(icon(R.drawable.symbol_text_24)), + Transfer(icon(R.drawable.symbol_transfer_24)), + TransferDisplay(icon(R.drawable.symbol_transfer_display_48)), Trash(icon(R.drawable.symbol_trash_24)), X(icon(R.drawable.symbol_x_24)), XCircleFill(icon(R.drawable.symbol_x_circle_fill_24)) diff --git a/feature/registration/src/main/res/drawable/symbol_folder_24.xml b/core/ui/src/main/res/drawable/symbol_folder_24.xml similarity index 100% rename from feature/registration/src/main/res/drawable/symbol_folder_24.xml rename to core/ui/src/main/res/drawable/symbol_folder_24.xml diff --git a/core/ui/src/main/res/drawable/symbol_folder_display_48.xml b/core/ui/src/main/res/drawable/symbol_folder_display_48.xml new file mode 100644 index 0000000000..e7f6032efa --- /dev/null +++ b/core/ui/src/main/res/drawable/symbol_folder_display_48.xml @@ -0,0 +1,10 @@ + + + diff --git a/core/ui/src/main/res/drawable/symbol_mobile_next_display_48.xml b/core/ui/src/main/res/drawable/symbol_mobile_next_display_48.xml new file mode 100644 index 0000000000..525b5729f6 --- /dev/null +++ b/core/ui/src/main/res/drawable/symbol_mobile_next_display_48.xml @@ -0,0 +1,14 @@ + + + + diff --git a/core/ui/src/main/res/drawable/symbol_signal_backups_display_48.xml b/core/ui/src/main/res/drawable/symbol_signal_backups_display_48.xml new file mode 100644 index 0000000000..aecc689f07 --- /dev/null +++ b/core/ui/src/main/res/drawable/symbol_signal_backups_display_48.xml @@ -0,0 +1,26 @@ + + + + + + + + diff --git a/feature/registration/src/main/res/drawable/symbol_transfer_24.xml b/core/ui/src/main/res/drawable/symbol_transfer_24.xml similarity index 100% rename from feature/registration/src/main/res/drawable/symbol_transfer_24.xml rename to core/ui/src/main/res/drawable/symbol_transfer_24.xml diff --git a/core/ui/src/main/res/drawable/symbol_transfer_display_48.xml b/core/ui/src/main/res/drawable/symbol_transfer_display_48.xml new file mode 100644 index 0000000000..0ccd6cf593 --- /dev/null +++ b/core/ui/src/main/res/drawable/symbol_transfer_display_48.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/feature/registration/src/main/java/org/signal/registration/RegistrationNavigation.kt b/feature/registration/src/main/java/org/signal/registration/RegistrationNavigation.kt index 32cfe59078..5f4c9ed228 100644 --- a/feature/registration/src/main/java/org/signal/registration/RegistrationNavigation.kt +++ b/feature/registration/src/main/java/org/signal/registration/RegistrationNavigation.kt @@ -172,6 +172,7 @@ sealed interface RegistrationRoute : NavKey, Parcelable { } add(ArchiveRestoreOption.LocalBackup) add(ArchiveRestoreOption.DeviceTransfer) + add(ArchiveRestoreOption.None) }, isPreRegistration = true ) @@ -182,6 +183,7 @@ sealed interface RegistrationRoute : NavKey, Parcelable { restoreOptions = buildList { add(ArchiveRestoreOption.SignalSecureBackup) add(ArchiveRestoreOption.LocalBackup) + add(ArchiveRestoreOption.None) }, isPreRegistration = true ) diff --git a/feature/registration/src/main/java/org/signal/registration/screens/devicetransfer/complete/DeviceTransferCompleteScreen.kt b/feature/registration/src/main/java/org/signal/registration/screens/devicetransfer/complete/DeviceTransferCompleteScreen.kt index 0a07d17222..a5a676b3fe 100644 --- a/feature/registration/src/main/java/org/signal/registration/screens/devicetransfer/complete/DeviceTransferCompleteScreen.kt +++ b/feature/registration/src/main/java/org/signal/registration/screens/devicetransfer/complete/DeviceTransferCompleteScreen.kt @@ -21,13 +21,13 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import org.signal.core.ui.compose.AllDevicePreviews import org.signal.core.ui.compose.Buttons import org.signal.core.ui.compose.Previews +import org.signal.core.ui.compose.SignalIcons import org.signal.registration.R import org.signal.registration.screens.RegistrationScaffold @@ -51,7 +51,7 @@ fun DeviceTransferCompleteScreen( Spacer(modifier = Modifier.height(64.dp)) Icon( - painter = painterResource(R.drawable.symbol_transfer_24), + painter = SignalIcons.Transfer.painter, contentDescription = null, tint = MaterialTheme.colorScheme.primary, modifier = Modifier.size(64.dp) diff --git a/feature/registration/src/main/java/org/signal/registration/screens/devicetransfer/instructions/DeviceTransferInstructionsScreen.kt b/feature/registration/src/main/java/org/signal/registration/screens/devicetransfer/instructions/DeviceTransferInstructionsScreen.kt index ea50449a81..0e51b6196c 100644 --- a/feature/registration/src/main/java/org/signal/registration/screens/devicetransfer/instructions/DeviceTransferInstructionsScreen.kt +++ b/feature/registration/src/main/java/org/signal/registration/screens/devicetransfer/instructions/DeviceTransferInstructionsScreen.kt @@ -20,13 +20,13 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import org.signal.core.ui.compose.AllDevicePreviews import org.signal.core.ui.compose.Buttons import org.signal.core.ui.compose.Previews +import org.signal.core.ui.compose.SignalIcons import org.signal.registration.R import org.signal.registration.screens.RegistrationScaffold @@ -48,7 +48,7 @@ fun DeviceTransferInstructionsScreen( Spacer(modifier = Modifier.height(48.dp)) Icon( - painter = painterResource(R.drawable.symbol_transfer_24), + painter = SignalIcons.Transfer.painter, contentDescription = null, tint = MaterialTheme.colorScheme.primary, modifier = Modifier.size(64.dp) diff --git a/feature/registration/src/main/java/org/signal/registration/screens/localbackuprestore/LocalBackupRestoreScreen.kt b/feature/registration/src/main/java/org/signal/registration/screens/localbackuprestore/LocalBackupRestoreScreen.kt index 323b3dc9f7..72502bc20d 100644 --- a/feature/registration/src/main/java/org/signal/registration/screens/localbackuprestore/LocalBackupRestoreScreen.kt +++ b/feature/registration/src/main/java/org/signal/registration/screens/localbackuprestore/LocalBackupRestoreScreen.kt @@ -42,11 +42,9 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.stringResource -import androidx.compose.ui.res.vectorResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import kotlinx.coroutines.launch @@ -125,7 +123,7 @@ private fun SelectFolderContent( BackupOptionCard( icon = { Icon( - imageVector = ImageVector.vectorResource(R.drawable.symbol_folder_24), + imageVector = SignalIcons.Folder.imageVector, contentDescription = null, tint = MaterialTheme.colorScheme.primary, modifier = Modifier.size(32.dp) @@ -278,7 +276,7 @@ private fun BackupInfoCard( val sizeIcon = if (backupInfo.type == LocalBackupInfo.BackupType.V1) { SignalIcons.File.imageVector } else { - ImageVector.vectorResource(R.drawable.symbol_folder_24) + SignalIcons.Folder.imageVector } Row(verticalAlignment = Alignment.CenterVertically) { diff --git a/feature/registration/src/main/java/org/signal/registration/screens/restoreselection/ArchiveRestoreSelectionScreen.kt b/feature/registration/src/main/java/org/signal/registration/screens/restoreselection/ArchiveRestoreSelectionScreen.kt index 28f1ae3c05..7100553395 100644 --- a/feature/registration/src/main/java/org/signal/registration/screens/restoreselection/ArchiveRestoreSelectionScreen.kt +++ b/feature/registration/src/main/java/org/signal/registration/screens/restoreselection/ArchiveRestoreSelectionScreen.kt @@ -5,8 +5,6 @@ package org.signal.registration.screens.restoreselection -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer @@ -23,14 +21,12 @@ import androidx.compose.material3.CardDefaults import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text -import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.stringResource -import androidx.compose.ui.res.vectorResource import androidx.compose.ui.unit.dp import androidx.compose.ui.window.DialogProperties import org.signal.core.ui.compose.AllDevicePreviews @@ -95,22 +91,6 @@ private fun OnePaneLayout( RestoreOptions(state, onEvent) } - }, - footer = { - RegistrationScaffold.FooterSurface( - isElevated = scrollState.canScrollForward - ) { - if (state.showSkipButton) { - Row( - modifier = Modifier - .fillMaxWidth() - .padding(params.footerPadding), - horizontalArrangement = Arrangement.Center - ) { - SkipRestoreButton(onEvent) - } - } - } } ) } @@ -149,22 +129,6 @@ private fun TwoPaneLayout( ) { RestoreOptions(state, onEvent) } - }, - footer = { - RegistrationScaffold.FooterSurface( - isElevated = firstPaneScrollState.canScrollForward || secondPaneScrollState.canScrollForward - ) { - if (state.showSkipButton) { - Row( - modifier = Modifier - .fillMaxWidth() - .padding(params.footerPadding), - horizontalArrangement = Arrangement.End - ) { - SkipRestoreButton(onEvent) - } - } - } } ) } @@ -200,20 +164,6 @@ private fun RestoreOptions(state: ArchiveRestoreSelectionState, onEvent: (Archiv } } -@Composable -private fun SkipRestoreButton(onEvent: (ArchiveRestoreSelectionScreenEvents) -> Unit) { - TextButton( - onClick = { onEvent(ArchiveRestoreSelectionScreenEvents.Skip) }, - modifier = Modifier - .testTag(TestTags.ARCHIVE_RESTORE_SELECTION_SKIP) - ) { - Text( - text = stringResource(R.string.ArchiveRestoreSelectionScreen__skip), - color = MaterialTheme.colorScheme.primary - ) - } -} - @Composable private fun RestoreOptionCard( option: ArchiveRestoreOption, @@ -223,7 +173,7 @@ private fun RestoreOptionCard( when (option) { ArchiveRestoreOption.SignalSecureBackup -> { SelectionCard( - imageVector = SignalIcons.Backup.imageVector, + imageVector = SignalIcons.SignalBackupsDisplay.imageVector, title = stringResource(R.string.ArchiveRestoreSelectionScreen__from_signal_backups), subtitle = stringResource(R.string.ArchiveRestoreSelectionScreen__your_free_or_paid_signal_backup_plan), onClick = onClick, @@ -233,7 +183,7 @@ private fun RestoreOptionCard( ArchiveRestoreOption.DeviceTransfer -> { SelectionCard( - imageVector = ImageVector.vectorResource(R.drawable.symbol_transfer_24), + imageVector = SignalIcons.TransferDisplay.imageVector, title = stringResource(R.string.ArchiveRestoreSelectionScreen__from_your_old_phone), subtitle = stringResource(R.string.ArchiveRestoreSelectionScreen__transfer_directly_from_old), onClick = onClick, @@ -243,7 +193,7 @@ private fun RestoreOptionCard( ArchiveRestoreOption.LocalBackup -> { SelectionCard( - imageVector = ImageVector.vectorResource(R.drawable.symbol_folder_24), + imageVector = SignalIcons.FolderDisplay.imageVector, title = stringResource(R.string.ArchiveRestoreSelectionScreen__local_backup_card_title), subtitle = stringResource(R.string.ArchiveRestoreSelectionScreen__local_backup_card_description), onClick = onClick, @@ -253,11 +203,11 @@ private fun RestoreOptionCard( ArchiveRestoreOption.None -> { SelectionCard( - imageVector = ImageVector.vectorResource(R.drawable.symbol_folder_24), + imageVector = SignalIcons.MobileNextDisplay.imageVector, title = stringResource(R.string.ArchiveRestoreSelectionScreen__skip_restore_title), subtitle = stringResource(R.string.ArchiveRestoreSelectionScreen__skip_restore_description), onClick = onClick, - modifier = modifier.testTag(TestTags.ARCHIVE_RESTORE_SELECTION_FROM_BACKUP_FOLDER) + modifier = modifier.testTag(TestTags.ARCHIVE_RESTORE_SELECTION_NONE) ) } } @@ -272,18 +222,17 @@ private fun SelectionCard( modifier: Modifier = Modifier ) { Card( + onClick = onClick, colors = CardDefaults.cardColors( containerColor = MaterialTheme.colorScheme.surfaceContainerLow ), - modifier = modifier - .fillMaxWidth() - .clickable(onClick = onClick) + modifier = modifier.fillMaxWidth() ) { Row( verticalAlignment = Alignment.CenterVertically, modifier = Modifier.padding(16.dp) ) { - Icon(imageVector = imageVector, contentDescription = null, tint = MaterialTheme.colorScheme.primary, modifier = Modifier.size(32.dp)) + Icon(imageVector = imageVector, contentDescription = null, tint = MaterialTheme.colorScheme.primary, modifier = Modifier.size(48.dp)) Spacer(modifier = Modifier.width(16.dp)) diff --git a/feature/registration/src/main/java/org/signal/registration/screens/restoreselection/ArchiveRestoreSelectionScreenEvents.kt b/feature/registration/src/main/java/org/signal/registration/screens/restoreselection/ArchiveRestoreSelectionScreenEvents.kt index 49069f523b..f580fd916e 100644 --- a/feature/registration/src/main/java/org/signal/registration/screens/restoreselection/ArchiveRestoreSelectionScreenEvents.kt +++ b/feature/registration/src/main/java/org/signal/registration/screens/restoreselection/ArchiveRestoreSelectionScreenEvents.kt @@ -8,8 +8,6 @@ package org.signal.registration.screens.restoreselection sealed class ArchiveRestoreSelectionScreenEvents { data class RestoreOptionSelected(val option: ArchiveRestoreOption) : ArchiveRestoreSelectionScreenEvents() - data object Skip : ArchiveRestoreSelectionScreenEvents() - data object ConfirmSkip : ArchiveRestoreSelectionScreenEvents() data object DismissSkipWarning : ArchiveRestoreSelectionScreenEvents() diff --git a/feature/registration/src/main/java/org/signal/registration/screens/restoreselection/ArchiveRestoreSelectionState.kt b/feature/registration/src/main/java/org/signal/registration/screens/restoreselection/ArchiveRestoreSelectionState.kt index 83a95ceb0b..f2ad7c1f21 100644 --- a/feature/registration/src/main/java/org/signal/registration/screens/restoreselection/ArchiveRestoreSelectionState.kt +++ b/feature/registration/src/main/java/org/signal/registration/screens/restoreselection/ArchiveRestoreSelectionState.kt @@ -16,6 +16,4 @@ data class ArchiveRestoreSelectionState( val storageCapable: Boolean = false ) { override fun toString(): String = "ArchiveRestoreSelectionState(restoreOptions=$restoreOptions, showSkipWarningDialog=$showSkipWarningDialog, restoreMethodToken=${restoreMethodToken?.censor()}, storageCapable=$storageCapable)" - - val showSkipButton: Boolean get() = ArchiveRestoreOption.None !in restoreOptions } diff --git a/feature/registration/src/main/java/org/signal/registration/screens/restoreselection/ArchiveRestoreSelectionViewModel.kt b/feature/registration/src/main/java/org/signal/registration/screens/restoreselection/ArchiveRestoreSelectionViewModel.kt index c9166c64d7..54c8432bb9 100644 --- a/feature/registration/src/main/java/org/signal/registration/screens/restoreselection/ArchiveRestoreSelectionViewModel.kt +++ b/feature/registration/src/main/java/org/signal/registration/screens/restoreselection/ArchiveRestoreSelectionViewModel.kt @@ -102,20 +102,22 @@ class ArchiveRestoreSelectionViewModel( } } } - is ArchiveRestoreSelectionScreenEvents.Skip -> { - state.copy(showSkipWarningDialog = true) - } is ArchiveRestoreSelectionScreenEvents.ConfirmSkip -> { - notifyOldDevice(state.restoreMethodToken, NetworkController.RestoreMethod.DECLINE) - repository.setRestoreDecision(RestoreDecision.SKIPPED) - if (state.storageCapable) { - Log.i(TAG, "[ConfirmSkip] Account is storage capable. Navigating to PIN entry to restore the existing PIN.") - parentEventEmitter.navigateTo(RegistrationRoute.PinEntryForSvrRestore) + if (isPreRegistration) { + parentEventEmitter.navigateTo(RegistrationRoute.PhoneNumberEntry) + state.copy(showSkipWarningDialog = false) } else { - Log.i(TAG, "[ConfirmSkip] Account is not storage capable. Navigating to PIN creation.") - parentEventEmitter.navigateTo(RegistrationRoute.PinCreate) + notifyOldDevice(state.restoreMethodToken, NetworkController.RestoreMethod.DECLINE) + repository.setRestoreDecision(RestoreDecision.SKIPPED) + if (state.storageCapable) { + Log.i(TAG, "[ConfirmSkip] Account is storage capable. Navigating to PIN entry to restore the existing PIN.") + parentEventEmitter.navigateTo(RegistrationRoute.PinEntryForSvrRestore) + } else { + Log.i(TAG, "[ConfirmSkip] Account is not storage capable. Navigating to PIN creation.") + parentEventEmitter.navigateTo(RegistrationRoute.PinCreate) + } + state.copy(showSkipWarningDialog = false) } - state.copy(showSkipWarningDialog = false) } is ArchiveRestoreSelectionScreenEvents.DismissSkipWarning -> { state.copy(showSkipWarningDialog = false) diff --git a/feature/registration/src/main/java/org/signal/registration/test/TestTags.kt b/feature/registration/src/main/java/org/signal/registration/test/TestTags.kt index eef00f7e97..72e59ab58e 100644 --- a/feature/registration/src/main/java/org/signal/registration/test/TestTags.kt +++ b/feature/registration/src/main/java/org/signal/registration/test/TestTags.kt @@ -67,7 +67,7 @@ object TestTags { const val ARCHIVE_RESTORE_SELECTION_FROM_BACKUP_FOLDER = "archive_restore_selection_from_backup_folder" const val ARCHIVE_RESTORE_SELECTION_FROM_BACKUP_FILE = "archive_restore_selection_from_backup_file" const val ARCHIVE_RESTORE_SELECTION_DEVICE_TRANSFER = "archive_restore_selection_device_transfer" - const val ARCHIVE_RESTORE_SELECTION_SKIP = "archive_restore_selection_skip" + const val ARCHIVE_RESTORE_SELECTION_NONE = "archive_restore_selection_none" // Local Backup Restore Screen const val LOCAL_BACKUP_RESTORE_SCREEN = "local_backup_restore_screen" diff --git a/feature/registration/src/main/res/values/strings.xml b/feature/registration/src/main/res/values/strings.xml index 88895fac60..a8d6f05a72 100644 --- a/feature/registration/src/main/res/values/strings.xml +++ b/feature/registration/src/main/res/values/strings.xml @@ -139,8 +139,6 @@ From your old phone Transfer directly from your old Android - - Skip Skip restore? diff --git a/feature/registration/src/test/java/org/signal/registration/screens/restoreselection/ArchiveRestoreSelectionViewModelTest.kt b/feature/registration/src/test/java/org/signal/registration/screens/restoreselection/ArchiveRestoreSelectionViewModelTest.kt index 125c60ebb3..16abbadecb 100644 --- a/feature/registration/src/test/java/org/signal/registration/screens/restoreselection/ArchiveRestoreSelectionViewModelTest.kt +++ b/feature/registration/src/test/java/org/signal/registration/screens/restoreselection/ArchiveRestoreSelectionViewModelTest.kt @@ -174,23 +174,26 @@ class ArchiveRestoreSelectionViewModelTest { assertThat(emittedStates.last().showSkipWarningDialog).isTrue() } - // ==================== Skip Tests ==================== - - @Test - fun `Skip sets showSkipWarningDialog to true`() = runTest { - val viewModel = createViewModel(isPreRegistration = false) - val initialState = ArchiveRestoreSelectionState() - - viewModel.applyEvent(initialState, ArchiveRestoreSelectionScreenEvents.Skip, stateEmitter) - - assertThat(emittedStates).hasSize(1) - assertThat(emittedStates.last().showSkipWarningDialog).isTrue() - } - // ==================== ConfirmSkip Tests ==================== @Test - fun `ConfirmSkip when not storage capable navigates to PinCreate and clears dialog`() = runTest { + fun `ConfirmSkip pre-registration navigates to PhoneNumberEntry and clears dialog without recording a skip`() = runTest { + val viewModel = createViewModel(isPreRegistration = true) + val initialState = ArchiveRestoreSelectionState(showSkipWarningDialog = true) + + viewModel.applyEvent(initialState, ArchiveRestoreSelectionScreenEvents.ConfirmSkip, stateEmitter) + + coVerify(exactly = 0) { mockRepository.setRestoreDecision(any()) } + assertThat(emittedParentEvents).hasSize(1) + assertThat(emittedParentEvents.first()) + .isInstanceOf() + .prop(RegistrationFlowEvent.NavigateToScreen::route) + .isEqualTo(RegistrationRoute.PhoneNumberEntry) + assertThat(emittedStates.last().showSkipWarningDialog).isFalse() + } + + @Test + fun `ConfirmSkip post-registration when not storage capable navigates to PinCreate and clears dialog`() = runTest { val viewModel = createViewModel(isPreRegistration = false) val initialState = ArchiveRestoreSelectionState(showSkipWarningDialog = true, storageCapable = false) @@ -206,7 +209,7 @@ class ArchiveRestoreSelectionViewModelTest { } @Test - fun `ConfirmSkip when storage capable navigates to PinEntryForSvrRestore and clears dialog`() = runTest { + fun `ConfirmSkip post-registration when storage capable navigates to PinEntryForSvrRestore and clears dialog`() = runTest { val viewModel = createViewModel(isPreRegistration = false) val initialState = ArchiveRestoreSelectionState(showSkipWarningDialog = true, storageCapable = true) @@ -248,24 +251,6 @@ class ArchiveRestoreSelectionViewModelTest { assertThat(viewModel.state.value.restoreOptions).isEqualTo(options) } - @Test - fun `showSkipButton is false when None is in options`() = runTest { - val viewModel = createViewModel( - restoreOptions = listOf(ArchiveRestoreOption.SignalSecureBackup, ArchiveRestoreOption.None) - ) - - assertThat(viewModel.state.value.showSkipButton).isFalse() - } - - @Test - fun `showSkipButton is true when None is not in options`() = runTest { - val viewModel = createViewModel( - restoreOptions = listOf(ArchiveRestoreOption.SignalSecureBackup, ArchiveRestoreOption.LocalBackup) - ) - - assertThat(viewModel.state.value.showSkipButton).isTrue() - } - @Test fun `applyParentState copies storageCapable from parent`() = runTest { val viewModel = createViewModel()