mirror of
https://github.com/bitwarden/android.git
synced 2026-03-21 05:40:45 -05:00
PM-19131 - moved isVisible logic for hidden custom fields to be managed on view side vs model side
This commit is contained in:
@@ -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()
|
||||
|
||||
/**
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -197,7 +197,6 @@ fun createCommonContent(
|
||||
name = "hidden",
|
||||
value = "value",
|
||||
isCopyable = true,
|
||||
isVisible = false,
|
||||
),
|
||||
VaultItemState.ViewState.Content.Common.Custom.BooleanField(
|
||||
name = "boolean",
|
||||
|
||||
Reference in New Issue
Block a user