mirror of
https://github.com/bitwarden/android.git
synced 2026-08-01 18:53:39 -05:00
BIT-1081: Add log out ability to Vault Unlock screen (#285)
This commit is contained in:
committed by
Álison Fernandes
parent
107ee1c08c
commit
04609b9a86
+29
-1
@@ -38,11 +38,14 @@ import com.x8bit.bitwarden.ui.platform.components.BitwardenAccountSwitcher
|
||||
import com.x8bit.bitwarden.ui.platform.components.BitwardenBasicDialog
|
||||
import com.x8bit.bitwarden.ui.platform.components.BitwardenFilledButton
|
||||
import com.x8bit.bitwarden.ui.platform.components.BitwardenLoadingDialog
|
||||
import com.x8bit.bitwarden.ui.platform.components.BitwardenLogoutConfirmationDialog
|
||||
import com.x8bit.bitwarden.ui.platform.components.BitwardenOverflowActionItem
|
||||
import com.x8bit.bitwarden.ui.platform.components.BitwardenPasswordField
|
||||
import com.x8bit.bitwarden.ui.platform.components.BitwardenScaffold
|
||||
import com.x8bit.bitwarden.ui.platform.components.BitwardenTopAppBar
|
||||
import com.x8bit.bitwarden.ui.platform.components.LoadingDialogState
|
||||
import com.x8bit.bitwarden.ui.platform.components.OverflowMenuItemData
|
||||
import kotlinx.collections.immutable.persistentListOf
|
||||
import kotlinx.collections.immutable.toImmutableList
|
||||
|
||||
/**
|
||||
@@ -76,6 +79,7 @@ fun VaultUnlockScreen(
|
||||
canScroll = { !accountMenuVisible },
|
||||
)
|
||||
|
||||
// Dynamic dialogs
|
||||
when (val dialog = state.dialog) {
|
||||
is VaultUnlockState.VaultUnlockDialog.Error -> BitwardenBasicDialog(
|
||||
visibilityState = BasicDialogState.Shown(
|
||||
@@ -94,6 +98,23 @@ fun VaultUnlockScreen(
|
||||
null -> Unit
|
||||
}
|
||||
|
||||
// Static dialogs
|
||||
var showLogoutConfirmationDialog by remember { mutableStateOf(false) }
|
||||
if (showLogoutConfirmationDialog) {
|
||||
BitwardenLogoutConfirmationDialog(
|
||||
onDismissRequest = { showLogoutConfirmationDialog = false },
|
||||
onConfirmClick = remember(viewModel) {
|
||||
{
|
||||
showLogoutConfirmationDialog = false
|
||||
viewModel.trySendAction(
|
||||
VaultUnlockAction.ConfirmLogoutClick,
|
||||
)
|
||||
}
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
// Content
|
||||
BitwardenScaffold(
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
@@ -109,7 +130,14 @@ fun VaultUnlockScreen(
|
||||
color = state.avatarColor,
|
||||
onClick = { accountMenuVisible = !accountMenuVisible },
|
||||
)
|
||||
BitwardenOverflowActionItem()
|
||||
BitwardenOverflowActionItem(
|
||||
menuItemDataList = persistentListOf(
|
||||
OverflowMenuItemData(
|
||||
text = stringResource(id = R.string.log_out),
|
||||
onClick = { showLogoutConfirmationDialog = true },
|
||||
),
|
||||
),
|
||||
)
|
||||
},
|
||||
)
|
||||
},
|
||||
|
||||
+10
@@ -71,6 +71,7 @@ class VaultUnlockViewModel @Inject constructor(
|
||||
when (action) {
|
||||
VaultUnlockAction.AddAccountClick -> handleAddAccountClick()
|
||||
VaultUnlockAction.DismissDialog -> handleDismissDialog()
|
||||
VaultUnlockAction.ConfirmLogoutClick -> handleConfirmLogoutClick()
|
||||
is VaultUnlockAction.PasswordInputChanged -> handlePasswordInputChanged(action)
|
||||
is VaultUnlockAction.SwitchAccountClick -> handleSwitchAccountClick(action)
|
||||
VaultUnlockAction.UnlockClick -> handleUnlockClick()
|
||||
@@ -88,6 +89,10 @@ class VaultUnlockViewModel @Inject constructor(
|
||||
mutableStateFlow.update { it.copy(dialog = null) }
|
||||
}
|
||||
|
||||
private fun handleConfirmLogoutClick() {
|
||||
authRepository.logout()
|
||||
}
|
||||
|
||||
private fun handlePasswordInputChanged(action: VaultUnlockAction.PasswordInputChanged) {
|
||||
mutableStateFlow.update {
|
||||
it.copy(passwordInput = action.passwordInput)
|
||||
@@ -213,6 +218,11 @@ sealed class VaultUnlockAction {
|
||||
*/
|
||||
data object DismissDialog : VaultUnlockAction()
|
||||
|
||||
/**
|
||||
* The user has clicked on the logout confirmation button.
|
||||
*/
|
||||
data object ConfirmLogoutClick : VaultUnlockAction()
|
||||
|
||||
/**
|
||||
* The user has modified the password input.
|
||||
*/
|
||||
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
package com.x8bit.bitwarden.ui.platform.components
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import com.x8bit.bitwarden.R
|
||||
|
||||
/**
|
||||
* A reusable dialog for confirming whether or not the user wants to log out.
|
||||
*
|
||||
* @param onDismissRequest A callback for when the dialog is requesting dismissal.
|
||||
* @param onConfirmClick A callback for when the log out confirmation button is clicked.
|
||||
*/
|
||||
@Composable
|
||||
fun BitwardenLogoutConfirmationDialog(
|
||||
onDismissRequest: () -> Unit,
|
||||
onConfirmClick: () -> Unit,
|
||||
) {
|
||||
BitwardenTwoButtonDialog(
|
||||
title = stringResource(id = R.string.log_out),
|
||||
message = stringResource(id = R.string.logout_confirmation),
|
||||
confirmButtonText = stringResource(id = R.string.yes),
|
||||
onConfirmClick = onConfirmClick,
|
||||
dismissButtonText = stringResource(id = R.string.cancel),
|
||||
onDismissClick = onDismissRequest,
|
||||
onDismissRequest = onDismissRequest,
|
||||
)
|
||||
}
|
||||
+3
-19
@@ -31,6 +31,7 @@ import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.base.util.EventsEffect
|
||||
import com.x8bit.bitwarden.ui.platform.base.util.IntentHandler
|
||||
import com.x8bit.bitwarden.ui.platform.base.util.Text
|
||||
import com.x8bit.bitwarden.ui.platform.components.BitwardenLogoutConfirmationDialog
|
||||
import com.x8bit.bitwarden.ui.platform.components.BitwardenExternalLinkRow
|
||||
import com.x8bit.bitwarden.ui.platform.components.BitwardenListHeaderText
|
||||
import com.x8bit.bitwarden.ui.platform.components.BitwardenScaffold
|
||||
@@ -39,7 +40,6 @@ import com.x8bit.bitwarden.ui.platform.components.BitwardenSelectionRow
|
||||
import com.x8bit.bitwarden.ui.platform.components.BitwardenTextButton
|
||||
import com.x8bit.bitwarden.ui.platform.components.BitwardenTextRow
|
||||
import com.x8bit.bitwarden.ui.platform.components.BitwardenTopAppBar
|
||||
import com.x8bit.bitwarden.ui.platform.components.BitwardenTwoButtonDialog
|
||||
import com.x8bit.bitwarden.ui.platform.components.BitwardenWideSwitch
|
||||
import com.x8bit.bitwarden.ui.platform.theme.LocalNonMaterialColors
|
||||
import com.x8bit.bitwarden.ui.platform.theme.LocalNonMaterialTypography
|
||||
@@ -76,8 +76,8 @@ fun AccountSecurityScreen(
|
||||
}
|
||||
|
||||
when (state.dialog) {
|
||||
AccountSecurityDialog.ConfirmLogout -> ConfirmLogoutDialog(
|
||||
onDismiss = remember(viewModel) {
|
||||
AccountSecurityDialog.ConfirmLogout -> BitwardenLogoutConfirmationDialog(
|
||||
onDismissRequest = remember(viewModel) {
|
||||
{ viewModel.trySendAction(AccountSecurityAction.DismissDialog) }
|
||||
},
|
||||
onConfirmClick = remember(viewModel) {
|
||||
@@ -286,22 +286,6 @@ fun AccountSecurityScreen(
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun ConfirmLogoutDialog(
|
||||
onDismiss: () -> Unit,
|
||||
onConfirmClick: () -> Unit,
|
||||
) {
|
||||
BitwardenTwoButtonDialog(
|
||||
title = stringResource(id = R.string.log_out),
|
||||
message = stringResource(id = R.string.logout_confirmation),
|
||||
confirmButtonText = stringResource(id = R.string.yes),
|
||||
onConfirmClick = onConfirmClick,
|
||||
dismissButtonText = stringResource(id = R.string.cancel),
|
||||
onDismissClick = onDismiss,
|
||||
onDismissRequest = onDismiss,
|
||||
)
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun FingerPrintPhraseDialog(
|
||||
fingerprintPhrase: Text,
|
||||
|
||||
Reference in New Issue
Block a user