From f533ad1533264d42db5e83ecdaef26969a45cb0f Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Thu, 26 Mar 2026 16:14:50 -0300 Subject: [PATCH] Update copy for backup education screen. --- .../MessageBackupsFlowFragment.kt | 7 +- .../MessageBackupsKeyEducationScreen.kt | 70 +++++++++++++++---- .../app/backups/local/LocalBackupsFragment.kt | 8 ++- app/src/main/res/values/strings.xml | 2 + 4 files changed, 72 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsFlowFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsFlowFragment.kt index 7b70b5d34d..c73b342389 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsFlowFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsFlowFragment.kt @@ -142,7 +142,12 @@ class MessageBackupsFlowFragment : ComposeFragment(), InAppPaymentCheckoutDelega composable(route = MessageBackupsStage.Route.BACKUP_KEY_EDUCATION.name) { MessageBackupsKeyEducationScreen( onNavigationClick = viewModel::goToPreviousStage, - onNextClick = viewModel::goToNextStage + onNextClick = viewModel::goToNextStage, + mode = if (SignalStore.backup.newLocalBackupsEnabled) { + MessageBackupsKeyEducationScreenMode.REMOTE_WITH_LOCAL_ENABLED + } else { + MessageBackupsKeyEducationScreenMode.DEFAULT + } ) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsKeyEducationScreen.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsKeyEducationScreen.kt index a18365b69a..103563b453 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsKeyEducationScreen.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsKeyEducationScreen.kt @@ -50,9 +50,9 @@ import org.signal.core.ui.R as CoreUiR enum class MessageBackupsKeyEducationScreenMode { /** - * Displayed when the user is enabling remote backups and does not have unified local backups enabled + * Displayed when the user is enabling remote backups, or local backups without remote enabled. */ - REMOTE_BACKUP_WITH_LOCAL_DISABLED, + DEFAULT, /** * Displayed when the user is upgrading legacy to unified local backup @@ -60,9 +60,14 @@ enum class MessageBackupsKeyEducationScreenMode { LOCAL_BACKUP_UPGRADE, /** - * Displayed when the user has unified local backup and is enabling remote backups + * Displayed when the user has remote backups enabled and is enabling local backups */ - REMOTE_BACKUP_WITH_LOCAL_ENABLED + LOCAL_WITH_REMOTE_ENABLED, + + /** + * Displayed when the user has local backups enabled and is enabling remote backups + */ + REMOTE_WITH_LOCAL_ENABLED } /** @@ -72,7 +77,7 @@ enum class MessageBackupsKeyEducationScreenMode { fun MessageBackupsKeyEducationScreen( onNavigationClick: () -> Unit = {}, onNextClick: () -> Unit = {}, - mode: MessageBackupsKeyEducationScreenMode = MessageBackupsKeyEducationScreenMode.REMOTE_BACKUP_WITH_LOCAL_DISABLED + mode: MessageBackupsKeyEducationScreenMode = MessageBackupsKeyEducationScreenMode.DEFAULT ) { val scrollState = rememberScrollState() @@ -105,14 +110,19 @@ fun MessageBackupsKeyEducationScreen( ) when (mode) { - MessageBackupsKeyEducationScreenMode.REMOTE_BACKUP_WITH_LOCAL_DISABLED -> { + MessageBackupsKeyEducationScreenMode.DEFAULT -> { RemoteBackupWithLocalDisabledInfo() } MessageBackupsKeyEducationScreenMode.LOCAL_BACKUP_UPGRADE -> { LocalBackupUpgradeInfo() } - MessageBackupsKeyEducationScreenMode.REMOTE_BACKUP_WITH_LOCAL_ENABLED -> { + + MessageBackupsKeyEducationScreenMode.LOCAL_WITH_REMOTE_ENABLED -> { + LocalBackupWithRemoteEnabledInfo() + } + + MessageBackupsKeyEducationScreenMode.REMOTE_WITH_LOCAL_ENABLED -> { RemoteBackupWithLocalEnabledInfo() } } @@ -145,9 +155,8 @@ fun MessageBackupsKeyEducationScreen( @Composable private fun getTitleText(mode: MessageBackupsKeyEducationScreenMode): String { return when (mode) { - MessageBackupsKeyEducationScreenMode.REMOTE_BACKUP_WITH_LOCAL_DISABLED -> stringResource(R.string.MessageBackupsKeyEducationScreen__your_backup_key) MessageBackupsKeyEducationScreenMode.LOCAL_BACKUP_UPGRADE -> stringResource(R.string.MessageBackupsKeyEducationScreen__your_new_recovery_key) - MessageBackupsKeyEducationScreenMode.REMOTE_BACKUP_WITH_LOCAL_ENABLED -> stringResource(R.string.MessageBackupsKeyEducationScreen__your_recovery_key) + else -> stringResource(R.string.MessageBackupsKeyEducationScreen__your_recovery_key) } } @@ -176,6 +185,31 @@ private fun LocalBackupUpgradeInfo() { } } +@Composable +private fun LocalBackupWithRemoteEnabledInfo() { + val normalText = stringResource(R.string.MessageBackupsKeyEducationScreen__remote_backup_with_local_enabled_description) + val boldText = stringResource(R.string.MessageBackupsKeyEducationScreen__local_backup_with_remote_enabled_description_bold) + + DescriptionText( + normalText = normalText, + boldText = boldText + ) + + UseThisKeyToContainer { + UseThisKeyToRow( + icon = ImageVector.vectorResource(R.drawable.symbol_folder_24), + text = stringResource(R.string.MessageBackupsKeyEducationScreen__restore_on_device_backup) + ) + + Spacer(modifier = Modifier.padding(vertical = 16.dp)) + + UseThisKeyToRow( + icon = ImageVector.vectorResource(CoreUiR.drawable.symbol_backup_24), + text = stringResource(R.string.MessageBackupsKeyEducationScreen__restore_your_signal_secure_backup) + ) + } +} + @Composable private fun RemoteBackupWithLocalEnabledInfo() { val normalText = stringResource(R.string.MessageBackupsKeyEducationScreen__remote_backup_with_local_enabled_description) @@ -313,10 +347,10 @@ private fun InfoRow(@DrawableRes iconId: Int, @StringRes textId: Int) { @DayNightPreviews @Composable -private fun MessageBackupsKeyEducationScreenRemoteBackupWithLocalDisabledPreview() { +private fun MessageBackupsKeyEducationScreenDefaultPreview() { Previews.Preview { MessageBackupsKeyEducationScreen( - mode = MessageBackupsKeyEducationScreenMode.REMOTE_BACKUP_WITH_LOCAL_DISABLED + mode = MessageBackupsKeyEducationScreenMode.DEFAULT ) } } @@ -333,10 +367,20 @@ private fun MessageBackupsKeyEducationScreenLocalBackupUpgradePreview() { @DayNightPreviews @Composable -private fun MessageBackupsKeyEducationScreenRemoteBackupWithLocalEnabledPreview() { +private fun MessageBackupsKeyEducationScreenLocalBackupWithRemoteEnabledPreview() { Previews.Preview { MessageBackupsKeyEducationScreen( - mode = MessageBackupsKeyEducationScreenMode.REMOTE_BACKUP_WITH_LOCAL_ENABLED + mode = MessageBackupsKeyEducationScreenMode.LOCAL_WITH_REMOTE_ENABLED + ) + } +} + +@DayNightPreviews +@Composable +private fun MessageBackupsKeyEducationScreenRemoteBackupWithLocalEnabledPreview() { + Previews.Preview { + MessageBackupsKeyEducationScreen( + mode = MessageBackupsKeyEducationScreenMode.REMOTE_WITH_LOCAL_ENABLED ) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/local/LocalBackupsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/local/LocalBackupsFragment.kt index 0c1f08703e..bf5ee39cff 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/local/LocalBackupsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/local/LocalBackupsFragment.kt @@ -110,7 +110,13 @@ class LocalBackupsFragment : ComposeFragment() { MessageBackupsKeyEducationScreen( onNavigationClick = { backPressedDispatcher?.onBackPressedDispatcher?.onBackPressed() }, onNextClick = { backstack.add(LocalBackupsNavKey.RECORD_RECOVERY_KEY) }, - mode = MessageBackupsKeyEducationScreenMode.LOCAL_BACKUP_UPGRADE + mode = if (args.triggerUpdateFlow) { + MessageBackupsKeyEducationScreenMode.LOCAL_BACKUP_UPGRADE + } else if (SignalStore.backup.areBackupsEnabled) { + MessageBackupsKeyEducationScreenMode.LOCAL_WITH_REMOTE_ENABLED + } else { + MessageBackupsKeyEducationScreenMode.DEFAULT + } ) } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index dce94e0216..73790c6e69 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -8950,6 +8950,8 @@ Your recovery key is a 64-character code that lets you restore your backups when you re-install Signal. This is the same as your on-device recovery key. + + This is the same as your Signal Secure Backups recovery key. Use this key to: