From 9213ad288252e4250c4755ad1d4f890e1c1b3d7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andre=CC=81=20Bispo?= Date: Thu, 7 Nov 2024 16:57:35 +0000 Subject: [PATCH] [PM-11304] Select owner and collection if creating cipher from an org folder --- .../feature/addedit/VaultAddEditViewModel.kt | 3 +++ .../addedit/util/CipherViewExtensions.kt | 17 +++++++++++++---- .../itemlisting/VaultItemListingViewModel.kt | 8 ++++++++ 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt index 7d1bf8383d..bc35183f64 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt @@ -110,6 +110,7 @@ class VaultAddEditViewModel @Inject constructor( ?: run { val vaultAddEditType = VaultAddEditArgs(savedStateHandle).vaultAddEditType val selectedFolderId = VaultAddEditArgs(savedStateHandle).selectedFolderId + val selectedCollectionId = VaultAddEditArgs(savedStateHandle).selectedCollectionId val isIndividualVaultDisabled = policyManager .getActivePolicies(type = PolicyTypeJson.PERSONAL_OWNERSHIP) .any() @@ -154,6 +155,7 @@ class VaultAddEditViewModel @Inject constructor( ?: VaultAddEditState.ViewState.Content( common = VaultAddEditState.ViewState.Content.Common( selectedFolderId = selectedFolderId, + selectedCollectionId = selectedCollectionId, ), isIndividualVaultDisabled = isIndividualVaultDisabled, type = vaultAddEditType.vaultItemCipherType.toItemType(), @@ -2099,6 +2101,7 @@ data class VaultAddEditState( val favorite: Boolean = false, val customFieldData: List = emptyList(), val notes: String = "", + val selectedCollectionId: String? = null, val selectedFolderId: String? = null, val availableFolders: List = emptyList(), val selectedOwnerId: String? = null, diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/util/CipherViewExtensions.kt b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/util/CipherViewExtensions.kt index 5a568beb91..318cd8f9e3 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/util/CipherViewExtensions.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/util/CipherViewExtensions.kt @@ -127,17 +127,23 @@ fun VaultAddEditState.ViewState.appendFolderAndOwnerData( common = currentContentState.common.copy( selectedFolderId = folderViewList.toSelectedFolderId( cipherView = currentContentState.common.originalCipher, - ) ?: currentContentState.common.selectedFolderId, + ) + ?: currentContentState.common.selectedFolderId, availableFolders = folderViewList.toAvailableFolders( resourceManager = resourceManager, ), selectedOwnerId = activeAccount.toSelectedOwnerId( cipherView = currentContentState.common.originalCipher, - ), + ) + ?: collectionViewList.firstOrNull { + it.id == currentContentState.common.selectedCollectionId + } + ?.organizationId, availableOwners = activeAccount.toAvailableOwners( collectionViewList = collectionViewList, cipherView = currentContentState.common.originalCipher, isIndividualVaultDisabled = isIndividualVaultDisabled, + selectedCollectionId = currentContentState.common.selectedCollectionId, ), isUnlockWithPasswordEnabled = activeAccount.hasMasterPassword, hasOrganizations = activeAccount.organizations.isNotEmpty(), @@ -192,6 +198,7 @@ private fun UserState.Account.toAvailableOwners( collectionViewList: List, cipherView: CipherView?, isIndividualVaultDisabled: Boolean, + selectedCollectionId: String? = null, ): List = listOfNotNull( VaultAddEditState.Owner( @@ -214,9 +221,11 @@ private fun UserState.Account.toAvailableOwners( VaultCollection( id = collection.id.orEmpty(), name = collection.name, - isSelected = cipherView + isSelected = (cipherView ?.collectionIds - ?.contains(collection.id) == true, + ?.contains(collection.id)) + ?: (selectedCollectionId != null && + collection.id == selectedCollectionId), ) }, ) diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModel.kt b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModel.kt index 8aa633aa93..35099e6027 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModel.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModel.kt @@ -541,6 +541,13 @@ class VaultItemListingViewModel @Inject constructor( ) } + is VaultItemListingState.ItemListingType.Vault.Collection -> { + VaultItemListingEvent.NavigateToAddVaultItem( + vaultItemCipherType = itemListingType.toVaultItemCipherType(), + selectedCollectionId = itemListingType.collectionId, + ) + } + is VaultItemListingState.ItemListingType.Vault -> { VaultItemListingEvent.NavigateToAddVaultItem( vaultItemCipherType = itemListingType.toVaultItemCipherType(), @@ -2158,6 +2165,7 @@ sealed class VaultItemListingEvent { data class NavigateToAddVaultItem( val vaultItemCipherType: VaultItemCipherType, val selectedFolderId: String? = null, + val selectedCollectionId: String? = null, ) : VaultItemListingEvent() /**