From e9fb28d37452aa40d99a17ff51efd27038ac1ae3 Mon Sep 17 00:00:00 2001
From: Patrick Honkonen <1883101+SaintPatrck@users.noreply.github.com>
Date: Wed, 22 May 2024 18:11:48 -0400
Subject: [PATCH] [BWA-18] Add Backup option to settings (#103)
---
.../feature/settings/SettingsScreen.kt | 31 ++++++++++++++++---
.../feature/settings/SettingsViewModel.kt | 31 ++++++++++++++-----
app/src/main/res/values/strings.xml | 6 +++-
3 files changed, 54 insertions(+), 14 deletions(-)
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