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()