From c57106b25ac616c328785d462193d9ce49924c1f Mon Sep 17 00:00:00 2001 From: Swarom Date: Mon, 24 Feb 2025 22:45:00 -0800 Subject: [PATCH] hide ssn by default --- .../Core/Platform/Models/Enum/EventType.swift | 1 + .../IdentityItemState.swift | 3 ++ .../ViewIdentityItemView.swift | 30 +++++++++++-------- .../VaultItem/ViewItem/ViewItemAction.swift | 6 +++- .../ViewItem/ViewItemProcessor.swift | 16 ++++++++++ 5 files changed, 43 insertions(+), 13 deletions(-) diff --git a/BitwardenShared/Core/Platform/Models/Enum/EventType.swift b/BitwardenShared/Core/Platform/Models/Enum/EventType.swift index b1424e930a..97cb24bb3c 100644 --- a/BitwardenShared/Core/Platform/Models/Enum/EventType.swift +++ b/BitwardenShared/Core/Platform/Models/Enum/EventType.swift @@ -28,6 +28,7 @@ public enum EventType: Int, Codable, Sendable { case cipherSoftDeleted = 1115 case cipherRestored = 1116 case cipherClientToggledCardNumberVisible = 1117 +// need to add case for ssn? case collectionCreated = 1300 case collectionUpdated = 1301 diff --git a/BitwardenShared/UI/Vault/VaultItem/AddEditItem/AddEditIdentityItem/IdentityItemState.swift b/BitwardenShared/UI/Vault/VaultItem/AddEditItem/AddEditIdentityItem/IdentityItemState.swift index 887d93c4c6..dbfab1187e 100644 --- a/BitwardenShared/UI/Vault/VaultItem/AddEditItem/AddEditIdentityItem/IdentityItemState.swift +++ b/BitwardenShared/UI/Vault/VaultItem/AddEditItem/AddEditIdentityItem/IdentityItemState.swift @@ -28,6 +28,9 @@ struct IdentityItemState: Equatable { /// The social security number for this item. var socialSecurityNumber: String = "" + /// A flag indicating if the social security number field is visible. + var showSocialSecurityNumber: Bool = false + /// The passport number for this item. var passportNumber: String = "" diff --git a/BitwardenShared/UI/Vault/VaultItem/ViewItem/ViewIdentityItem/ViewIdentityItemView.swift b/BitwardenShared/UI/Vault/VaultItem/ViewItem/ViewIdentityItem/ViewIdentityItemView.swift index e460d5ded4..8de82ec2b6 100644 --- a/BitwardenShared/UI/Vault/VaultItem/ViewItem/ViewIdentityItem/ViewIdentityItemView.swift +++ b/BitwardenShared/UI/Vault/VaultItem/ViewItem/ViewIdentityItem/ViewIdentityItemView.swift @@ -68,19 +68,25 @@ struct ViewIdentityItemView: View { ContentBlock { if !store.state.socialSecurityNumber.isEmpty { let socialSecurityNumber = store.state.socialSecurityNumber - BitwardenTextValueField( - title: Localizations.ssn, - value: socialSecurityNumber, - valueAccessibilityIdentifier: "IdentitySsnEntry", - copyButtonAccessibilityIdentifier: "IdentityCopySsnButton", - copyButtonAction: { store.send( - .copyPressed( - value: socialSecurityNumber, - field: .socialSecurityNumber - ) - ) + BitwardenField(title: Localizations.ssn) { + PasswordText(password: socialSecurityNumber, isPasswordVisible: store.state.showSocialSecurityNumber) + .styleGuide(.body) + .foregroundColor(Asset.Colors.textPrimary.swiftUIColor) + .accessibilityIdentifier("IdentitySsnEntry") + } accessoryContent: { + PasswordVisibilityButton(isPasswordVisible: store.state.showSocialSecurityNumber) { + store.send(.ssnVisibilityPressed) } - ) + + Button { + store.send(.copyPressed(value: socialSecurityNumber, field: .socialSecurityNumber)) + } label: { + Asset.Images.copy24.swiftUIImage + .imageStyle(.accessoryIcon24) + } + .accessibilityLabel(Localizations.copy) + .accessibilityIdentifier("IdentityCopySsnButton") + } .accessibilityElement(children: .contain) } diff --git a/BitwardenShared/UI/Vault/VaultItem/ViewItem/ViewItemAction.swift b/BitwardenShared/UI/Vault/VaultItem/ViewItem/ViewItemAction.swift index e35fefde23..f29c507b21 100644 --- a/BitwardenShared/UI/Vault/VaultItem/ViewItem/ViewItemAction.swift +++ b/BitwardenShared/UI/Vault/VaultItem/ViewItem/ViewItemAction.swift @@ -42,6 +42,9 @@ enum ViewItemAction: Equatable, Sendable { /// The toast was shown or hidden. case toastShown(Toast?) + /// The SSN visiblity button was pressed + case ssnVisibilityPressed + /// A flag indicating if this action requires the user to reenter their master password to /// complete. This value works hand-in-hand with the `isMasterPasswordRequired` value in /// `ViewItemState`. @@ -53,7 +56,8 @@ enum ViewItemAction: Equatable, Sendable { .editPressed, .morePressed, .passwordVisibilityPressed, - .sshKeyItemAction: + .sshKeyItemAction, + .ssnVisibilityPressed: true case let .copyPressed(_, field): field.requiresMasterPasswordReprompt diff --git a/BitwardenShared/UI/Vault/VaultItem/ViewItem/ViewItemProcessor.swift b/BitwardenShared/UI/Vault/VaultItem/ViewItem/ViewItemProcessor.swift index 74641aa64a..2aff5955ab 100644 --- a/BitwardenShared/UI/Vault/VaultItem/ViewItem/ViewItemProcessor.swift +++ b/BitwardenShared/UI/Vault/VaultItem/ViewItem/ViewItemProcessor.swift @@ -189,6 +189,22 @@ final class ViewItemProcessor: StateProcessor