From 1d73bbd440182a334d617cbeb46756fc89621da9 Mon Sep 17 00:00:00 2001 From: Patrick Honkonen <1883101+SaintPatrck@users.noreply.github.com> Date: Tue, 13 May 2025 11:13:32 -0400 Subject: [PATCH] [PM-21585] Display item folder location when only in a single folder (#5184) --- .../feature/item/component/ItemHeader.kt | 57 +++++++++++++++++-- 1 file changed, 51 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/item/component/ItemHeader.kt b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/item/component/ItemHeader.kt index f18fc10f8e..d13e4e92b7 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/item/component/ItemHeader.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/item/component/ItemHeader.kt @@ -202,6 +202,28 @@ fun LazyListScope.itemHeader( return } + // When the item is assigned to a single folder and not a collection we display the folder name. + if (folderLocations.isNotEmpty() && collectionLocations.isEmpty()) { + val folderLocation = folderLocations.first() + item(key = "folder") { + ItemLocationListItem( + vectorPainter = rememberVectorPainter(folderLocation.icon), + iconTestTag = "ItemLocationIcon", + text = folderLocation.name, + modifier = Modifier + .fillMaxWidth() + .standardHorizontalMargin() + .animateItem() + .cardStyle( + cardStyle = CardStyle.Bottom, + paddingVertical = 0.dp, + paddingHorizontal = 16.dp, + ), + ) + } + return + } + // When the item is assigned to multiple collections we only display the first collection by // default and collapse the remaining locations. collectionLocations.firstOrNull() @@ -348,7 +370,7 @@ private fun LazyItemScope.ItemLocationListItem( //region Previews @Composable @Preview -private fun ItemHeader_LocalIcon_Preview() { +private fun ItemHeaderWithLocalIcon_Preview() { var isExpanded by remember { mutableStateOf(false) } BitwardenTheme { LazyColumn { @@ -369,7 +391,7 @@ private fun ItemHeader_LocalIcon_Preview() { @Composable @Preview -private fun ItemHeader_NetworkIcon_Preview() { +private fun ItemHeaderWithNetworkIcon_Preview() { var isExpanded by remember { mutableStateOf(false) } BitwardenTheme { LazyColumn { @@ -391,7 +413,7 @@ private fun ItemHeader_NetworkIcon_Preview() { @Composable @Preview -private fun ItemHeader_Organization_Preview() { +private fun ItemHeaderWithOrganization_Preview() { var isExpanded by remember { mutableStateOf(false) } BitwardenTheme { LazyColumn { @@ -414,7 +436,7 @@ private fun ItemHeader_Organization_Preview() { @Composable @Preview -private fun ItemNameField_Org_SingleCollection_Preview() { +private fun ItemHeaderWithOrgAndSingleCollection_Preview() { var isExpanded by remember { mutableStateOf(false) } BitwardenTheme { LazyColumn { @@ -438,7 +460,7 @@ private fun ItemNameField_Org_SingleCollection_Preview() { @Composable @Preview -private fun ItemNameField_Org_MultiCollection_Preview() { +private fun ItemHeaderWithOrgAndMultiCollection_Preview() { var isExpanded by remember { mutableStateOf(false) } BitwardenTheme { LazyColumn { @@ -463,7 +485,7 @@ private fun ItemNameField_Org_MultiCollection_Preview() { @Composable @Preview -private fun ItemNameField_Org_SingleCollection_Folder_Preview() { +private fun ItemHeaderWithOrgSingleCollectionAndFolder_Preview() { var isExpanded by remember { mutableStateOf(false) } BitwardenTheme { LazyColumn { @@ -485,4 +507,27 @@ private fun ItemNameField_Org_SingleCollection_Folder_Preview() { } } } + +@Composable +@Preview +private fun ItemHeaderFolderOnly_Preview() { + var isExpanded by remember { mutableStateOf(false) } + BitwardenTheme { + LazyColumn { + itemHeader( + value = "SSH key in a folder", + isFavorite = true, + iconData = IconData.Local( + iconRes = R.drawable.ic_ssh_key, + ), + relatedLocations = persistentListOf( + VaultItemLocation.Folder("Competition"), + ), + isExpanded = isExpanded, + onExpandClick = { isExpanded = !isExpanded }, + applyIconBackground = true, + ) + } + } +} //endregion Previews