[BWA-18] Add Backup option to settings (#103)

This commit is contained in:
Patrick Honkonen
2024-05-22 18:11:48 -04:00
committed by GitHub
parent 1161c3c446
commit e9fb28d374
3 changed files with 54 additions and 14 deletions

View File

@@ -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

View File

@@ -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()
}
/**

View File

@@ -80,7 +80,7 @@
<string name="item_deleted">Item deleted</string>
<string name="delete">Delete</string>
<string name="do_you_really_want_to_permanently_delete_cipher">Do you really want to permanently delete? This cannot be undone.</string>
<string name="vault">Vault</string>
<string name="data">Data</string>
<string name="export">Export</string>
<string name="loading">Loading</string>
<string name="export_confirmation_title">Confirm export</string>
@@ -115,4 +115,8 @@
<string name="favorite_tooltip">Save as a favorite</string>
<string name="favorite">Favorite</string>
<string name="favorites">Favorites</string>
<string name="backup">Backup</string>
<string name="data_backup_title">Data backup</string>
<string name="data_backup_message">Bitwarden Authenticator data is backed up and can be restored with your regularly scheduled device backups.</string>
<string name="learn_more">Learn more</string>
</resources>