From 62e0ff709cbe8fd055a5b6f5fe1c10a88ca9b37c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andre=CC=81=20Bispo?= Date: Thu, 23 Jul 2026 11:51:35 +0100 Subject: [PATCH 1/5] PM-40805: feat: Rename "Move to vault" to "Move" Repoints the overflow menu item and the destination screen's app-bar title to the existing "move" string resource instead of the removed "move_to_vault" one. The confirm button already read "Move" and needed no change. --- .../ui/vault/feature/addedit/VaultAddEditScreen.kt | 2 +- .../ui/vault/feature/item/VaultItemScreen.kt | 2 +- .../VaultMoveToOrganizationViewModel.kt | 2 +- .../vault/feature/addedit/VaultAddEditScreenTest.kt | 12 ++++++------ .../ui/vault/feature/item/VaultItemScreenTest.kt | 12 ++++++------ .../VaultMoveToOrganizationScreenTest.kt | 12 ++++++++---- ui/src/main/res/values/strings.xml | 1 - 7 files changed, 23 insertions(+), 20 deletions(-) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreen.kt index 9e358ec9633..285868668b0 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreen.kt @@ -372,7 +372,7 @@ fun VaultAddEditScreen( .takeUnless { state.isAddItemMode }, OverflowMenuItemData( text = stringResource( - id = BitwardenString.move_to_vault, + id = BitwardenString.move, ), onClick = { viewModel.trySendAction( diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemScreen.kt index 0aaaa4d169f..290659c7874 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemScreen.kt @@ -202,7 +202,7 @@ fun VaultItemScreen( ) .takeUnless { state.isCipherInCollection }, OverflowMenuItemData( - text = stringResource(id = BitwardenString.move_to_vault), + text = stringResource(id = BitwardenString.move), onClick = { viewModel.trySendAction( VaultItemAction.Common.MoveToOrganizationClick, diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/movetoorganization/VaultMoveToOrganizationViewModel.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/movetoorganization/VaultMoveToOrganizationViewModel.kt index fab657fafc2..1438f3cc8d3 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/movetoorganization/VaultMoveToOrganizationViewModel.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/movetoorganization/VaultMoveToOrganizationViewModel.kt @@ -351,7 +351,7 @@ data class VaultMoveToOrganizationState( get() = if (onlyShowCollections) { BitwardenString.shared_folders.asText() } else { - BitwardenString.move_to_vault.asText() + BitwardenString.move.asText() } val appBarButtonText: Text diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt index 6c631430988..104b1eacdc5 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt @@ -4422,7 +4422,7 @@ class VaultAddEditScreenTest : BitwardenComposeTest() { .assertIsDisplayed() composeTestRule - .onAllNodesWithText("Move to vault") + .onAllNodesWithText("Move") .filterToOne(hasAnyAncestor(isPopup())) .assertDoesNotExist() @@ -4510,7 +4510,7 @@ class VaultAddEditScreenTest : BitwardenComposeTest() { .assertIsDisplayed() composeTestRule - .onAllNodesWithText("Move to vault") + .onAllNodesWithText("Move") .filterToOne(hasAnyAncestor(isPopup())) .assertIsDisplayed() @@ -5181,7 +5181,7 @@ class VaultAddEditScreenTest : BitwardenComposeTest() { // Confirm dropdown version of item is absent composeTestRule - .onAllNodesWithText("Move to vault") + .onAllNodesWithText("Move") .filter(hasAnyAncestor(isPopup())) .assertCountEquals(0) // Open the overflow menu @@ -5191,7 +5191,7 @@ class VaultAddEditScreenTest : BitwardenComposeTest() { // Confirm it does not exist composeTestRule - .onAllNodesWithText("Move to vault") + .onAllNodesWithText("Move") .filterToOne(hasAnyAncestor(isPopup())) .assertIsNotDisplayed() } @@ -5216,7 +5216,7 @@ class VaultAddEditScreenTest : BitwardenComposeTest() { // Confirm dropdown version of item is absent composeTestRule - .onAllNodesWithText("Move to vault") + .onAllNodesWithText("Move") .filter(hasAnyAncestor(isPopup())) .assertCountEquals(0) @@ -5225,7 +5225,7 @@ class VaultAddEditScreenTest : BitwardenComposeTest() { .performClick() composeTestRule - .onAllNodesWithText("Move to vault") + .onAllNodesWithText("Move") .filterToOne(hasAnyAncestor(isPopup())) .assertIsDisplayed() } diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemScreenTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemScreenTest.kt index 539d5033f96..d9e3ee52a21 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemScreenTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemScreenTest.kt @@ -1547,14 +1547,14 @@ class VaultItemScreenTest : BitwardenComposeTest() { // Confirm dropdown version of item is absent composeTestRule - .onAllNodesWithText("Move to vault") + .onAllNodesWithText("Move") .filter(hasAnyAncestor(isPopup())) .assertCountEquals(0) // Open the overflow menu composeTestRule.onNodeWithContentDescription("More options").performClick() // Click on the move to organization hint item in the dropdown composeTestRule - .onAllNodesWithText("Move to vault") + .onAllNodesWithText("Move") .filterToOne(hasAnyAncestor(isPopup())) .performClick() verify { @@ -1574,14 +1574,14 @@ class VaultItemScreenTest : BitwardenComposeTest() { // Confirm dropdown version of item is absent composeTestRule - .onAllNodesWithText("Move to vault") + .onAllNodesWithText("Move") .filter(hasAnyAncestor(isPopup())) .assertCountEquals(0) // Open the overflow menu composeTestRule.onNodeWithContentDescription("More options").performClick() // Confirm it does not exist composeTestRule - .onAllNodesWithText("Move to vault") + .onAllNodesWithText("Move") .filterToOne(hasAnyAncestor(isPopup())) .assertDoesNotExist() } @@ -1696,7 +1696,7 @@ class VaultItemScreenTest : BitwardenComposeTest() { .assertIsDisplayed() composeTestRule - .onAllNodesWithText("Move to vault") + .onAllNodesWithText("Move") .filterToOne(hasAnyAncestor(isPopup())) .assertDoesNotExist() @@ -1724,7 +1724,7 @@ class VaultItemScreenTest : BitwardenComposeTest() { .assertIsDisplayed() composeTestRule - .onAllNodesWithText("Move to vault") + .onAllNodesWithText("Move") .filterToOne(hasAnyAncestor(isPopup())) .assertIsDisplayed() diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/movetoorganization/VaultMoveToOrganizationScreenTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/movetoorganization/VaultMoveToOrganizationScreenTest.kt index dfca141ba9a..5638139f28a 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/movetoorganization/VaultMoveToOrganizationScreenTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/movetoorganization/VaultMoveToOrganizationScreenTest.kt @@ -6,6 +6,7 @@ import androidx.compose.ui.test.assertIsOff import androidx.compose.ui.test.assertIsOn import androidx.compose.ui.test.filterToOne import androidx.compose.ui.test.hasAnyAncestor +import androidx.compose.ui.test.hasClickAction import androidx.compose.ui.test.isDialog import androidx.compose.ui.test.onAllNodesWithText import androidx.compose.ui.test.onLast @@ -60,7 +61,8 @@ class VaultMoveToOrganizationScreenTest : BitwardenComposeTest() { .onNodeWithText(text = "Shared folders") .assertIsNotDisplayed() composeTestRule - .onNodeWithText(text = "Move to vault") + .onAllNodesWithText(text = "Move") + .filterToOne(!hasClickAction()) .assertIsDisplayed() mutableStateFlow.update { currentState -> @@ -68,7 +70,7 @@ class VaultMoveToOrganizationScreenTest : BitwardenComposeTest() { } composeTestRule - .onNodeWithText(text = "Move to vault") + .onNodeWithText(text = "Move") .assertIsNotDisplayed() composeTestRule .onNodeWithText(text = "Shared folders") @@ -85,7 +87,8 @@ class VaultMoveToOrganizationScreenTest : BitwardenComposeTest() { .onNodeWithText(text = "Save") .assertIsNotDisplayed() composeTestRule - .onNodeWithText(text = "Move") + .onAllNodesWithText(text = "Move") + .filterToOne(hasClickAction()) .assertIsDisplayed() mutableStateFlow.update { currentState -> @@ -155,7 +158,8 @@ class VaultMoveToOrganizationScreenTest : BitwardenComposeTest() { @Test fun `clicking move button should send MoveClick action`() { composeTestRule - .onNodeWithText(text = "Move") + .onAllNodesWithText(text = "Move") + .filterToOne(hasClickAction()) .performClick() verify { diff --git a/ui/src/main/res/values/strings.xml b/ui/src/main/res/values/strings.xml index 9ccd65afcf3..6286041d092 100644 --- a/ui/src/main/res/values/strings.xml +++ b/ui/src/main/res/values/strings.xml @@ -341,7 +341,6 @@ Scanning will happen automatically. %1$s moved to %2$s. You must select at least one shared folder. Share - Move to vault No vaults to list. Choose a vault that you wish to move this item to. Moving to another vault transfers ownership of the item to that organization. You will no longer be the direct owner of this item once it has been moved. Number of words From 8af3d44e9bc6786f1077c0e7a73c024dd89e8079 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andre=CC=81=20Bispo?= Date: Thu, 23 Jul 2026 12:13:56 +0100 Subject: [PATCH 2/5] PM-40805: feat: Use "Filter items by vault" for Move dialog title Adds an optional dialogTitle param to BitwardenMultiSelectButton so the selection dialog's title can differ from the field's own label, defaulting to the existing behavior for all other call sites. The Move screen's "Vault" field now shows "Filter items by vault" as the dialog title, matching the Figma design. --- .../movetoorganization/VaultMoveToOrganizationContent.kt | 1 + .../components/dropdown/BitwardenMultiSelectButton.kt | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/movetoorganization/VaultMoveToOrganizationContent.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/movetoorganization/VaultMoveToOrganizationContent.kt index 7017efc94d2..f834598ff43 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/movetoorganization/VaultMoveToOrganizationContent.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/movetoorganization/VaultMoveToOrganizationContent.kt @@ -40,6 +40,7 @@ fun VaultMoveToOrganizationContent( item { BitwardenMultiSelectButton( label = stringResource(id = BitwardenString.vault), + dialogTitle = stringResource(id = BitwardenString.filter_by_vault), options = state .organizations .map { it.name } diff --git a/ui/src/main/kotlin/com/bitwarden/ui/platform/components/dropdown/BitwardenMultiSelectButton.kt b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/dropdown/BitwardenMultiSelectButton.kt index bfed456b2a0..02ae22c35dc 100644 --- a/ui/src/main/kotlin/com/bitwarden/ui/platform/components/dropdown/BitwardenMultiSelectButton.kt +++ b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/dropdown/BitwardenMultiSelectButton.kt @@ -49,6 +49,7 @@ import kotlinx.collections.immutable.toImmutableList * @param isEnabled Whether the button is enabled. * @param cardStyle Indicates the type of card style to be applied. * @param modifier A [Modifier] that you can use to apply custom modifications to the composable. + * @param dialogTitle The title to apply to the dialog (defaults to [label] when `null`). * @param dialogSubtitle The subtitle to apply to the dialog. * @param supportingText An optional supporting text that will appear below the text field. * @param helpData An optional [BitwardenHelpButtonData], representing the help button. @@ -67,6 +68,7 @@ fun BitwardenMultiSelectButton( onOptionSelected: (String) -> Unit, cardStyle: CardStyle?, modifier: Modifier = Modifier, + dialogTitle: String? = null, dialogSubtitle: String? = null, isEnabled: Boolean = true, supportingText: String? = null, @@ -78,6 +80,7 @@ fun BitwardenMultiSelectButton( ) { BitwardenMultiSelectButton( label = label, + dialogTitle = dialogTitle, dialogSubtitle = dialogSubtitle, options = options.map { MultiSelectOption.Row(it) }.toImmutableList(), selectedOption = selectedOption?.let { MultiSelectOption.Row(it) }, @@ -119,6 +122,7 @@ fun BitwardenMultiSelectButton( * @param supportingContent An optional supporting content that will appear below the button. * @param cardStyle Indicates the type of card style to be applied. * @param modifier A [Modifier] that you can use to apply custom modifications to the composable. + * @param dialogTitle The title to apply to the dialog (defaults to [label] when `null`). * @param helpData An optional [BitwardenHelpButtonData], representing the help button. * @param insets Inner padding to be applied withing the card. * @param textFieldTestTag The optional test tag associated with the inner text field. @@ -135,6 +139,7 @@ fun BitwardenMultiSelectButton( onOptionSelected: (MultiSelectOption.Row) -> Unit, cardStyle: CardStyle?, modifier: Modifier = Modifier, + dialogTitle: String? = null, dialogSubtitle: String? = null, isEnabled: Boolean = true, supportingContent: @Composable (ColumnScope.() -> Unit)?, @@ -166,7 +171,7 @@ fun BitwardenMultiSelectButton( if (shouldShowDialog) { BitwardenSelectionDialog( - title = label, + title = dialogTitle ?: label, subTitle = dialogSubtitle, onDismissRequest = { shouldShowDialog = false }, ) { From 35827f74d867d1caf58473982585c640d514b8e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andre=CC=81=20Bispo?= Date: Mon, 27 Jul 2026 12:17:19 +0100 Subject: [PATCH 3/5] PM-40761: feat: Rename "Folders" to "My folders" Adds a new my_folders string and cuts over the Vault list header, item-listing filter header, Settings row, Folders screen title, and the "Move to Folder" bottom sheet title to use it. The old folders string is left in place for now to avoid invalidating in-flight translations. --- .../ui/platform/feature/settings/folders/FoldersScreen.kt | 2 +- .../feature/settings/vault/VaultSettingsScreen.kt | 2 +- .../ui/vault/feature/addedit/VaultAddEditScreen.kt | 2 +- .../vault/feature/itemlisting/VaultItemListingContent.kt | 2 +- .../bitwarden/ui/vault/feature/vault/VaultContent.kt | 2 +- .../ui/vault/feature/addedit/VaultAddEditScreenTest.kt | 8 ++++---- .../feature/itemlisting/VaultItemListingScreenTest.kt | 8 ++++---- ui/src/main/res/values/strings.xml | 1 + 8 files changed, 14 insertions(+), 13 deletions(-) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/folders/FoldersScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/folders/FoldersScreen.kt index 95d9ee1b38d..7a935f232b3 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/folders/FoldersScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/folders/FoldersScreen.kt @@ -75,7 +75,7 @@ fun FoldersScreen( .nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { BitwardenTopAppBar( - title = stringResource(id = BitwardenString.folders), + title = stringResource(id = BitwardenString.my_folders), scrollBehavior = scrollBehavior, navigationIcon = rememberVectorPainter(id = BitwardenDrawable.ic_close), navigationIconContentDescription = stringResource(id = BitwardenString.close), diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultSettingsScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultSettingsScreen.kt index 666c6234652..95e9d519ad9 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultSettingsScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultSettingsScreen.kt @@ -119,7 +119,7 @@ fun VaultSettingsScreen( ) } BitwardenTextRow( - text = stringResource(BitwardenString.folders), + text = stringResource(BitwardenString.my_folders), onClick = { viewModel.trySendAction(VaultSettingsAction.FoldersButtonClick) }, withDivider = false, cardStyle = CardStyle.Top(), diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreen.kt index 285868668b0..fdd9a5497db 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreen.kt @@ -658,7 +658,7 @@ private fun FolderSelectionBottomSheet( mutableStateOf(state.selectedFolder?.name.orEmpty()) } BitwardenModalBottomSheet( - sheetTitle = stringResource(BitwardenString.folders), + sheetTitle = stringResource(BitwardenString.my_folders), onDismiss = handlers.onDismissBottomSheet, topBarActions = { animatedOnDismiss -> BitwardenTextButton( diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingContent.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingContent.kt index 22cdb83ad2c..224787e6540 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingContent.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingContent.kt @@ -169,7 +169,7 @@ fun VaultItemListingContent( item(key = "folders_header") { Spacer(modifier = Modifier.height(height = 12.dp)) BitwardenListHeaderText( - label = stringResource(id = BitwardenString.folders), + label = stringResource(id = BitwardenString.my_folders), supportingLabel = state.displayFolderList.count().toString(), modifier = Modifier .animateItem() diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultContent.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultContent.kt index 3e65ffe88a3..49f3c98fe71 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultContent.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultContent.kt @@ -376,7 +376,7 @@ fun VaultContent( if (state.folderItems.isNotEmpty()) { item(key = "folders_header") { BitwardenListHeaderText( - label = stringResource(id = BitwardenString.folders), + label = stringResource(id = BitwardenString.my_folders), supportingLabel = state.folderItems.count().toString(), modifier = Modifier .animateItem() diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt index 104b1eacdc5..cb4407ebb66 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt @@ -3594,7 +3594,7 @@ class VaultAddEditScreenTest : BitwardenComposeTest() { } composeTestRule - .onNodeWithText("Folders") + .onNodeWithText("My folders") .assertIsDisplayed() composeTestRule @@ -3609,7 +3609,7 @@ class VaultAddEditScreenTest : BitwardenComposeTest() { } composeTestRule - .onNodeWithText("Folders") + .onNodeWithText("My folders") .assertIsDisplayed() composeTestRule @@ -3633,7 +3633,7 @@ class VaultAddEditScreenTest : BitwardenComposeTest() { } composeTestRule - .onNodeWithText("Folders") + .onNodeWithText("My folders") .assertIsDisplayed() composeTestRule @@ -3656,7 +3656,7 @@ class VaultAddEditScreenTest : BitwardenComposeTest() { val newFolderName = "newFolderName" composeTestRule - .onNodeWithText("Folders") + .onNodeWithText("My folders") .assertIsDisplayed() composeTestRule diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingScreenTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingScreenTest.kt index b3873f7f446..9f510565559 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingScreenTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingScreenTest.kt @@ -792,7 +792,7 @@ class VaultItemListingScreenTest : BitwardenComposeTest() { @Test fun `Folders text should be displayed according to state`() { - val folders = "FOLDERS (1)" + val folders = "MY FOLDERS (1)" mutableStateFlow.update { DEFAULT_STATE } composeTestRule .onNodeWithText(text = folders) @@ -822,7 +822,7 @@ class VaultItemListingScreenTest : BitwardenComposeTest() { fun `Folders text count should be displayed according to state`() { mutableStateFlow.update { DEFAULT_STATE } composeTestRule - .onNodeWithText(text = "FOLDERS (1)") + .onNodeWithText(text = "MY FOLDERS (1)") .assertDoesNotExist() mutableStateFlow.update { @@ -837,7 +837,7 @@ class VaultItemListingScreenTest : BitwardenComposeTest() { ) } composeTestRule - .onNodeWithTextAfterScroll(text = "FOLDERS (1)") + .onNodeWithTextAfterScroll(text = "MY FOLDERS (1)") .assertIsDisplayed() mutableStateFlow.update { @@ -867,7 +867,7 @@ class VaultItemListingScreenTest : BitwardenComposeTest() { } composeTestRule - .onNodeWithTextAfterScroll(text = "FOLDERS (3)") + .onNodeWithTextAfterScroll(text = "MY FOLDERS (3)") .assertIsDisplayed() } diff --git a/ui/src/main/res/values/strings.xml b/ui/src/main/res/values/strings.xml index 6286041d092..08ce3511e3a 100644 --- a/ui/src/main/res/values/strings.xml +++ b/ui/src/main/res/values/strings.xml @@ -44,6 +44,7 @@ Master password (required) New master password (required) More options + My folders My vault Name Item name (required) From da1e9ff4833fb1486cff8f87b34066a12054aac2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andre=CC=81=20Bispo?= Date: Mon, 27 Jul 2026 12:23:34 +0100 Subject: [PATCH 4/5] PM-40761: chore: Remove unused folders string MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Deletes the folders string entry now that all references have been repointed to my_folders — verified zero remaining references repo-wide before removing. --- ui/src/main/res/values/strings.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/ui/src/main/res/values/strings.xml b/ui/src/main/res/values/strings.xml index 08ce3511e3a..615d2d9c9fd 100644 --- a/ui/src/main/res/values/strings.xml +++ b/ui/src/main/res/values/strings.xml @@ -24,7 +24,6 @@ New folder created. Folder deleted. No Folder - Folders Folder saved Hide Please connect to the internet before continuing. From fb05fc97a0bd8afb68bf9c6ed84e55c2397da1d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andre=CC=81=20Bispo?= Date: Mon, 27 Jul 2026 15:28:57 +0100 Subject: [PATCH 5/5] PM-40761: feat: Rename item's "Folder" field label to "My folder" Adds a new my_folder string and cuts over the Add/Edit item screen's folder selection field to use it. The "Folder" item-type entry in the create-new picker (CreateVaultItemType) keeps the original folder string since it names a type, not a possessive field. --- .../ui/vault/feature/addedit/VaultAddEditItemContent.kt | 2 +- .../ui/vault/feature/addedit/VaultAddEditScreenTest.kt | 6 +++--- ui/src/main/res/values/strings.xml | 1 + 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditItemContent.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditItemContent.kt index 7f1eb83fec9..6f6ba0d5094 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditItemContent.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditItemContent.kt @@ -184,7 +184,7 @@ fun CoachMarkScope.VaultAddEditContent( item { Spacer(modifier = Modifier.height(height = 8.dp)) BitwardenTextSelectionButton( - label = stringResource(id = BitwardenString.folder), + label = stringResource(id = BitwardenString.my_folder), selectedOption = state.common.selectedFolder?.name, onClick = commonTypeHandlers.onSelectOrAddFolderForItem, cardStyle = if (isAddItemMode && state.common.hasOrganizations) { diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt index cb4407ebb66..bda55111b01 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt @@ -3560,7 +3560,7 @@ class VaultAddEditScreenTest : BitwardenComposeTest() { // Opens the menu composeTestRule - .onNodeWithContentDescriptionAfterScroll(label = "No Folder. Folder") + .onNodeWithContentDescriptionAfterScroll(label = "No Folder. My folder") .performClick() verify { @@ -3575,7 +3575,7 @@ class VaultAddEditScreenTest : BitwardenComposeTest() { updateStateWithFolders() composeTestRule - .onNodeWithContentDescriptionAfterScroll(label = "No Folder. Folder") + .onNodeWithContentDescriptionAfterScroll(label = "No Folder. My folder") .assertIsDisplayed() mutableStateFlow.update { currentState -> @@ -3583,7 +3583,7 @@ class VaultAddEditScreenTest : BitwardenComposeTest() { } composeTestRule - .onNodeWithContentDescriptionAfterScroll(label = "mockFolderName-1. Folder") + .onNodeWithContentDescriptionAfterScroll(label = "mockFolderName-1. My folder") .assertIsDisplayed() } diff --git a/ui/src/main/res/values/strings.xml b/ui/src/main/res/values/strings.xml index 615d2d9c9fd..fc95c3df0d7 100644 --- a/ui/src/main/res/values/strings.xml +++ b/ui/src/main/res/values/strings.xml @@ -43,6 +43,7 @@ Master password (required) New master password (required) More options + My folder My folders My vault Name