diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModel.kt b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModel.kt index 62263aea8c..4db0f87c8a 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModel.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModel.kt @@ -347,21 +347,6 @@ class VaultItemViewModel @Inject constructor( ) return@onContent } - mutableStateFlow.update { currentState -> - currentState.copy( - viewState = content.copy( - common = content.common.copy( - customFields = content.common.customFields.map { customField -> - if (customField == action.field) { - action.field.copy(isVisible = action.isVisible) - } else { - customField - } - }, - ), - ), - ) - } if (action.isVisible) { organizationEventManager.trackEvent( event = OrganizationEvent.CipherClientToggledHiddenFieldVisible( @@ -1615,7 +1600,6 @@ data class VaultItemState( val name: String, val value: String, val isCopyable: Boolean, - val isVisible: Boolean, ) : Custom() /** diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/item/component/VaultItemCustomField.kt b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/item/component/VaultItemCustomField.kt index 469c628a71..d1102282ad 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/item/component/VaultItemCustomField.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/item/component/VaultItemCustomField.kt @@ -1,6 +1,10 @@ package com.x8bit.bitwarden.ui.vault.feature.item.component import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.stringResource @@ -30,6 +34,8 @@ fun CustomField( cardStyle: CardStyle, modifier: Modifier = Modifier, ) { + var isVisible by rememberSaveable { mutableStateOf(false) } + when (customField) { is VaultItemState.ViewState.Content.Common.Custom.BooleanField -> { BitwardenSwitch( @@ -47,8 +53,11 @@ fun CustomField( BitwardenPasswordField( label = customField.name, value = customField.value, - showPasswordChange = { onShowHiddenFieldClick(customField, it) }, - showPassword = customField.isVisible, + showPasswordChange = { + onShowHiddenFieldClick(customField, it) + isVisible = it + }, + showPassword = isVisible, onValueChange = { }, readOnly = true, singleLine = false, @@ -69,8 +78,11 @@ fun CustomField( BitwardenPasswordField( label = customField.name, value = customField.value, - showPasswordChange = { onShowHiddenFieldClick(customField, it) }, - showPassword = customField.isVisible, + showPasswordChange = { + onShowHiddenFieldClick(customField, it) + isVisible = it + }, + showPassword = isVisible, onValueChange = { }, readOnly = true, singleLine = false, diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/item/util/CipherViewExtensions.kt b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/item/util/CipherViewExtensions.kt index 40b5fa1603..86f19edc52 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/item/util/CipherViewExtensions.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/item/util/CipherViewExtensions.kt @@ -57,7 +57,9 @@ fun CipherView.toViewState( name = name, requiresReprompt = (reprompt == CipherRepromptType.PASSWORD && hasMasterPassword) && previousState?.common?.requiresReprompt != false, - customFields = fields.orEmpty().map { it.toCustomField() }, + customFields = fields.orEmpty().map { fieldView -> + fieldView.toCustomField() + }, lastUpdated = revisionDate.toFormattedPattern( pattern = LAST_UPDATED_DATE_TIME_PATTERN, clock = clock, @@ -207,7 +209,6 @@ private fun FieldView.toCustomField(): VaultItemState.ViewState.Content.Common.C name = name.orEmpty(), value = value.orZeroWidthSpace(), isCopyable = !value.isNullOrBlank(), - isVisible = false, ) FieldType.BOOLEAN -> VaultItemState.ViewState.Content.Common.Custom.BooleanField( diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemScreenTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemScreenTest.kt index aa5a871012..111276d582 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemScreenTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemScreenTest.kt @@ -779,7 +779,6 @@ class VaultItemScreenTest : BaseComposeTest() { name = "hidden", value = "hidden password", isCopyable = true, - isVisible = false, ) EMPTY_VIEW_STATES @@ -817,7 +816,6 @@ class VaultItemScreenTest : BaseComposeTest() { name = "hidden", value = "hidden password", isCopyable = true, - isVisible = false, ) EMPTY_VIEW_STATES @@ -858,7 +856,6 @@ class VaultItemScreenTest : BaseComposeTest() { name = "hidden", value = "hidden password", isCopyable = true, - isVisible = false, ) EMPTY_VIEW_STATES @@ -3157,7 +3154,6 @@ private val DEFAULT_COMMON: VaultItemState.ViewState.Content.Common = name = "hidden", value = "hidden password", isCopyable = true, - isVisible = false, ), VaultItemState.ViewState.Content.Common.Custom.BooleanField( name = "boolean", diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModelTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModelTest.kt index 2626eff14e..c64fb2e11c 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModelTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModelTest.kt @@ -1073,7 +1073,6 @@ class VaultItemViewModelTest : BaseViewModelTest() { name = "hidden", value = "value", isCopyable = true, - isVisible = false, ) every { mockCipherView.toViewState( @@ -1138,7 +1137,6 @@ class VaultItemViewModelTest : BaseViewModelTest() { name = "hidden", value = "value", isCopyable = true, - isVisible = false, ) val loginViewState = VaultItemState.ViewState.Content( common = createCommonContent( @@ -1182,7 +1180,7 @@ class VaultItemViewModelTest : BaseViewModelTest() { viewState = loginViewState.copy( common = createCommonContent(isEmpty = true, isPremiumUser = true).copy( requiresReprompt = false, - customFields = listOf(hiddenField.copy(isVisible = true)), + customFields = listOf(hiddenField), ), ), ), @@ -3710,7 +3708,6 @@ class VaultItemViewModelTest : BaseViewModelTest() { name = "hidden", value = "value", isCopyable = true, - isVisible = false, ), VaultItemState.ViewState.Content.Common.Custom.BooleanField( name = "boolean", diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/item/util/VaultItemTestUtil.kt b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/item/util/VaultItemTestUtil.kt index 99e45ba59d..18edadd39b 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/item/util/VaultItemTestUtil.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/item/util/VaultItemTestUtil.kt @@ -197,7 +197,6 @@ fun createCommonContent( name = "hidden", value = "value", isCopyable = true, - isVisible = false, ), VaultItemState.ViewState.Content.Common.Custom.BooleanField( name = "boolean",