commit f7750a60188e34ddedcae0cf763a926d913afba0
parent 8fbf2b46759656ae4abda0ccb722c95868532f83
Author: Marc Stibane <marc@taler.net>
Date: Sat, 18 Nov 2023 17:02:26 +0100
needsKYC badge
Diffstat:
4 files changed, 71 insertions(+), 33 deletions(-)
diff --git a/TalerWallet1/Views/Balances/BalancesSectionView.swift b/TalerWallet1/Views/Balances/BalancesSectionView.swift
@@ -193,11 +193,11 @@ fileprivate struct BalancesPendingRowView: View {
VStack(spacing: 6) {
var rows = 0
if !pendingIncoming.isZero {
- PendingRowView(amount: pendingIncoming, incoming: true)
+ PendingRowView(amount: pendingIncoming, incoming: true, shouldConfirm: false, needsKYC: false) // TODO: !!!
let _ = (rows+=1)
}
if !pendingOutgoing.isZero {
- PendingRowView(amount: pendingOutgoing, incoming: false)
+ PendingRowView(amount: pendingOutgoing, incoming: false, shouldConfirm: false, needsKYC: false)
let _ = (rows+=1)
}
if rows == 0 {
diff --git a/TalerWallet1/Views/Balances/PendingRowView.swift b/TalerWallet1/Views/Balances/PendingRowView.swift
@@ -9,6 +9,8 @@ struct PendingRowContentV: View {
let titles: (String, String?)
let isHorizontal: Bool
let incoming: Bool
+ let shouldConfirm: Bool
+ let needsKYC: Bool
public static func width(titles: (String, String?), isHorizontal: Bool,
sizeCategory: ContentSizeCategory) -> CGFloat {
@@ -37,16 +39,29 @@ struct PendingRowContentV: View {
let pendingColor = WalletColors().pendingColor(incoming)
let imageName = incoming ? "plus.diamond" // goforward.plus circle
: "minus.diamond" //
+ let badgeName = needsKYC ? "star.fill"
+ : "circle.fill"
HStack(spacing: 8) {
- Image(systemName: imageName)
- .foregroundColor(pendingColor)
- .accessibilityFont(.largeTitle)
- .accessibility(hidden: true)
-
- Text(title(titles, isHorizontal))
+ HStack(alignment: .top, spacing: -8) { // TODO: adapt spacing to dynamic fontsize
+ Image(systemName: imageName)
+ .foregroundColor(pendingColor)
+ .accessibilityFont(.largeTitle)
+ .accessibility(hidden: true)
+ Image(systemName: badgeName)
+ .accessibilityFont(.caption)
+ .foregroundColor((needsKYC || shouldConfirm) ? .red : .clear)
+ }
+ let pendingAccTitles = accessTitles(titles, isHorizontal)
+ Text(pendingAccTitles.0)
+ .accessibilityLabel(Text(pendingAccTitles.1))
.lineLimit(4)
.accessibilityFont(.body)
}
+ .accessibilityElement(children: .combine)
+ .accessibilityValue(needsKYC ? ". Needs K Y C" :
+ shouldConfirm ? ". Needs bank confirmation" : EMPTYSTRING)
+ .accessibilityHint("Will go to pending transaction list.")
+
}
}
@@ -54,6 +69,8 @@ struct PendingRowContentV: View {
struct PendingRowView: View {
let amount: Amount
let incoming: Bool
+ let shouldConfirm: Bool
+ let needsKYC: Bool
@Environment(\.sizeCategory) var sizeCategory
@EnvironmentObject private var controller: Controller
@@ -88,20 +105,21 @@ struct PendingRowView: View {
let currencyInfo = controller.info(for: amount.currencyStr, controller.currencyTicker)
let amountStr = amount.string(currencyInfo)
let amountWidth = amountStr.width(largeAmountFont: false, sizeCategory)
- let inTitle = iconOnly ? (inTitle0, nil)
- : (inTitle1, inTitle2)
- let outTitle = iconOnly ? (outTitle0, nil)
- : (outTitle1, outTitle2)
- let title = incoming ? inTitle
- : outTitle
- let contentWidth = PendingRowContentV.width(titles: incoming ? inTitle : outTitle,
- isHorizontal: false, sizeCategory: sizeCategory)
-
+ let inTitles = iconOnly ? (inTitle0, nil)
+ : (inTitle1, inTitle2)
+ let outTitles = iconOnly ? (outTitle0, nil)
+ : (outTitle1, outTitle2)
+ let titles = incoming ? inTitles
+ : outTitles
+ let contentWidth = PendingRowContentV.width(titles: titles,
+ isHorizontal: false,
+ sizeCategory: sizeCategory)
let needVStack = needVStack(available: width, contentWidth: contentWidth, valueWidth: amountWidth)
AmountRowV(amountStr: amountStr, amountColor: pendingColor, largeAmountFont: false,
fitsHorizontal: !needVStack, vertAlignment: .center) {
// isHorizontal=true to try to fit "- Pending outgoing" + amount in 1 line
- PendingRowContentV(titles: title, isHorizontal: true, incoming: incoming)
+ PendingRowContentV(titles: titles, isHorizontal: true, incoming: incoming,
+ shouldConfirm: shouldConfirm, needsKYC: needsKYC)
}
}
}
@@ -117,8 +135,8 @@ func PreviewCurrencyInfo(_ currency: String, digits: Int) -> CurrencyInfo {
fractionalNormalDigits: digits,
fractionalTrailingZeroDigits: digits,
altUnitNames: [0 : unitName])
- let formatter = CurrencyFormatter.formatter(scope: scope, specs: specs)
- return CurrencyInfo(scope: scope, specs: specs, formatter: formatter)
+ let previewFormatter = CurrencyFormatter.formatter(scope: scope, specs: specs)
+ return CurrencyInfo(scope: scope, specs: specs, formatter: previewFormatter)
}
@MainActor
@@ -127,8 +145,8 @@ fileprivate struct Preview_Content: View {
let test = Amount(currency: TESTCURRENCY, cent: 123)
let demo = Amount(currency: DEMOCURRENCY, cent: 123456)
List {
- PendingRowView(amount: test, incoming: true)
- PendingRowView(amount: demo, incoming: false)
+ PendingRowView(amount: test, incoming: true, shouldConfirm: true, needsKYC: false)
+ PendingRowView(amount: demo, incoming: false, shouldConfirm: false, needsKYC: true)
}
}
}
diff --git a/TalerWallet1/Views/Balances/TwoRowButtons.swift b/TalerWallet1/Views/Balances/TwoRowButtons.swift
@@ -6,13 +6,14 @@ import SwiftUI
import taler_swift
extension View {
- func title(_ titles: (String, String?), _ fitsSideBySide: Bool) -> String {
- let delimiter = fitsSideBySide ? "\n" : " "
+ func accessTitles(_ titles: (String, String?), _ fitsSideBySide: Bool) -> (String, String) {
+ let space = " "
+ let delimiter = fitsSideBySide ? "\n" : space
let (title1, title2) = titles
if let title2 {
- return title1 + delimiter + title2
+ return (title1 + delimiter + title2, title1 + space + title2)
} else {
- return title1
+ return (title1, title1)
}
}
}
@@ -29,13 +30,17 @@ struct TwoRowButtons: View {
var body: some View {
Group {
- Button(title(sendTitles, fitsSideBySide), action: sendAction)
+ let sendAccTitles = accessTitles(sendTitles, fitsSideBySide)
+ Button(sendAccTitles.0, action: sendAction)
+ .accessibilityLabel(Text(sendAccTitles.1))
.lineLimit(lineLimit)
.disabled(sendDisabled)
.buttonStyle(TalerButtonStyle(type: .bordered,
dimmed: false,
aligned: .center))
- Button(title(recvTitles, fitsSideBySide), action: recvAction)
+ let recvAccTitles = accessTitles(recvTitles, fitsSideBySide)
+ Button(recvAccTitles.0, action: recvAction)
+ .accessibilityLabel(Text(recvAccTitles.1))
.lineLimit(lineLimit)
.disabled(false)
.buttonStyle(TalerButtonStyle(type: .bordered,
diff --git a/TalerWallet1/Views/Transactions/TransactionRowView.swift b/TalerWallet1/Views/Transactions/TransactionRowView.swift
@@ -10,6 +10,8 @@ struct TransactionRowContentV: View {
var centerBottom: String
let isHorizontal: Bool
let incoming: Bool
+ let shouldConfirm: Bool
+ let needsKYC: Bool
let foreColor:Color
public static func width(titles: (String, String?), isHorizontal: Bool,
@@ -39,11 +41,18 @@ struct TransactionRowContentV: View {
var body: some View {
let imageName = incoming ? "plus.circle.fill"
: "minus.circle.fill"
+ let badgeName = needsKYC ? "star.fill"
+ : "circle.fill"
HStack(spacing: 8) {
- Image(systemName: imageName)
- .foregroundColor(foreColor)
- .accessibilityFont(.largeTitle)
- .accessibility(hidden: true)
+ HStack(alignment: .top, spacing: -8) { // TODO: adapt spacing to dynamic fontsize
+ Image(systemName: imageName)
+ .foregroundColor(foreColor)
+ .accessibilityFont(.largeTitle)
+ .accessibility(hidden: true)
+ Image(systemName: badgeName)
+ .accessibilityFont(.caption)
+ .foregroundColor((needsKYC || shouldConfirm) ? .red : .clear)
+ }.accessibilityHidden(true)
VStack(alignment: .leading) {
Text(centerTop)
@@ -72,6 +81,8 @@ struct TransactionRowView: View {
let common = transaction.common
let amount = common.amountEffective
let pending = transaction.isPending
+ let needsKYC = transaction.isPendingKYC
+ let shouldConfirm = transaction.shouldConfirm
let done = transaction.isDone
let details = transaction.detailsToShow()
let keys = details.keys
@@ -95,9 +106,13 @@ struct TransactionRowView: View {
fitsHorizontal: !needVStack, vertAlignment: .center) {
TransactionRowContentV(centerTop: transaction.localizedType,
- centerBottom: dateString, isHorizontal: true, incoming: incoming, foreColor: foreColor)
+ centerBottom: dateString, isHorizontal: true,
+ incoming: incoming, shouldConfirm: shouldConfirm,
+ needsKYC: needsKYC, foreColor: foreColor)
}
.accessibilityElement(children: .combine)
+ .accessibilityValue(needsKYC ? ". Needs K Y C" :
+ shouldConfirm ? ". Needs bank confirmation" : EMPTYSTRING)
.accessibilityHint("Will go to detail view.")
}
}