Add the UI for the overflow menu (#570)

This commit is contained in:
David Perez
2024-01-10 22:17:36 -06:00
committed by Álison Fernandes
parent e84e69b666
commit 0aa24d73d9
4 changed files with 244 additions and 0 deletions

View File

@@ -25,11 +25,14 @@ import com.x8bit.bitwarden.ui.platform.components.BitwardenBasicDialog
import com.x8bit.bitwarden.ui.platform.components.BitwardenErrorContent
import com.x8bit.bitwarden.ui.platform.components.BitwardenLoadingContent
import com.x8bit.bitwarden.ui.platform.components.BitwardenLoadingDialog
import com.x8bit.bitwarden.ui.platform.components.BitwardenOverflowActionItem
import com.x8bit.bitwarden.ui.platform.components.BitwardenScaffold
import com.x8bit.bitwarden.ui.platform.components.BitwardenTextButton
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 com.x8bit.bitwarden.ui.tools.feature.send.addsend.handlers.AddSendHandlers
import kotlinx.collections.immutable.persistentListOf
/**
* Displays new send UX.
@@ -86,6 +89,40 @@ fun AddSendScreen(
{ viewModel.trySendAction(AddSendAction.SaveClick) }
},
)
if (!state.isAddMode) {
BitwardenOverflowActionItem(
menuItemDataList = persistentListOf(
OverflowMenuItemData(
text = stringResource(id = R.string.remove_password),
onClick = remember(viewModel) {
{
viewModel.trySendAction(
AddSendAction.RemovePasswordClick,
)
}
},
),
OverflowMenuItemData(
text = stringResource(id = R.string.copy_link),
onClick = remember(viewModel) {
{ viewModel.trySendAction(AddSendAction.CopyLinkClick) }
},
),
OverflowMenuItemData(
text = stringResource(id = R.string.share_link),
onClick = remember(viewModel) {
{ viewModel.trySendAction(AddSendAction.ShareLinkClick) }
},
),
OverflowMenuItemData(
text = stringResource(id = R.string.delete),
onClick = remember(viewModel) {
{ viewModel.trySendAction(AddSendAction.DeleteClick) }
},
),
),
)
}
},
)
},

View File

@@ -93,6 +93,10 @@ class AddSendViewModel @Inject constructor(
}
override fun handleAction(action: AddSendAction): Unit = when (action) {
AddSendAction.CopyLinkClick -> handleCopyLinkClick()
AddSendAction.DeleteClick -> handleDeleteClick()
AddSendAction.RemovePasswordClick -> handleRemovePasswordClick()
AddSendAction.ShareLinkClick -> handleShareLinkClick()
is AddSendAction.CloseClick -> handleCloseClick()
is AddSendAction.DeletionDateChange -> handleDeletionDateChange(action)
is AddSendAction.ExpirationDateChange -> handleExpirationDateChange(action)
@@ -150,6 +154,26 @@ class AddSendViewModel @Inject constructor(
}
}
private fun handleCopyLinkClick() {
// TODO Add copy link support (BIT-1435)
sendEvent(AddSendEvent.ShowToast("Not yet implemented"))
}
private fun handleDeleteClick() {
// TODO Add deletion support (BIT-1435)
sendEvent(AddSendEvent.ShowToast("Not yet implemented"))
}
private fun handleRemovePasswordClick() {
// TODO Add remove password support (BIT-1435)
sendEvent(AddSendEvent.ShowToast("Not yet implemented"))
}
private fun handleShareLinkClick() {
// TODO Add share link support (BIT-1435)
sendEvent(AddSendEvent.ShowToast("Not yet implemented"))
}
private fun handlePasswordChange(action: AddSendAction.PasswordChange) {
updateCommonContent {
it.copy(passwordInput = action.input)
@@ -348,6 +372,11 @@ data class AddSendState(
is AddSendType.EditItem -> R.string.edit_send.asText()
}
/**
* Helper to determine if the UI should display the content in add send mode.
*/
val isAddMode: Boolean get() = addSendType is AddSendType.AddItem
/**
* Represents the specific view states for the [AddSendScreen].
*/
@@ -463,6 +492,26 @@ sealed class AddSendEvent {
*/
sealed class AddSendAction {
/**
* User clicked the remove password button.
*/
data object RemovePasswordClick : AddSendAction()
/**
* User clicked the copy link button.
*/
data object CopyLinkClick : AddSendAction()
/**
* User clicked the share link button.
*/
data object ShareLinkClick : AddSendAction()
/**
* User clicked the delete button.
*/
data object DeleteClick : AddSendAction()
/**
* User clicked the close button.
*/