diff --git a/app/src/main/kotlin/com/bitwarden/authenticator/ui/platform/feature/settings/SettingsScreen.kt b/app/src/main/kotlin/com/bitwarden/authenticator/ui/platform/feature/settings/SettingsScreen.kt index 13134754fc..5924bfd1c6 100644 --- a/app/src/main/kotlin/com/bitwarden/authenticator/ui/platform/feature/settings/SettingsScreen.kt +++ b/app/src/main/kotlin/com/bitwarden/authenticator/ui/platform/feature/settings/SettingsScreen.kt @@ -91,6 +91,12 @@ fun SettingsScreen( SettingsEvent.NavigateToTutorial -> onNavigateToTutorial() SettingsEvent.NavigateToExport -> onNavigateToExport() SettingsEvent.NavigateToImport -> onNavigateToImport() + SettingsEvent.NavigateToBackup -> { + intentManager.launchUri( + uri = "https://support.google.com/android/answer/2819582".toUri(), + ) + } + SettingsEvent.NavigateToHelpCenter -> { intentManager.launchUri("https://bitwarden.com/help".toUri()) } @@ -133,14 +139,19 @@ fun SettingsScreen( VaultSettings( onExportClick = remember(viewModel) { { - viewModel.trySendAction(SettingsAction.VaultClick.ExportClick) + viewModel.trySendAction(SettingsAction.DataClick.ExportClick) } }, onImportClick = remember(viewModel) { { - viewModel.trySendAction(SettingsAction.VaultClick.ImportClick) + viewModel.trySendAction(SettingsAction.DataClick.ImportClick) } }, + onBackupClick = remember(viewModel) { + { + viewModel.trySendAction(SettingsAction.DataClick.BackupClick) + } + } ) Spacer(modifier = Modifier.height(16.dp)) AppearanceSettings( @@ -230,17 +241,18 @@ fun SecuritySettings( //endregion -//region Vault settings +//region Data settings @Composable fun VaultSettings( modifier: Modifier = Modifier, onExportClick: () -> Unit, onImportClick: () -> Unit, + onBackupClick: () -> Unit, ) { BitwardenListHeaderText( modifier = Modifier.padding(horizontal = 16.dp), - label = stringResource(id = R.string.vault) + label = stringResource(id = R.string.data) ) Spacer(modifier = Modifier.height(8.dp)) BitwardenTextRow( @@ -276,6 +288,15 @@ fun VaultSettings( ) } ) + Spacer(modifier = Modifier.height(8.dp)) + BitwardenExternalLinkRow( + text = stringResource(R.string.backup), + onConfirmClick = onBackupClick, + dialogTitle = stringResource(R.string.data_backup_title), + dialogMessage = stringResource(R.string.data_backup_message), + dialogConfirmButtonText = stringResource(R.string.learn_more), + dialogDismissButtonText = stringResource(R.string.ok), + ) } @Composable @@ -313,7 +334,7 @@ private fun UnlockWithBiometricsRow( ) } -//endregion Vault settings +//endregion Data settings //region Appearance settings diff --git a/app/src/main/kotlin/com/bitwarden/authenticator/ui/platform/feature/settings/SettingsViewModel.kt b/app/src/main/kotlin/com/bitwarden/authenticator/ui/platform/feature/settings/SettingsViewModel.kt index e216d7f229..4c8174ff62 100644 --- a/app/src/main/kotlin/com/bitwarden/authenticator/ui/platform/feature/settings/SettingsViewModel.kt +++ b/app/src/main/kotlin/com/bitwarden/authenticator/ui/platform/feature/settings/SettingsViewModel.kt @@ -51,7 +51,7 @@ class SettingsViewModel @Inject constructor( handleSecurityClick(action) } - is SettingsAction.VaultClick -> { + is SettingsAction.DataClick -> { handleVaultClick(action) } @@ -125,10 +125,11 @@ class SettingsViewModel @Inject constructor( } } - private fun handleVaultClick(action: SettingsAction.VaultClick) { + private fun handleVaultClick(action: SettingsAction.DataClick) { when (action) { - SettingsAction.VaultClick.ExportClick -> handleExportClick() - SettingsAction.VaultClick.ImportClick -> handleImportClick() + SettingsAction.DataClick.ExportClick -> handleExportClick() + SettingsAction.DataClick.ImportClick -> handleImportClick() + SettingsAction.DataClick.BackupClick -> handleBackupClick() } } @@ -140,6 +141,10 @@ class SettingsViewModel @Inject constructor( sendEvent(SettingsEvent.NavigateToImport) } + private fun handleBackupClick() { + sendEvent(SettingsEvent.NavigateToBackup) + } + private fun handleAppearanceChange(action: SettingsAction.AppearanceChange) { when (action) { is SettingsAction.AppearanceChange.LanguageChange -> { @@ -298,6 +303,11 @@ sealed class SettingsEvent { */ data object NavigateToImport : SettingsEvent() + /** + * Navigate to the Backup web page. + */ + data object NavigateToBackup : SettingsEvent() + /** * Navigate to the Help Center web page. */ @@ -322,7 +332,7 @@ sealed class SettingsAction( sealed class Dialog { /** - * + * Display the loading screen with a [message]. */ data class Loading( val message: Text, @@ -339,17 +349,22 @@ sealed class SettingsAction( /** * Models actions for the Vault section of settings. */ - sealed class VaultClick : SettingsAction() { + sealed class DataClick : SettingsAction() { /** * Indicates the user clicked export. */ - data object ExportClick : VaultClick() + data object ExportClick : DataClick() /** * Indicates the user clicked import. */ - data object ImportClick : VaultClick() + data object ImportClick : DataClick() + + /** + * Indicates the user click backup. + */ + data object BackupClick : DataClick() } /** diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 565d470175..8e63748660 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -80,7 +80,7 @@ Item deleted Delete Do you really want to permanently delete? This cannot be undone. - Vault + Data Export Loading Confirm export @@ -115,4 +115,8 @@ Save as a favorite Favorite Favorites + Backup + Data backup + Bitwarden Authenticator data is backed up and can be restored with your regularly scheduled device backups. + Learn more