From b882dacb2e7f60efce7d22531c415105dcd03d2e Mon Sep 17 00:00:00 2001 From: danvleju-rdx <163979791+danvleju-rdx@users.noreply.github.com> Date: Tue, 3 Dec 2024 17:07:59 +0200 Subject: [PATCH] [ABW-3959] Factor Source Card component (#1402) --- RadixWallet.xcodeproj/project.pbxproj | 30 +- .../xcshareddata/swiftpm/Package.resolved | 6 +- .../DeviceFactorSourceClient+Interface.swift | 2 +- .../FactorSourcesClient+Live.swift | 2 +- .../LedgerHardwareWalletClient+Live.swift | 2 +- .../SecureStorageClient+Live.swift | 2 +- .../Components/PlainListRow.swift | 19 +- ...ningView.swift => StatusMessageView.swift} | 22 +- .../EntitySecurityProblemsView.swift | 2 +- .../FactorSourceCard+DataSource.swift | 90 ++++++ .../FactorSourceCard/FactorSourceCard.swift | 274 ++++++++++++++++++ .../Core/FeaturePrelude/LedgerRowView.swift | 2 +- .../FeaturePrelude/RadixDateFormatter.swift | 7 +- .../Generated/AssetResource.generated.swift | 6 + .../checkCircleOutline.imageset/Contents.json | 12 + .../checkCircleOutline.pdf | Bin 0 -> 1437 bytes .../FactorSourceCard/Contents.json | 6 + .../arculusFactor.imageset/Contents.json | 12 + .../arculusFactor.imageset/arculusFactor.pdf | Bin 0 -> 4593 bytes .../deviceFactor.imageset/Contents.json | 12 + .../deviceFactor.imageset/deviceFactor.pdf | Bin 0 -> 7575 bytes .../ledgerFactor.imageset/Contents.json | 12 + .../ledgerFactor.imageset/ledgerFactor.pdf | Bin 0 -> 6438 bytes .../passphraseFactor.imageset/Contents.json | 12 + .../passphraseFactor.pdf | Bin 0 -> 1859 bytes .../passwordFactor.imageset/Contents.json | 12 + .../passwordFactor.pdf | Bin 0 -> 11178 bytes .../Resources/en.lproj/Localizable.strings | 2 +- .../ChooseReceivingAccountOnDelete+View.swift | 2 +- .../AddLedgerFactorSource.swift | 2 +- .../ResourceBalanceButton.swift | 2 +- .../ResourceBalance/ResourceBalanceView.swift | 6 +- .../AuthorizedDApps+View.swift | 2 +- .../InspectProfile+View.swift | 5 +- ...layEntitiesControlledByMnemonic+View.swift | 4 +- .../FactorSourceAccess+ViewState.swift | 2 +- .../ImportMnemonic/ImportMnemonic+View.swift | 4 +- .../VerifyMnemonic/VerifyMnemonic+View.swift | 2 +- ...aLedgerAccountsAndFactorSources+View.swift | 2 +- .../ConfigurationBackup+View.swift | 2 +- .../Coordinator/DisplayMnemonics+View.swift | 2 +- .../CustomizeFees/CustomizeFees+View.swift | 4 +- .../SelectFeePayer/SelectFeePayer+View.swift | 2 +- .../TransactionReviewNetworkFee+View.swift | 6 +- ...LedgerHardwareWalletFactorSource+New.swift | 2 +- .../FactorSourcesClientLiveTests.swift | 16 +- .../TestExtensions/TestUtils.swift | 2 +- 47 files changed, 552 insertions(+), 63 deletions(-) rename RadixWallet/Core/DesignSystem/Components/{WarningView.swift => StatusMessageView.swift} (69%) create mode 100644 RadixWallet/Core/FeaturePrelude/FactorSourceCard/FactorSourceCard+DataSource.swift create mode 100644 RadixWallet/Core/FeaturePrelude/FactorSourceCard/FactorSourceCard.swift create mode 100644 RadixWallet/Core/Resources/Resources/Assets.xcassets/Common/checkCircleOutline.imageset/Contents.json create mode 100644 RadixWallet/Core/Resources/Resources/Assets.xcassets/Common/checkCircleOutline.imageset/checkCircleOutline.pdf create mode 100644 RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/Contents.json create mode 100644 RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/arculusFactor.imageset/Contents.json create mode 100644 RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/arculusFactor.imageset/arculusFactor.pdf create mode 100644 RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/deviceFactor.imageset/Contents.json create mode 100644 RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/deviceFactor.imageset/deviceFactor.pdf create mode 100644 RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/ledgerFactor.imageset/Contents.json create mode 100644 RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/ledgerFactor.imageset/ledgerFactor.pdf create mode 100644 RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/passphraseFactor.imageset/Contents.json create mode 100644 RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/passphraseFactor.imageset/passphraseFactor.pdf create mode 100644 RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/passwordFactor.imageset/Contents.json create mode 100644 RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/passwordFactor.imageset/passwordFactor.pdf diff --git a/RadixWallet.xcodeproj/project.pbxproj b/RadixWallet.xcodeproj/project.pbxproj index eeb8002974..9ce36300f8 100644 --- a/RadixWallet.xcodeproj/project.pbxproj +++ b/RadixWallet.xcodeproj/project.pbxproj @@ -541,7 +541,7 @@ 48CFC5A92ADC10DA00E77A5C /* SecondaryRectangularButtonStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48CFC0FB2ADC10D900E77A5C /* SecondaryRectangularButtonStyle.swift */; }; 48CFC5AA2ADC10DA00E77A5C /* PrimaryRectangularButtonStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48CFC0FC2ADC10D900E77A5C /* PrimaryRectangularButtonStyle.swift */; }; 48CFC5AB2ADC10DA00E77A5C /* InertButtonStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48CFC0FD2ADC10D900E77A5C /* InertButtonStyle.swift */; }; - 48CFC5AD2ADC10DA00E77A5C /* WarningView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48CFC1002ADC10D900E77A5C /* WarningView.swift */; }; + 48CFC5AD2ADC10DA00E77A5C /* StatusMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48CFC1002ADC10D900E77A5C /* StatusMessageView.swift */; }; 48CFC5AE2ADC10DA00E77A5C /* CheckmarkView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48CFC1012ADC10D900E77A5C /* CheckmarkView.swift */; }; 48CFC5AF2ADC10DA00E77A5C /* AssetIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48CFC1022ADC10D900E77A5C /* AssetIcon.swift */; }; 48CFC5B22ADC10DA00E77A5C /* Footer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48CFC1052ADC10D900E77A5C /* Footer.swift */; }; @@ -1263,6 +1263,8 @@ E713204C2BCD372600AE6B3C /* UnknownCaseDecodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = E713204B2BCD372600AE6B3C /* UnknownCaseDecodable.swift */; }; E75C5F342C1C1632002E3DFF /* Stage1MigrateToSargon+SignedAuthChallenge.swift in Sources */ = {isa = PBXBuildFile; fileRef = E75C5F332C1C1632002E3DFF /* Stage1MigrateToSargon+SignedAuthChallenge.swift */; }; E76645A42C23138300065D9A /* Throwable.swift in Sources */ = {isa = PBXBuildFile; fileRef = E76645A32C23138300065D9A /* Throwable.swift */; }; + E775A1B82CF4CA5500E72DB9 /* FactorSourceCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = E775A1B72CF4CA5500E72DB9 /* FactorSourceCard.swift */; }; + E775A1BA2CF7326000E72DB9 /* FactorSourceCard+DataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = E775A1B92CF7326000E72DB9 /* FactorSourceCard+DataSource.swift */; }; E79DD1B12CE365CF00B1EB86 /* ChooseReceivingAccountOnDelete+Reducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E79DD1B02CE365CF00B1EB86 /* ChooseReceivingAccountOnDelete+Reducer.swift */; }; E79DD1B32CE365D600B1EB86 /* ChooseReceivingAccountOnDelete+View.swift in Sources */ = {isa = PBXBuildFile; fileRef = E79DD1B22CE365D600B1EB86 /* ChooseReceivingAccountOnDelete+View.swift */; }; E79DD1B62CE4933100B1EB86 /* DeleteAccountConfirmation+Reducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E79DD1B52CE4933100B1EB86 /* DeleteAccountConfirmation+Reducer.swift */; }; @@ -1823,7 +1825,7 @@ 48CFC0FB2ADC10D900E77A5C /* SecondaryRectangularButtonStyle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecondaryRectangularButtonStyle.swift; sourceTree = ""; }; 48CFC0FC2ADC10D900E77A5C /* PrimaryRectangularButtonStyle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PrimaryRectangularButtonStyle.swift; sourceTree = ""; }; 48CFC0FD2ADC10D900E77A5C /* InertButtonStyle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InertButtonStyle.swift; sourceTree = ""; }; - 48CFC1002ADC10D900E77A5C /* WarningView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WarningView.swift; sourceTree = ""; }; + 48CFC1002ADC10D900E77A5C /* StatusMessageView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StatusMessageView.swift; sourceTree = ""; }; 48CFC1012ADC10D900E77A5C /* CheckmarkView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CheckmarkView.swift; sourceTree = ""; }; 48CFC1022ADC10D900E77A5C /* AssetIcon.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssetIcon.swift; sourceTree = ""; }; 48CFC1052ADC10D900E77A5C /* Footer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Footer.swift; sourceTree = ""; }; @@ -2519,6 +2521,8 @@ E713204B2BCD372600AE6B3C /* UnknownCaseDecodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnknownCaseDecodable.swift; sourceTree = ""; }; E75C5F332C1C1632002E3DFF /* Stage1MigrateToSargon+SignedAuthChallenge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Stage1MigrateToSargon+SignedAuthChallenge.swift"; sourceTree = ""; }; E76645A32C23138300065D9A /* Throwable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Throwable.swift; sourceTree = ""; }; + E775A1B72CF4CA5500E72DB9 /* FactorSourceCard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FactorSourceCard.swift; sourceTree = ""; }; + E775A1B92CF7326000E72DB9 /* FactorSourceCard+DataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "FactorSourceCard+DataSource.swift"; sourceTree = ""; }; E79DD1B02CE365CF00B1EB86 /* ChooseReceivingAccountOnDelete+Reducer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ChooseReceivingAccountOnDelete+Reducer.swift"; sourceTree = ""; }; E79DD1B22CE365D600B1EB86 /* ChooseReceivingAccountOnDelete+View.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ChooseReceivingAccountOnDelete+View.swift"; sourceTree = ""; }; E79DD1B52CE4933100B1EB86 /* DeleteAccountConfirmation+Reducer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DeleteAccountConfirmation+Reducer.swift"; sourceTree = ""; }; @@ -5007,7 +5011,7 @@ isa = PBXGroup; children = ( E6FA984D2B04E3D500748F20 /* NoContentView.swift */, - 48CFC1002ADC10D900E77A5C /* WarningView.swift */, + 48CFC1002ADC10D900E77A5C /* StatusMessageView.swift */, 48CFC1012ADC10D900E77A5C /* CheckmarkView.swift */, 48CFC1022ADC10D900E77A5C /* AssetIcon.swift */, 48CFC1052ADC10D900E77A5C /* Footer.swift */, @@ -5069,6 +5073,7 @@ isa = PBXGroup; children = ( 5B6E11462C45834C00C20F2D /* AccountCard */, + E775A1B62CF4CA0700E72DB9 /* FactorSourceCard */, 48CFC1332ADC10D900E77A5C /* LedgerRowView.swift */, A4F30C932C7CA71400F983D6 /* WithNavigationBar.swift */, 48CFC22C2ADC10D900E77A5C /* Radix+Dashboard.swift */, @@ -6959,6 +6964,15 @@ path = EditPersonaAddEntryKinds; sourceTree = ""; }; + E775A1B62CF4CA0700E72DB9 /* FactorSourceCard */ = { + isa = PBXGroup; + children = ( + E775A1B72CF4CA5500E72DB9 /* FactorSourceCard.swift */, + E775A1B92CF7326000E72DB9 /* FactorSourceCard+DataSource.swift */, + ); + path = FactorSourceCard; + sourceTree = ""; + }; E79DD1B42CE492E800B1EB86 /* DeleteAccount */ = { isa = PBXGroup; children = ( @@ -7163,7 +7177,7 @@ 8318BB172BC8403800057BCB /* XCRemoteSwiftPackageReference "swift-custom-dump" */, E6A0B0492BF23C7000617DAC /* XCRemoteSwiftPackageReference "swift-identified-collections" */, 5B634A922C91D2A0004B2FBC /* XCRemoteSwiftPackageReference "ScreenshotPreventing-iOS" */, - E79DD1C72CEE08BA00B1EB86 /* XCRemoteSwiftPackageReference "sargon" */, + E775A1BC2CFA04B100E72DB9 /* XCRemoteSwiftPackageReference "sargon" */, ); productRefGroup = 48CFBC502ADC106300E77A5C /* Products */; projectDirPath = ""; @@ -7528,6 +7542,7 @@ 5B4A1ABB2CBFEBB000679EE6 /* ProofOfOwnership.swift in Sources */, 48CFC3252ADC10D900E77A5C /* LocalNetworkPermission+View.swift in Sources */, A40815B32C7E0D08005E65B9 /* NativeResourceMultiResourcePoolUnitValue.swift in Sources */, + E775A1B82CF4CA5500E72DB9 /* FactorSourceCard.swift in Sources */, 48CFC5D82ADC10DA00E77A5C /* TextStyleModifier.swift in Sources */, A40816052C7E0D08005E65B9 /* StateEntityDetailsRequest.swift in Sources */, 48CFC6942ADC10DB00E77A5C /* MigratedSoftwareAccounts.swift in Sources */, @@ -7945,6 +7960,7 @@ A408165E2C7E0D08005E65B9 /* ValidatorCollectionItemEffectiveFeeFactorCurrent.swift in Sources */, 484161472BCAD2D700D2B644 /* Stage1MigrateToSargon+HierarchicalDeterministicPublicKey.swift in Sources */, 48CFC3762ADC10D900E77A5C /* ValidatorStakeView.swift in Sources */, + E775A1BA2CF7326000E72DB9 /* FactorSourceCard+DataSource.swift in Sources */, 48CFC4612ADC10DA00E77A5C /* MakeTransactionHeaderInput.swift in Sources */, 5B8433AA2CD0131B00CA00F5 /* PreAuthorizationFailure.swift in Sources */, A40815C62C7E0D08005E65B9 /* NonFungibleResourcesCollectionItemVaultAggregatedVault.swift in Sources */, @@ -8098,7 +8114,7 @@ 48CFC2642ADC10D900E77A5C /* EditPersona.swift in Sources */, 831F0CF62C294C0D00D6F5BF /* DeepLinkHandlerClient+Test.swift in Sources */, 5BBC7DA42C3D442800B04BD6 /* URLRequest+Extra.swift in Sources */, - 48CFC5AD2ADC10DA00E77A5C /* WarningView.swift in Sources */, + 48CFC5AD2ADC10DA00E77A5C /* StatusMessageView.swift in Sources */, 48CFC5982ADC10DA00E77A5C /* ControlState.swift in Sources */, A41266F92B160F4C00EA38E9 /* ManualAccountRecoveryCoordinator+View.swift in Sources */, A43F1E232BC72884001DD3FA /* AnyRange.swift in Sources */, @@ -9274,12 +9290,12 @@ version = 1.0.2; }; }; - E79DD1C72CEE08BA00B1EB86 /* XCRemoteSwiftPackageReference "sargon" */ = { + E775A1BC2CFA04B100E72DB9 /* XCRemoteSwiftPackageReference "sargon" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/radixdlt/sargon"; requirement = { kind = exactVersion; - version = 1.1.68; + version = 1.1.70; }; }; /* End XCRemoteSwiftPackageReference section */ diff --git a/RadixWallet.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/RadixWallet.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 0af481af69..f2339866a8 100644 --- a/RadixWallet.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/RadixWallet.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "7d3590b225945abb1bc0ab6c684b005c28c64bdc204afcc2d34c3e379ef8a3c8", + "originHash" : "4eb650ade57061cd1cf989ce8f615547774e9303f591ff57a76f3f2c04cdbd07", "pins" : [ { "identity" : "anycodable", @@ -114,8 +114,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/radixdlt/sargon", "state" : { - "revision" : "18dd3e2bc0c4ea8ceafb2c9bd73af78ce1578e0b", - "version" : "1.1.68" + "revision" : "914a297c6f06ee7e91e317e2ac33a9ff61c8337f", + "version" : "1.1.70" } }, { diff --git a/RadixWallet/Clients/DeviceFactorSourceClient/DeviceFactorSourceClient+Interface.swift b/RadixWallet/Clients/DeviceFactorSourceClient/DeviceFactorSourceClient+Interface.swift index 197ddfa806..830a921e5b 100644 --- a/RadixWallet/Clients/DeviceFactorSourceClient/DeviceFactorSourceClient+Interface.swift +++ b/RadixWallet/Clients/DeviceFactorSourceClient/DeviceFactorSourceClient+Interface.swift @@ -196,7 +196,7 @@ extension DeviceFactorSourceClient { } let curve = factorInstance.publicKey.curve - loggerGlobal.debug("🔏 Signing data with device, with entity=\(entity.displayName), curve=\(curve), factor source hint.name=\(deviceFactorSource.hint.name), hint.model=\(deviceFactorSource.hint.model)") + loggerGlobal.debug("🔏 Signing data with device, with entity=\(entity.displayName), curve=\(curve), factor source hint.label=\(deviceFactorSource.hint.label), hint.deviceName=\(deviceFactorSource.hint.deviceName), hint.model=\(deviceFactorSource.hint.model)") let signatureWithPublicKey = try await self.signatureFromOnDeviceHD(SignatureFromOnDeviceHDRequest( mnemonicWithPassphrase: loadedMnemonicWithPassphrase, diff --git a/RadixWallet/Clients/FactorSourcesClient/FactorSourcesClient+Live.swift b/RadixWallet/Clients/FactorSourcesClient/FactorSourcesClient+Live.swift index 1f47a10064..3207f1bba9 100644 --- a/RadixWallet/Clients/FactorSourcesClient/FactorSourcesClient+Live.swift +++ b/RadixWallet/Clients/FactorSourcesClient/FactorSourcesClient+Live.swift @@ -430,7 +430,7 @@ extension FactorSourceKind: Comparable { case .offDeviceMnemonic: 2 case .securityQuestions: 3 case .trustedContact: 4 - case .passphrase: 5 + case .password: 5 // we want to sign with device last, since it would allow for us to stop using // ephemeral notary and allow us to implement a AutoPurgingMnemonicCache which // deletes items after 1 sec, thus `device` must come last. diff --git a/RadixWallet/Clients/LedgerHardwareWalletClient/LedgerHardwareWalletClient+Live.swift b/RadixWallet/Clients/LedgerHardwareWalletClient/LedgerHardwareWalletClient+Live.swift index a3a6a72ae3..2092c14f3d 100644 --- a/RadixWallet/Clients/LedgerHardwareWalletClient/LedgerHardwareWalletClient+Live.swift +++ b/RadixWallet/Clients/LedgerHardwareWalletClient/LedgerHardwareWalletClient+Live.swift @@ -216,7 +216,7 @@ extension LedgerHardwareWalletFactorSource { } return P2P.LedgerHardwareWallet.LedgerDevice( - name: NonEmptyString(maybeString: hint.name), + name: NonEmptyString(maybeString: hint.label), id: id.body.data.data.hex, model: model ) diff --git a/RadixWallet/Clients/SecureStorageClient/SecureStorageClient+Live.swift b/RadixWallet/Clients/SecureStorageClient/SecureStorageClient+Live.swift index 8606475e71..2c4a4fb570 100644 --- a/RadixWallet/Clients/SecureStorageClient/SecureStorageClient+Live.swift +++ b/RadixWallet/Clients/SecureStorageClient/SecureStorageClient+Live.swift @@ -227,7 +227,7 @@ extension SecureStorageClient: DependencyKey { accessibility: mostSecureAccesibilityAndAuthenticationPolicy.accessibility, authenticationPolicy: mostSecureAccesibilityAndAuthenticationPolicy.authenticationPolicy, label: importantKeychainIdentifier("Radix Wallet Factor Secret")!, - comment: .init("Created on \(factorSource.hint.name) \(factorSource.supportsOlympia ? " (Olympia)" : "")") + comment: .init("Created on \(factorSource.hint.deviceName) \(factorSource.supportsOlympia ? " (Olympia)" : "")") ) ) } diff --git a/RadixWallet/Core/DesignSystem/Components/PlainListRow.swift b/RadixWallet/Core/DesignSystem/Components/PlainListRow.swift index 825dca9cbb..3baeec5d60 100644 --- a/RadixWallet/Core/DesignSystem/Components/PlainListRow.swift +++ b/RadixWallet/Core/DesignSystem/Components/PlainListRow.swift @@ -192,7 +192,7 @@ struct PlainListRowCore: View { private extension PlainListRowCore.ViewState { var titleTextStyle: TextStyle { switch context { - case .toggle, .settings, .dappAndPersona: + case .toggle, .settings, .dappAndPersona, .compactPersona: .body1Header case .hiddenPersona: .body1HighImportance @@ -203,7 +203,7 @@ private extension PlainListRowCore.ViewState { switch context { case .toggle, .hiddenPersona: .body2Regular - case .settings, .dappAndPersona: + case .settings, .dappAndPersona, .compactPersona: detail == nil ? .body1Regular : .body2Regular } } @@ -212,14 +212,14 @@ private extension PlainListRowCore.ViewState { switch context { case .toggle, .hiddenPersona: .app.gray2 - case .settings, .dappAndPersona: + case .settings, .dappAndPersona, .compactPersona: .app.gray1 } } var titleLineLimit: Int? { switch context { - case .settings, .dappAndPersona, .hiddenPersona: + case .settings, .dappAndPersona, .hiddenPersona, .compactPersona: 1 case .toggle: nil @@ -228,7 +228,7 @@ private extension PlainListRowCore.ViewState { var subtitleLineLimit: Int { switch context { - case .toggle, .hiddenPersona: + case .toggle, .hiddenPersona, .compactPersona: 2 case .settings, .dappAndPersona: 3 @@ -241,16 +241,16 @@ private extension PlainListRowCore.ViewState { .zero case .settings: .medium1 - case .dappAndPersona: - .medium3 - case .hiddenPersona: + case .dappAndPersona, .hiddenPersona: .medium3 + case .compactPersona: + .small1 } } var horizontalPadding: CGFloat { switch context { - case .toggle, .settings, .hiddenPersona: + case .toggle, .settings, .hiddenPersona, .compactPersona: .medium3 case .dappAndPersona: .medium1 @@ -265,6 +265,7 @@ extension PlainListRowCore.ViewState { case toggle case dappAndPersona case hiddenPersona + case compactPersona } } diff --git a/RadixWallet/Core/DesignSystem/Components/WarningView.swift b/RadixWallet/Core/DesignSystem/Components/StatusMessageView.swift similarity index 69% rename from RadixWallet/Core/DesignSystem/Components/WarningView.swift rename to RadixWallet/Core/DesignSystem/Components/StatusMessageView.swift index 2cfabcd41f..b17f641cf8 100644 --- a/RadixWallet/Core/DesignSystem/Components/WarningView.swift +++ b/RadixWallet/Core/DesignSystem/Components/StatusMessageView.swift @@ -1,5 +1,5 @@ -// MARK: - WarningErrorView -struct WarningErrorView: View { +// MARK: - StatusMessageView +struct StatusMessageView: View { let text: String let type: ViewType let spacing: CGFloat @@ -20,11 +20,12 @@ struct WarningErrorView: View { enum ViewType { case warning case error + case success } var body: some View { HStack(spacing: spacing) { - Image(.error) + Image(icon) Text(text) .lineSpacing(-.small3) .textStyle(textStyle) @@ -33,20 +34,31 @@ struct WarningErrorView: View { .foregroundColor(color) } + var icon: ImageResource { + switch type { + case .warning, .error: + .error + case .success: + .checkCircleOutline + } + } + var color: Color { switch type { case .warning: .app.alert case .error: .app.red1 + case .success: + .app.green1 } } } -extension WarningErrorView { +extension StatusMessageView { static func transactionIntroducesNewAccount() -> some View { HStack(alignment: .center, spacing: .small1) { - WarningErrorView(text: L10n.TransactionReview.FeePayerValidation.linksNewAccount, type: .warning) + StatusMessageView(text: L10n.TransactionReview.FeePayerValidation.linksNewAccount, type: .warning) InfoButton(.payingaccount) } } diff --git a/RadixWallet/Core/DesignSystem/EntitySecurityProblemsView.swift b/RadixWallet/Core/DesignSystem/EntitySecurityProblemsView.swift index 264528f8f8..ec73f5c06d 100644 --- a/RadixWallet/Core/DesignSystem/EntitySecurityProblemsView.swift +++ b/RadixWallet/Core/DesignSystem/EntitySecurityProblemsView.swift @@ -12,7 +12,7 @@ struct EntitySecurityProblemsView: SwiftUI.View { case .account: AccountBannerView(kind: .securityProblem(message: problem.accountCard)) case .persona: - WarningErrorView(text: problem.personas, type: .warning, useNarrowSpacing: true) + StatusMessageView(text: problem.personas, type: .warning, useNarrowSpacing: true) .frame(maxWidth: .infinity, alignment: .leading) .padding(.bottom, .small3) } diff --git a/RadixWallet/Core/FeaturePrelude/FactorSourceCard/FactorSourceCard+DataSource.swift b/RadixWallet/Core/FeaturePrelude/FactorSourceCard/FactorSourceCard+DataSource.swift new file mode 100644 index 0000000000..1253a2119d --- /dev/null +++ b/RadixWallet/Core/FeaturePrelude/FactorSourceCard/FactorSourceCard+DataSource.swift @@ -0,0 +1,90 @@ +// MARK: - FactorSourceCardDataSource +struct FactorSourceCardDataSource { + let icon: ImageResource + let title: String + var subtitle: String? + var lastUsedOn: Timestamp? + var messages: [Message] = [] + var accounts: [Account] = [] + var personas: [Persona] = [] + + var hasEntities: Bool { + !accounts.isEmpty || !personas.isEmpty + } +} + +// MARK: FactorSourceCardDataSource.Message +extension FactorSourceCardDataSource { + struct Message: Identifiable { + var id: String { text } + + let text: String + let type: StatusMessageView.ViewType + } +} + +extension FactorSourceKind { + var isSupported: Bool { + switch self { + case .device, + .ledgerHqHardwareWallet, + .offDeviceMnemonic, + .arculusCard, + .password: + true + case .trustedContact, .securityQuestions: + false + } + } + + var icon: ImageResource { + switch self { + case .device: + .deviceFactor + case .ledgerHqHardwareWallet: + .ledgerFactor + case .offDeviceMnemonic: + .passphraseFactor + case .arculusCard: + .arculusFactor + case .password: + .passwordFactor + case .trustedContact, .securityQuestions: + fatalError("Not supported yet") + } + } + + var title: String { + switch self { + case .device: + L10n.FactorSources.Card.deviceTitle + case .ledgerHqHardwareWallet: + L10n.FactorSources.Card.ledgerTitle + case .offDeviceMnemonic: + L10n.FactorSources.Card.passphraseTitle + case .arculusCard: + L10n.FactorSources.Card.arculusCardTitle + case .password: + L10n.FactorSources.Card.passwordTitle + case .trustedContact, .securityQuestions: + fatalError("Not supported yet") + } + } + + var details: String { + switch self { + case .device: + L10n.FactorSources.Card.deviceDescription + case .ledgerHqHardwareWallet: + L10n.FactorSources.Card.ledgerDescription + case .offDeviceMnemonic: + L10n.FactorSources.Card.passphraseDescription + case .arculusCard: + L10n.FactorSources.Card.arculusCardDescription + case .password: + L10n.FactorSources.Card.passwordDescription + case .trustedContact, .securityQuestions: + fatalError("Not supported yet") + } + } +} diff --git a/RadixWallet/Core/FeaturePrelude/FactorSourceCard/FactorSourceCard.swift b/RadixWallet/Core/FeaturePrelude/FactorSourceCard/FactorSourceCard.swift new file mode 100644 index 0000000000..a20f80a456 --- /dev/null +++ b/RadixWallet/Core/FeaturePrelude/FactorSourceCard/FactorSourceCard.swift @@ -0,0 +1,274 @@ +import Sargon +import SwiftUI + +// MARK: - FactorSourceCard +struct FactorSourceCard: View { + private let kind: Kind + private let mode: Mode + private let dataSource: FactorSourceCardDataSource + private var isExpanded: Bool + + var onRemoveTapped: (() -> Void)? = nil + + var body: some View { + switch mode { + case .display, .selection: + card + case .removal: + HStack { + card + + Button { + onRemoveTapped?() + } label: { + Image(asset: AssetResource.close) + .frame(.smallest) + } + .foregroundColor(.app.gray2) + } + } + } + + private var card: some View { + VStack(spacing: 0) { + topCard + .padding(.horizontal, .medium3) + .padding(.vertical, .medium2) + + if !dataSource.messages.isEmpty { + VStack(alignment: .leading, spacing: .small2) { + ForEach(dataSource.messages) { message in + StatusMessageView( + text: message.text, + type: message.type, + useNarrowSpacing: true, + useSmallerFontSize: true + ) + } + } + .flushedLeft + .padding(.horizontal, .large3) + .padding(.bottom, .medium1) + } + + if dataSource.hasEntities { + LinkedEntitesView( + isExpanded: isExpanded, + accounts: dataSource.accounts, + personas: dataSource.personas + ) + } + } + .background(.app.white) + .roundedCorners(radius: .small1) + .cardShadow + } + + private var topCard: some View { + HStack(spacing: .medium3) { + Image(dataSource.icon) + + VStack(alignment: .leading, spacing: .small3) { + Text(dataSource.title) + .textStyle(.body1Header) + .foregroundStyle(.app.gray1) + + if let subtitle = dataSource.subtitle { + Text(subtitle) + .textStyle(.body2Regular) + .foregroundStyle(.app.gray2) + } + + if let lastUsedOn = dataSource.lastUsedOn { + Text( + markdown: L10n.FactorSources.Card.lastUsed(RadixDateFormatter.string(from: lastUsedOn, dateStyle: .long)), + emphasizedColor: .app.gray2, + emphasizedFont: .app.body2Link + ) + .textStyle(.body2Regular) + .foregroundStyle(.app.gray2) + } + } + .flushedLeft + + if case let .selection(type, isSelected) = mode { + switch type { + case .radioButton: + RadioButton( + appearance: .dark, + state: isSelected ? .selected : .unselected + ) + case .checkmark: + CheckmarkView(appearance: .dark, isChecked: isSelected) + } + } + } + } + + struct LinkedEntitesView: SwiftUI.View { + @SwiftUI.State var isExpanded: Bool = false + let accounts: [Account] + let personas: [Persona] + + var body: some SwiftUI.View { + VStack(alignment: .leading, spacing: .medium2) { + Button { + withAnimation(.default) { + isExpanded.toggle() + } + } label: { + HStack(spacing: .zero) { + Text(linkedTitle) + .textStyle(.body2Regular) + .foregroundStyle(.app.gray2) + + Spacer(minLength: 0) + + Image(isExpanded ? .chevronUp : .chevronDown) + .renderingMode(.original) + } + } + + if isExpanded { + VStack(spacing: .small2) { + ForEach(accounts) { account in + AccountCard(kind: .compact, account: account) + } + + ForEach(personas) { persona in + Card { + PlainListRow( + context: .compactPersona, + title: persona.displayName.value, + accessory: nil + ) { + Thumbnail(.persona, url: nil) + } + } + } + } + } + } + .padding(.horizontal, .medium3) + .padding(.vertical, .small1) + .background(.app.gray5) + } + + private var linkedTitle: String { + typealias Card = L10n.FactorSources.Card + let accountsString = accounts.count == 1 ? Card.accountSingular : Card.accountPlural(accounts.count) + let personasString = personas.count == 1 ? Card.personaSingular : Card.personaPlural(personas.count) + + if accounts.count > 0, personas.count > 0 { + return Card.linkedAccountsAndPersonas(accountsString, personasString) + } else if accounts.count > 0 { + return Card.linkedAccountsOrPersonas(accountsString) + } else if personas.count > 0 { + return Card.linkedAccountsOrPersonas(personasString) + } + return "" + } + } +} + +extension FactorSourceCard { + init?( + kind: Kind, + mode: Mode, + messages: [FactorSourceCardDataSource.Message] = [], + isExpanded: Bool = false, + onRemoveTapped: (() -> Void)? = nil + ) { + guard kind.factorSourceKind.isSupported else { return nil } + + switch kind { + case let .genericDescription(factorSourceKind): + self = .init( + kind: kind, + mode: mode, + dataSource: .init( + icon: factorSourceKind.icon, + title: factorSourceKind.title, + subtitle: factorSourceKind.details, + messages: messages + ), + isExpanded: isExpanded, + onRemoveTapped: onRemoveTapped + ) + case let .instance(factorSource, instanceKind): + switch instanceKind { + case let .short(showDetails): + self = .init( + kind: kind, + mode: mode, + dataSource: .init( + icon: kind.factorSourceKind.icon, + title: factorSource.name, + subtitle: showDetails ? factorSource.factorSourceKind.details : nil, + messages: messages + ), + isExpanded: isExpanded, + onRemoveTapped: onRemoveTapped + ) + case let .extended(accounts, personas): + self = .init( + kind: kind, + mode: mode, + dataSource: .init( + icon: kind.factorSourceKind.icon, + title: factorSource.name, + lastUsedOn: factorSource.common.lastUsedOn, + messages: messages, + accounts: accounts, + personas: personas + ), + isExpanded: isExpanded, + onRemoveTapped: onRemoveTapped + ) + } + } + } +} + +extension FactorSourceCard { + enum Kind { + case genericDescription(FactorSourceKind) + case instance(factorSource: FactorSource, kind: InstanceKind) + + enum InstanceKind { + case short(showDetails: Bool) + case extended(accounts: [Account] = [], personas: [Persona] = []) + } + } + + enum Mode { + case display + case selection(type: SelectionType, isSelected: Bool) + case removal + } + + enum SelectionType { + case radioButton + case checkmark + } +} + +extension FactorSourceCard.Kind { + var factorSourceKind: FactorSourceKind { + switch self { + case let .genericDescription(factorSourceKind): + factorSourceKind + case let .instance(factorSource, _): + factorSource.factorSourceKind + } + } + + var title: String { + switch self { + case let .genericDescription(factorSourceKind): + factorSourceKind.title + case let .instance(factorSource, _): + factorSource.name + } + } +} diff --git a/RadixWallet/Core/FeaturePrelude/LedgerRowView.swift b/RadixWallet/Core/FeaturePrelude/LedgerRowView.swift index 32906287c9..7820563e82 100644 --- a/RadixWallet/Core/FeaturePrelude/LedgerRowView.swift +++ b/RadixWallet/Core/FeaturePrelude/LedgerRowView.swift @@ -9,7 +9,7 @@ struct LedgerRowView: View { let lastUsedOn: Date init(factorSource: LedgerHardwareWalletFactorSource) { - self.description = factorSource.hint.name + self.description = factorSource.hint.label self.addedOn = factorSource.common.addedOn self.lastUsedOn = factorSource.common.lastUsedOn } diff --git a/RadixWallet/Core/FeaturePrelude/RadixDateFormatter.swift b/RadixWallet/Core/FeaturePrelude/RadixDateFormatter.swift index 02c2f7d965..071ce61be7 100644 --- a/RadixWallet/Core/FeaturePrelude/RadixDateFormatter.swift +++ b/RadixWallet/Core/FeaturePrelude/RadixDateFormatter.swift @@ -2,8 +2,11 @@ import Foundation // MARK: - RadixDateFormatter enum RadixDateFormatter { - static func string(from date: Date) -> String { - let dateString = { date.formatted(date: .abbreviated, time: .omitted) } + static func string( + from date: Date, + dateStyle: Date.FormatStyle.DateStyle = .abbreviated + ) -> String { + let dateString = { date.formatted(date: dateStyle, time: .omitted) } let calendar = Calendar.current diff --git a/RadixWallet/Core/Resources/Generated/AssetResource.generated.swift b/RadixWallet/Core/Resources/Generated/AssetResource.generated.swift index 7411f0d25a..1a9e4635f7 100644 --- a/RadixWallet/Core/Resources/Generated/AssetResource.generated.swift +++ b/RadixWallet/Core/Resources/Generated/AssetResource.generated.swift @@ -58,6 +58,7 @@ internal enum AssetResource { internal static let carouselBackgroundRadquest = ImageAsset(name: "carousel_background_radquest") internal static let arrowBack = ImageAsset(name: "arrow-back") internal static let check = ImageAsset(name: "check") + internal static let checkCircleOutline = ImageAsset(name: "checkCircleOutline") internal static let checkmarkDarkSelected = ImageAsset(name: "checkmark-dark-selected") internal static let checkmarkDarkUnselected = ImageAsset(name: "checkmark-dark-unselected") internal static let checkmarkLightSelected = ImageAsset(name: "checkmark-light-selected") @@ -96,6 +97,11 @@ internal enum AssetResource { internal static let signingKey = ImageAsset(name: "signing-key") internal static let trash = ImageAsset(name: "trash") internal static let walletAppIcon = ImageAsset(name: "wallet-app-icon") + internal static let arculusFactor = ImageAsset(name: "arculusFactor") + internal static let deviceFactor = ImageAsset(name: "deviceFactor") + internal static let ledgerFactor = ImageAsset(name: "ledgerFactor") + internal static let passphraseFactor = ImageAsset(name: "passphraseFactor") + internal static let passwordFactor = ImageAsset(name: "passwordFactor") internal static let homeAccountSecurity = ImageAsset(name: "home-account-security") internal static let homeAggregatedValueHidden = ImageAsset(name: "home-aggregatedValue-hidden") internal static let homeAggregatedValueShown = ImageAsset(name: "home-aggregatedValue-shown") diff --git a/RadixWallet/Core/Resources/Resources/Assets.xcassets/Common/checkCircleOutline.imageset/Contents.json b/RadixWallet/Core/Resources/Resources/Assets.xcassets/Common/checkCircleOutline.imageset/Contents.json new file mode 100644 index 0000000000..92cc2a759a --- /dev/null +++ b/RadixWallet/Core/Resources/Resources/Assets.xcassets/Common/checkCircleOutline.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "checkCircleOutline.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/RadixWallet/Core/Resources/Resources/Assets.xcassets/Common/checkCircleOutline.imageset/checkCircleOutline.pdf b/RadixWallet/Core/Resources/Resources/Assets.xcassets/Common/checkCircleOutline.imageset/checkCircleOutline.pdf new file mode 100644 index 0000000000000000000000000000000000000000..fd36304057954131fcb7af9efd478064ec9b307c GIT binary patch literal 1437 zcmZuxO>dk)488kT__9)R2r$6#Aw`jz-KMJAs$0@q)B|NF8!A3pAXVC5AJ4#e*d&}D z&*NwN4Q8|7-CPJS1rQiu|MM3hUS8tW6{zl@Um;xc{%6%4rw5FPEcB^y8dTYWzf*tf zN);cjaeKRdt48<(!VAoUfdv!Bk#Dx@bv6Lb`#%GF~H27JmDWvYTVbX|4UaFi3NV8wEGPHz?EdXB5$VeNwTumw`e zXA>;PzP=8fbYss8YFiiyP7oOfxfjQg3!LKE6?!YmI+V@ot{|sy_pVo_j0v$FST`|W zaSN=NdRb&ynEK*ufL*I;!(l?V^(70sjIFVQ^B8wV5_u{rI-q6k5LkHhLuhOz7 zcB%CK%*&SMDX&`0EUlpbuIu_~#JeA~lJxlB|NU0z@5`fFh%f3;m)HFh-nqqMJ42qx zA*)oVv40#YHKJbnVv*bS-K09Is5jn{`*I)-c>%8 zmcFF&Ab&xLAR}*15`~b|{z6SdSvP6`eS05wWXIXqx9S|v>cjbLieL2ognD3Ouzy?s WSJb`vk(R?`#u1^Au-Ux-dh-m=a4yaO literal 0 HcmV?d00001 diff --git a/RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/Contents.json b/RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/Contents.json new file mode 100644 index 0000000000..73c00596a7 --- /dev/null +++ b/RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/arculusFactor.imageset/Contents.json b/RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/arculusFactor.imageset/Contents.json new file mode 100644 index 0000000000..f14dff33a8 --- /dev/null +++ b/RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/arculusFactor.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "arculusFactor.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/arculusFactor.imageset/arculusFactor.pdf b/RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/arculusFactor.imageset/arculusFactor.pdf new file mode 100644 index 0000000000000000000000000000000000000000..40e6c79a2ead6ab217e49ba34ddab6353d8a99cd GIT binary patch literal 4593 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 AVgLXD literal 0 HcmV?d00001 diff --git a/RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/deviceFactor.imageset/Contents.json b/RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/deviceFactor.imageset/Contents.json new file mode 100644 index 0000000000..7f3c9faf14 --- /dev/null +++ b/RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/deviceFactor.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "deviceFactor.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/deviceFactor.imageset/deviceFactor.pdf b/RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/deviceFactor.imageset/deviceFactor.pdf new file mode 100644 index 0000000000000000000000000000000000000000..572112e5732e2fb9d8c5b470d44a8b0fb7e787cf GIT binary patch literal 7575 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 literal 0 HcmV?d00001 diff --git a/RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/passphraseFactor.imageset/Contents.json b/RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/passphraseFactor.imageset/Contents.json new file mode 100644 index 0000000000..dacb64ad15 --- /dev/null +++ b/RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/passphraseFactor.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "passphraseFactor.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/passphraseFactor.imageset/passphraseFactor.pdf b/RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/passphraseFactor.imageset/passphraseFactor.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7fa406721ad0e20fb4dac54c2e831d0387f998af GIT binary patch literal 1859 zcmZXVc{o&i7{{-hZq1OCrR7?VPzIS9V@U=zGm(9kmM5~za4==&)Xb3Oc8jv)3YDbn zF|MhI&@`n|$d)Zip(IPzbjy;I?ipM4^#1XC-t&Fl_xCR6JfEXUCRuLA>KP-ESO5b+ zi~~pjz~cdPb0o<26h9*Mf7H>IOkWFSj<++&SgG=Yo(p)E6t81KPKKIQdRHRqx34q0HDeo3@3+q? zl-a?dtsMF|>NfLja=iDt#ox-urh`8z-FNMb_!jO6UJCxxqE0n>4018hZZ5zkR<=$9 zwSn5XPeG6TYkZ~YPhZDbr3n^qMKS!Bg|AMtopV`^MSJ$8(oAAAhaLO;udDfJK8sF! z%HhOfgeRLsDTS@%n6!a*@&wc6)Qi<&O(K3JA^{gfZcy%1A$pX{gsb$f8)JRC#7h|I zYtf^{hArFc_N;xiW$Q?Jm4Uu&-QbCb{kQpV@QLkRxc<~ZUT_CgEAKp<;W}2=pS#ll zwKut(YT2S!a==XB5};tOQp4v4>kHMJ)5oJ?!GLQ*&FK1(WD1{*{+v^y6 zq<`>qlgZiE@a{18c2ILoe@`sm4fiEmElaoAWb$I@u8{id8$O%lWKl)0uotxh?EJve zU6aq2H;|m7w8z%tMI0QrX?<1<>xxmLnv0jHmaewjwLs|p0hH=0X5KOh_E3AKuRM#sWqy1wcxI{PyaR;cfj^LnMzSv09PL7?PV)%$>y zblWk>qm~5 z0=~GYOxc&ITc>TwcpM6phOr?;Q&XNmTAJM)?dC60b$5yoD!)5YP~(6xIBA?Ae;!xc z3)W3!b_%BMsIOI(^S}49n_!iZ90wo<+T&F$uwM~o(e4_}d4qA$ac6J(b=A{-Y86&4 zo$$(bvF~g*lb(zj{3CP7pW$EApVp|?GBahin)l*4YNsXpDH?Tf+g<2kl8quIOpB$V zWy2yyX))oC*veX$Pi%U4)y4rnd_KscUq9}MvD?vn)k%fUMr3kLy#+lIwCW{S;(?VL z;tQ)An-hfOe{(`)FH4?i6CgtT&+JdW47RCL%&YqjaBSDQ2<2>VEZO)%f*2F(*|TTg zP1nRO`y<;(3PDwhM~4lXH1<(e+YUTWI!CG8YB*Z@u5eT%VrGAtgB40$7_>s7xVkK< zo*^i1aMtsb{)53-YJ3DEsij)=K6rJl-Z7e&pluc!~g5wLYw59=Jr5Vl`sbLZK=(x>n|?r?-USPm&!pM|JJ%O>HsRL;Y}I zpf{5iVLb9RQafv_cjAz4&gT$3DLvjMJe3o04ij55h~#fwR+KW{fG!huHFPa|XBdbT z^KKqk3*-}{Y>tRntO;fjhz5%?3`+ENHXGt`0cV$a4DJd%1OjL>-FtzH_Mj(|PJjXc zX8@yznYHhZzQKa@-CMYc3UVPojt9sE#Ap^XRg768#O8r)xT2WL3nH1$fi=KzUiyLF zVrh};Xj`Ty+$tcRfC?*oM(hH;D)2E*2CwHa9qt&ZGN6-an@X za6m641~5j>jW0d{BSS-+AppzshQ$E09>89daB!buTa>Uk%$8py9K4;MqYN>>BpMoj zPvmjvOka?L6u&)d61)yAF2n*+fELpeHMbNr6@qwxc;MLuqiM__5bl2VmqzFCX2-!A N;f#@*nmZgV{|9>~@#X*k literal 0 HcmV?d00001 diff --git a/RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/passwordFactor.imageset/Contents.json b/RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/passwordFactor.imageset/Contents.json new file mode 100644 index 0000000000..ec3b2ad988 --- /dev/null +++ b/RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/passwordFactor.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "passwordFactor.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/passwordFactor.imageset/passwordFactor.pdf b/RadixWallet/Core/Resources/Resources/Assets.xcassets/FactorSourceCard/passwordFactor.imageset/passwordFactor.pdf new file mode 100644 index 0000000000000000000000000000000000000000..80fd4791d400b311e8d7b1d52ac20ea569c04cea GIT binary patch literal 11178 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 literal 0 HcmV?d00001 diff --git a/RadixWallet/Core/Resources/Resources/en.lproj/Localizable.strings b/RadixWallet/Core/Resources/Resources/en.lproj/Localizable.strings index 46a3578f00..2ad8084881 100644 --- a/RadixWallet/Core/Resources/Resources/en.lproj/Localizable.strings +++ b/RadixWallet/Core/Resources/Resources/en.lproj/Localizable.strings @@ -1380,4 +1380,4 @@ Code: %@"; "interactionReview_unknown_deposits" = "Unknown deposits to this account may occur"; "interactionReview_unknown_amount" = "Amount of deposit is unknown"; "interactionReview_atLeast" = "At least"; -"interactionReview_noMoreThan" = "No more than"; \ No newline at end of file +"interactionReview_noMoreThan" = "No more than"; diff --git a/RadixWallet/Features/AccountPreferencesFeature/Children/DeleteAccount/ChooseReceivingAccountOnDelete+View.swift b/RadixWallet/Features/AccountPreferencesFeature/Children/DeleteAccount/ChooseReceivingAccountOnDelete+View.swift index 8a6ae8d95f..bb5a6941ad 100644 --- a/RadixWallet/Features/AccountPreferencesFeature/Children/DeleteAccount/ChooseReceivingAccountOnDelete+View.swift +++ b/RadixWallet/Features/AccountPreferencesFeature/Children/DeleteAccount/ChooseReceivingAccountOnDelete+View.swift @@ -22,7 +22,7 @@ extension ChooseReceivingAccountOnDelete { .textStyle(.body1Regular) if !viewStore.hasAccountsWithEnoughXRD { - WarningErrorView( + StatusMessageView( text: L10n.AccountSettings.MoveAssets.noAccountsWarning, type: .warning, useNarrowSpacing: true, diff --git a/RadixWallet/Features/AddLedgerFactorSource/AddLedgerFactorSource.swift b/RadixWallet/Features/AddLedgerFactorSource/AddLedgerFactorSource.swift index 9a342cba85..264b83cf39 100644 --- a/RadixWallet/Features/AddLedgerFactorSource/AddLedgerFactorSource.swift +++ b/RadixWallet/Features/AddLedgerFactorSource/AddLedgerFactorSource.swift @@ -172,7 +172,7 @@ extension AlertState { AlertState { TextState(L10n.AddLedgerDevice.AlreadyAddedAlert.title) } message: { - TextState(L10n.AddLedgerDevice.AlreadyAddedAlert.message(ledger.hint.name)) + TextState(L10n.AddLedgerDevice.AlreadyAddedAlert.message(ledger.hint.label)) } } } diff --git a/RadixWallet/Features/AssetsFeature/Components/HelperViews/ResourceBalance/ResourceBalanceButton.swift b/RadixWallet/Features/AssetsFeature/Components/HelperViews/ResourceBalance/ResourceBalanceButton.swift index 6ee8a863fe..befe3e943d 100644 --- a/RadixWallet/Features/AssetsFeature/Components/HelperViews/ResourceBalance/ResourceBalanceButton.swift +++ b/RadixWallet/Features/AssetsFeature/Components/HelperViews/ResourceBalance/ResourceBalanceButton.swift @@ -33,7 +33,7 @@ struct ResourceBalanceButton: View { ResourceBalanceView(viewState, appearance: .standard, isSelected: isSelected) if let warning { - WarningErrorView(text: warning, type: .warning, useNarrowSpacing: true, useSmallerFontSize: true) + StatusMessageView(text: warning, type: .warning, useNarrowSpacing: true, useSmallerFontSize: true) } } .padding(.top, topPadding) diff --git a/RadixWallet/Features/AssetsFeature/Components/HelperViews/ResourceBalance/ResourceBalanceView.swift b/RadixWallet/Features/AssetsFeature/Components/HelperViews/ResourceBalance/ResourceBalanceView.swift index e100b03931..d75992a88b 100644 --- a/RadixWallet/Features/AssetsFeature/Components/HelperViews/ResourceBalance/ResourceBalanceView.swift +++ b/RadixWallet/Features/AssetsFeature/Components/HelperViews/ResourceBalance/ResourceBalanceView.swift @@ -470,7 +470,7 @@ extension ResourceBalanceView { .textStyle(.body2HighImportance) .foregroundStyle(.app.gray4) - WarningErrorView( + StatusMessageView( text: L10n.InteractionReview.Unknown.deposits, type: .warning, useNarrowSpacing: true, @@ -517,7 +517,7 @@ extension ResourceBalanceView { } if case .unknown = amount { - WarningErrorView( + StatusMessageView( text: L10n.InteractionReview.Unknown.amount, type: .warning, useNarrowSpacing: true, @@ -566,7 +566,7 @@ extension ResourceBalanceView { } if case .unknown = amount { - WarningErrorView( + StatusMessageView( text: L10n.InteractionReview.Unknown.amount, type: .warning, useNarrowSpacing: true, diff --git a/RadixWallet/Features/DappsAndPersonas/AuthorizedDApps/AuthorizedDApps+View.swift b/RadixWallet/Features/DappsAndPersonas/AuthorizedDApps/AuthorizedDApps+View.swift index 46887c1b45..d12f353822 100644 --- a/RadixWallet/Features/DappsAndPersonas/AuthorizedDApps/AuthorizedDApps+View.swift +++ b/RadixWallet/Features/DappsAndPersonas/AuthorizedDApps/AuthorizedDApps+View.swift @@ -51,7 +51,7 @@ extension AuthorizedDappsFeature { Thumbnail(.dapp, url: dApp.thumbnail) } if dApp.hasClaim { - WarningErrorView(text: L10n.AuthorizedDapps.pendingDeposit, type: .warning, useNarrowSpacing: true) + StatusMessageView(text: L10n.AuthorizedDapps.pendingDeposit, type: .warning, useNarrowSpacing: true) .padding(.horizontal, .medium1) .padding(.bottom, .medium3) } diff --git a/RadixWallet/Features/DebugInspectProfile/InspectProfile+View.swift b/RadixWallet/Features/DebugInspectProfile/InspectProfile+View.swift index f530eda26c..a85414fa26 100644 --- a/RadixWallet/Features/DebugInspectProfile/InspectProfile+View.swift +++ b/RadixWallet/Features/DebugInspectProfile/InspectProfile+View.swift @@ -228,7 +228,8 @@ struct DeviceFactorSouceView: View { var body: some View { Labeled("Is Main?", value: isMain) .fontWeight(.heavy) - Labeled("Name", value: deviceFactorSource.hint.name) + Labeled("Name", value: deviceFactorSource.hint.label) + Labeled("Device Name", value: deviceFactorSource.hint.deviceName) Labeled("Model", value: deviceFactorSource.hint.model) } } @@ -237,7 +238,7 @@ struct DeviceFactorSouceView: View { struct LedgerFactorSourceView: View { let ledgerFactorSource: LedgerHardwareWalletFactorSource var body: some View { - Labeled("Name", value: ledgerFactorSource.hint.name) + Labeled("Name", value: ledgerFactorSource.hint.label) Labeled("Model", value: ledgerFactorSource.hint.model.rawValue) } } diff --git a/RadixWallet/Features/DisplayEntitiesControlledByMnemonic/DisplayEntitiesControlledByMnemonic+View.swift b/RadixWallet/Features/DisplayEntitiesControlledByMnemonic/DisplayEntitiesControlledByMnemonic+View.swift index 674b7003eb..c319b7e18c 100644 --- a/RadixWallet/Features/DisplayEntitiesControlledByMnemonic/DisplayEntitiesControlledByMnemonic+View.swift +++ b/RadixWallet/Features/DisplayEntitiesControlledByMnemonic/DisplayEntitiesControlledByMnemonic+View.swift @@ -118,13 +118,13 @@ extension DisplayEntitiesControlledByMnemonic { } if viewState.promptUserToBackUpMnemonic { - WarningErrorView( + StatusMessageView( text: L10n.SecurityProblems.No3.seedPhrases, type: .warning, useNarrowSpacing: true ) } else if viewState.promptUserToImportMnemonic { - WarningErrorView( + StatusMessageView( text: L10n.SecurityProblems.No9.seedPhrases, type: .warning, useNarrowSpacing: true diff --git a/RadixWallet/Features/FactorSourceAccess/FactorSourceAccess+ViewState.swift b/RadixWallet/Features/FactorSourceAccess/FactorSourceAccess+ViewState.swift index 788fd22e71..aa783f93a8 100644 --- a/RadixWallet/Features/FactorSourceAccess/FactorSourceAccess+ViewState.swift +++ b/RadixWallet/Features/FactorSourceAccess/FactorSourceAccess+ViewState.swift @@ -58,7 +58,7 @@ extension FactorSourceAccess.State { case .device: nil case let .ledger(value): - value?.hint.name + value?.hint.label } } diff --git a/RadixWallet/Features/ImportMnemonic/ImportMnemonic+View.swift b/RadixWallet/Features/ImportMnemonic/ImportMnemonic+View.swift index 21570ab60e..1fdbcb1af6 100644 --- a/RadixWallet/Features/ImportMnemonic/ImportMnemonic+View.swift +++ b/RadixWallet/Features/ImportMnemonic/ImportMnemonic+View.swift @@ -128,7 +128,7 @@ extension ImportMnemonic { } if let warning = viewStore.warning { - WarningErrorView(text: warning, type: .warning) + StatusMessageView(text: warning, type: .warning) } if !viewStore.isWordCountFixed { @@ -296,7 +296,7 @@ extension ImportMnemonic.View { forAction: { viewStore.send(.continueButtonTapped($0)) } ) { action in if viewStore.isNonChecksummed { - WarningErrorView(text: L10n.ImportMnemonic.checksumFailure, type: .error) + StatusMessageView(text: L10n.ImportMnemonic.checksumFailure, type: .error) } Button(L10n.ImportMnemonic.importSeedPhrase, action: action) .buttonStyle(.primaryRectangular) diff --git a/RadixWallet/Features/ImportMnemonic/VerifyMnemonic/VerifyMnemonic+View.swift b/RadixWallet/Features/ImportMnemonic/VerifyMnemonic/VerifyMnemonic+View.swift index 54703df1f4..362a3076ab 100644 --- a/RadixWallet/Features/ImportMnemonic/VerifyMnemonic/VerifyMnemonic+View.swift +++ b/RadixWallet/Features/ImportMnemonic/VerifyMnemonic/VerifyMnemonic+View.swift @@ -66,7 +66,7 @@ extension VerifyMnemonic { wordsGrid(viewStore: viewStore) if viewStore.verificationFailed { - WarningErrorView(text: L10n.ImportMnemonic.checksumFailure, type: .error) + StatusMessageView(text: L10n.ImportMnemonic.checksumFailure, type: .error) } #if DEBUG diff --git a/RadixWallet/Features/ImportOlympiaLedgerAccountsAndFactorSources/ImportOlympiaLedgerAccountsAndFactorSources+View.swift b/RadixWallet/Features/ImportOlympiaLedgerAccountsAndFactorSources/ImportOlympiaLedgerAccountsAndFactorSources+View.swift index b4fa6b7e30..9b88e0de5a 100644 --- a/RadixWallet/Features/ImportOlympiaLedgerAccountsAndFactorSources/ImportOlympiaLedgerAccountsAndFactorSources+View.swift +++ b/RadixWallet/Features/ImportOlympiaLedgerAccountsAndFactorSources/ImportOlympiaLedgerAccountsAndFactorSources+View.swift @@ -62,7 +62,7 @@ extension ImportOlympiaLedgerAccountsAndFactorSources { ForEach(viewStore.usedLedgers) { ledger in Card(.app.gray5) { - Text(ledger.hint.name) + Text(ledger.hint.label) .textStyle(.secondaryHeader) .multilineTextAlignment(.leading) .flushedLeft diff --git a/RadixWallet/Features/SecurityCenterFeature/ConfigurationBackup+View.swift b/RadixWallet/Features/SecurityCenterFeature/ConfigurationBackup+View.swift index dc5840977b..c361a92e07 100644 --- a/RadixWallet/Features/SecurityCenterFeature/ConfigurationBackup+View.swift +++ b/RadixWallet/Features/SecurityCenterFeature/ConfigurationBackup+View.swift @@ -7,7 +7,7 @@ extension ConfigurationBackup.State { nil } else { L10n.ConfigurationBackup.Automated.lastBackup( - lastCloudBackup?.result.lastSuccess.map(RadixDateFormatter.string) ?? L10n.Common.none + lastCloudBackup?.result.lastSuccess.map { RadixDateFormatter.string(from: $0) } ?? L10n.Common.none ) } } diff --git a/RadixWallet/Features/SettingsFeature/DisplayMnemonics/Coordinator/DisplayMnemonics+View.swift b/RadixWallet/Features/SettingsFeature/DisplayMnemonics/Coordinator/DisplayMnemonics+View.swift index 4260d4483a..96d6a4d14d 100644 --- a/RadixWallet/Features/SettingsFeature/DisplayMnemonics/Coordinator/DisplayMnemonics+View.swift +++ b/RadixWallet/Features/SettingsFeature/DisplayMnemonics/Coordinator/DisplayMnemonics+View.swift @@ -21,7 +21,7 @@ extension DisplayMnemonics { .multilineTextAlignment(.leading) .padding(.horizontal, .medium3) - WarningErrorView(text: L10n.SeedPhrases.warning, type: .warning) + StatusMessageView(text: L10n.SeedPhrases.warning, type: .warning) .padding(.horizontal, .medium3) ForEachStore( diff --git a/RadixWallet/Features/TransactionReviewFeature/CustomizeFees/CustomizeFees+View.swift b/RadixWallet/Features/TransactionReviewFeature/CustomizeFees/CustomizeFees+View.swift index 284e6d7020..5bce54304b 100644 --- a/RadixWallet/Features/TransactionReviewFeature/CustomizeFees/CustomizeFees+View.swift +++ b/RadixWallet/Features/TransactionReviewFeature/CustomizeFees/CustomizeFees+View.swift @@ -159,9 +159,9 @@ extension CustomizeFees { } if viewState.insufficientBalance { - WarningErrorView(text: L10n.CustomizeNetworkFees.Warning.insufficientBalance, type: .error) + StatusMessageView(text: L10n.CustomizeNetworkFees.Warning.insufficientBalance, type: .error) } else if viewState.linkingNewAccount { - WarningErrorView.transactionIntroducesNewAccount() + StatusMessageView.transactionIntroducesNewAccount() } } } diff --git a/RadixWallet/Features/TransactionReviewFeature/SelectFeePayer/SelectFeePayer+View.swift b/RadixWallet/Features/TransactionReviewFeature/SelectFeePayer/SelectFeePayer+View.swift index 0d82ad9201..d49ff5c181 100644 --- a/RadixWallet/Features/TransactionReviewFeature/SelectFeePayer/SelectFeePayer+View.swift +++ b/RadixWallet/Features/TransactionReviewFeature/SelectFeePayer/SelectFeePayer+View.swift @@ -141,7 +141,7 @@ enum SelectAccountToPayForFeeRow { .padding(.medium3) if viewState.isBalanceInsufficient { - WarningErrorView(text: L10n.TransactionReview.FeePayerValidation.insufficientBalance, type: .error) + StatusMessageView(text: L10n.TransactionReview.FeePayerValidation.insufficientBalance, type: .error) .padding([.horizontal, .bottom], .medium3) } } diff --git a/RadixWallet/Features/TransactionReviewFeature/TransactionReviewNetworkFee/TransactionReviewNetworkFee+View.swift b/RadixWallet/Features/TransactionReviewFeature/TransactionReviewNetworkFee/TransactionReviewNetworkFee+View.swift index ab80f12dcc..25874af16a 100644 --- a/RadixWallet/Features/TransactionReviewFeature/TransactionReviewNetworkFee/TransactionReviewNetworkFee+View.swift +++ b/RadixWallet/Features/TransactionReviewFeature/TransactionReviewNetworkFee/TransactionReviewNetworkFee+View.swift @@ -49,11 +49,11 @@ extension TransactionReviewNetworkFee { loadable(viewStore.reviewedTransaction.feePayingValidation) { validation in switch validation { case .needsFeePayer: - WarningErrorView(text: L10n.TransactionReview.FeePayerValidation.feePayerRequired, type: .warning) + StatusMessageView(text: L10n.TransactionReview.FeePayerValidation.feePayerRequired, type: .warning) case .insufficientBalance: - WarningErrorView(text: L10n.TransactionReview.FeePayerValidation.insufficientBalance, type: .error) + StatusMessageView(text: L10n.TransactionReview.FeePayerValidation.insufficientBalance, type: .error) case .valid(.introducesNewAccount): - WarningErrorView.transactionIntroducesNewAccount() + StatusMessageView.transactionIntroducesNewAccount() case .valid: EmptyView() } diff --git a/RadixWallet/MIGRATE_TO_SARGON/Stage2/Atoms/Stage2MigrateToSargon+LedgerHardwareWalletFactorSource+New.swift b/RadixWallet/MIGRATE_TO_SARGON/Stage2/Atoms/Stage2MigrateToSargon+LedgerHardwareWalletFactorSource+New.swift index 48384bcf86..d544fa782e 100644 --- a/RadixWallet/MIGRATE_TO_SARGON/Stage2/Atoms/Stage2MigrateToSargon+LedgerHardwareWalletFactorSource+New.swift +++ b/RadixWallet/MIGRATE_TO_SARGON/Stage2/Atoms/Stage2MigrateToSargon+LedgerHardwareWalletFactorSource+New.swift @@ -33,7 +33,7 @@ extension LedgerHardwareWalletFactorSource { // crypto parameters as well (since user is unable to "edit FactorSource"). cryptoParameters: .babylonOlympiaCompatible ), - hint: .init(name: name, model: model) + hint: .init(label: name, model: model) ) } } diff --git a/RadixWalletTests/Clients/FactorSourcesClientLiveTests/FactorSourcesClientLiveTests.swift b/RadixWalletTests/Clients/FactorSourcesClientLiveTests/FactorSourcesClientLiveTests.swift index 9b2fa4d74d..6a8c5177f3 100644 --- a/RadixWalletTests/Clients/FactorSourcesClientLiveTests/FactorSourcesClientLiveTests.swift +++ b/RadixWalletTests/Clients/FactorSourcesClientLiveTests/FactorSourcesClientLiveTests.swift @@ -59,14 +59,14 @@ extension SigningFactor: Comparable { // MARK: - DeviceFactorSource + Comparable extension DeviceFactorSource: Comparable { public static func < (lhs: Self, rhs: Self) -> Bool { - lhs.hint.name < rhs.hint.name + lhs.hint.label < rhs.hint.label } } // MARK: - LedgerHardwareWalletFactorSource + Comparable extension LedgerHardwareWalletFactorSource: Comparable { public static func < (lhs: Self, rhs: Self) -> Bool { - lhs.hint.name < rhs.hint.name + lhs.hint.label < rhs.hint.label } } @@ -96,7 +96,15 @@ extension FactorSource { lastUsedOn: .now, flags: [] ), - hint: DeviceFactorSourceHint(name: name, model: "iPhone", mnemonicWordCount: .twentyFour, systemVersion: nil, hostAppVersion: nil, hostVendor: nil) + hint: DeviceFactorSourceHint( + label: name, + deviceName: "iPhone RED", + model: "iPhone SE 2nd gen", + mnemonicWordCount: .twentyFour, + systemVersion: nil, + hostAppVersion: nil, + hostVendor: nil + ) ).asGeneral } } @@ -113,7 +121,7 @@ extension FactorSource { lastUsedOn: .now, flags: [] ), - hint: .init(name: .init(name), model: .nanoS) + hint: .init(label: .init(name), model: .nanoS) ).asGeneral } } diff --git a/RadixWalletTests/TestExtensions/TestUtils.swift b/RadixWalletTests/TestExtensions/TestUtils.swift index 1a407f216f..e565c65dbd 100644 --- a/RadixWalletTests/TestExtensions/TestUtils.swift +++ b/RadixWalletTests/TestExtensions/TestUtils.swift @@ -241,7 +241,7 @@ extension PrivateHierarchicalDeterministicFactorSource { hostInfo: .sample ) bdfs.hint.model = model - bdfs.hint.name = name + bdfs.hint.label = name bdfs.common.addedOn = .init(timeIntervalSince1970: 0) bdfs.common.lastUsedOn = .init(timeIntervalSince1970: 0) return Self(mnemonicWithPassphrase: mnemonicWithPassphrase, factorSource: bdfs)