[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-taler-ios] 30/69: Layout Balances
From: |
gnunet |
Subject: |
[taler-taler-ios] 30/69: Layout Balances |
Date: |
Fri, 19 Jan 2024 09:02:03 +0100 |
This is an automated email from the git hooks/post-receive script.
marc-stibane pushed a commit to branch master
in repository taler-ios.
commit 9729eecb9c94b25d25cad4a85c1260ae03be3a75
Author: Marc Stibane <marc@taler.net>
AuthorDate: Thu Jan 4 17:50:30 2024 +0100
Layout Balances
---
TalerWallet1/Views/Balances/BalanceRowView.swift | 74 ++++++++++++++++------
.../Views/Balances/BalancesSectionView.swift | 42 ++++++++----
2 files changed, 83 insertions(+), 33 deletions(-)
diff --git a/TalerWallet1/Views/Balances/BalanceRowView.swift
b/TalerWallet1/Views/Balances/BalanceRowView.swift
index c851611..30c8f38 100644
--- a/TalerWallet1/Views/Balances/BalanceRowView.swift
+++ b/TalerWallet1/Views/Balances/BalanceRowView.swift
@@ -9,34 +9,60 @@ struct BalanceButton: View {
let amountStr: String
let sizeCategory: ContentSizeCategory
let rowAction: () -> Void
+ let balanceDest: LazyView<TransactionsListView>?
@Environment(\.colorSchemeContrast) private var colorSchemeContrast
@AppStorage("iconOnly") var iconOnly: Bool = false
+ /// Renders the Balance button. "Balance" leading, amountStr trailing. If
it doesn't fit in one row then
+ /// amount (trailing) goes underneath "Balance" (leading).
var body: some View {
- let balanceTitleStr = String(localized: "Balance:", comment: "Main
view")
- Button(action: rowAction) {
- SingleAxisGeometryReader { width in // e.g. 301 instead of
313 => padding = 6
- Group {
- let title = iconOnly ? "" : balanceTitleStr
- let titles = [(balanceTitleStr, TalerFont.uiFont(.title2)),
- (amountStr, TalerFont.uiFont(.title))]
- let fitsSideBySide = iconOnly ||
Self.fitsSideBySide(titles, availableWidth: width,
-
sizeCategory: sizeCategory,
- padding: 20,
sameSize: false)
- AmountRowV(amountStr: amountStr, amountColor: .primary,
doneOrPending: true, largeAmountFont: true,
- fitsHorizontal: fitsSideBySide, vertAlignment:
.lastTextBaseline) {
- Text(title)
- .accessibilityFont(.title2)
- .foregroundColor(colorSchemeContrast == .increased
? .primary : .secondary)
- }
+ let amountText = Text(amountStr)
+ .accessibilityFont(.title)
+ .foregroundColor(.primary)
+ .monospacedDigit()
+ let hLayout = HStack(spacing: 0) {
+ Spacer(minLength: 0)
+ amountText
+ }
+ let balanceCell = Group {
+ if iconOnly {
+ hLayout
+ } else {
+ let balanceText = Text("Balance:", comment: "Main view")
+ .accessibilityFont(.title2)
+ .foregroundColor(colorSchemeContrast == .increased ?
.primary : .secondary)
+ let vLayout = VStack(alignment: .leading, spacing: 0) {
+ balanceText
+ hLayout
}
+
+ if #available(iOS 16.0, *) {
+ ViewThatFits(in: .horizontal) {
+ HStack(spacing: HSPACING) {
+ balanceText
+ hLayout
+ }
+ vLayout
+ }
+ } else { vLayout } // view for iOS 15
}
+ }
+#if TABBAR // Taler Wallet
+ NavigationLink { balanceDest } label: {
+ balanceCell
+ .accessibilityElement(children: .combine)
+ .accessibilityHint("Will go to main transactions list.")
+ }
+#else // GNU Taler
+ Button(action: rowAction) {
+ balanceCell
} .disabled(false)
.buttonStyle(TalerButtonStyle(type: iconOnly ? .plain : .balance,
aligned: .trailing))
.accessibilityElement(children: .combine)
.accessibilityHint("Will go to main transactions list.")
// .accessibilityLabel(balanceTitleStr + " " + amountStr) //
TODO: CurrencyFormatter!
+#endif
}
}
@@ -45,10 +71,12 @@ struct BalanceButton: View {
/// Balance: amount
/// [Send Money] [Request Payment]
struct BalanceRowView: View {
+ let stack: CallStack
let amount: Amount
let sendAction: () -> Void
let recvAction: () -> Void
let rowAction: () -> Void
+ let balanceDest: LazyView<TransactionsListView>?
@Environment(\.sizeCategory) var sizeCategory
@EnvironmentObject private var controller: Controller
@@ -65,12 +93,14 @@ struct BalanceRowView: View {
let requestTitle1 = String(localized: "RequestButton_Full", defaultValue:
"Request\tPayment",
comment: "`Request Payment´ in Balances - set
exactly 1 \\t for line break")
var body: some View {
- VStack (alignment: .trailing) {
+ VStack (alignment: .trailing, spacing: 6) {
let currencyInfo = controller.info(for: amount.currencyStr,
controller.currencyTicker)
let amountStr = amount.string(currencyInfo)
BalanceButton(amountStr: amountStr,
sizeCategory: sizeCategory,
- rowAction: rowAction)
+ rowAction: rowAction,
+ balanceDest: balanceDest)
+// .border(.red)
let sendTitle = iconOnly ? sendTitle0 : sendTitle1
let requTitle = iconOnly ? requestTitle0 : requestTitle1
@@ -86,7 +116,9 @@ struct BalanceRowView: View {
HStack(spacing: HSPACING) {
twoRowButtons.makeCopy(fitsSideBySide: true)
}
+// .border(.red)
VStack { twoRowButtons }
+// .border(.red)
}
} else { // view for iOS 15
VStack { twoRowButtons }
@@ -107,9 +139,11 @@ struct BalanceRowView_Previews: PreviewProvider {
List {
Section {
- BalanceRowView(amount: demo, sendAction: {}, recvAction: {},
rowAction: {})
+ BalanceRowView(stack: CallStack("Preview"), amount: demo,
+ sendAction: {}, recvAction: {}, rowAction: {},
balanceDest: nil)
}
- BalanceRowView(amount: test, sendAction: {}, recvAction: {},
rowAction: {})
+ BalanceRowView(stack: CallStack("Preview"), amount: test,
+ sendAction: {}, recvAction: {}, rowAction: {},
balanceDest: nil)
}
}
}
diff --git a/TalerWallet1/Views/Balances/BalancesSectionView.swift
b/TalerWallet1/Views/Balances/BalancesSectionView.swift
index d968ff2..0667225 100644
--- a/TalerWallet1/Views/Balances/BalancesSectionView.swift
+++ b/TalerWallet1/Views/Balances/BalancesSectionView.swift
@@ -26,6 +26,7 @@ struct BalancesSectionView {
@EnvironmentObject private var controller: Controller
@AppStorage("iconOnly") var iconOnly: Bool = false
+ @State private var showSpendingHint = true
@State private var isShowingDetailView = false
@State private var transactions: [Transaction] = []
@State private var completedTransactions: [Transaction] = []
@@ -61,11 +62,14 @@ extension BalancesSectionView: View {
let currencyInfo = controller.info(for: currency,
controller.currencyTicker)
Section {
- if "KUDOS" == currency && !balance.available.isZero {
- Text(iconOnly ? "Visit the [Demo
Shop](https://shop.demo.taler.net)" :
- "You can spend these KUDOS in the [Demo
Shop](https://shop.demo.taler.net), or send them to another wallet.")
- .accessibilityFont(.body)
- .multilineTextAlignment(.leading)
+ let showSpendingButton = "KUDOS" == currency &&
!balance.available.isZero
+ if showSpendingButton {
+ if !iconOnly && showSpendingHint {
+ Text("You can spend these KUDOS in the Demo Shop, or send
them to another wallet.")
+ .accessibilityFont(.body)
+ .multilineTextAlignment(.leading)
+ .listRowSeparator(.hidden)
+ }
}
BalancesNavigationLinksView(symLog: symLog,
stack: stack.push(),
@@ -75,6 +79,16 @@ extension BalancesSectionView: View {
completedTransactions: $completedTransactions,
reloadAllAction: reloadCompleted,
reloadOneAction: reloadOneAction)
+ if showSpendingButton {
+ let title = String(localized: "LinkTitle_DEMOSHOP",
defaultValue: "Spend test money")
+ Button(title) {
+ showSpendingHint = false
+ UIApplication.shared.open(URL(string:DEMOSHOP)!, options:
[:])
+ }
+ .buttonStyle(TalerButtonStyle(type: .bordered, narrow: false,
aligned: .center))
+ .accessibilityHint("Will go to the demo shop website.")
+ .listRowSeparator(.hidden)
+ }
if pendingTransactions.count > 0 {
BalancesPendingRowView(symLog: symLog,
stack: stack.push(),
@@ -225,7 +239,7 @@ fileprivate struct BalancesNavigationLinksView: View {
}, tag: 2, selection: $buttonSelected
) { EmptyView() }.frame(width: 0).opacity(0).hidden() //
RequestPayment
- NavigationLink(destination: LazyView {
+ let balanceDest = LazyView {
TransactionsListView(stack: stack.push(),
navTitle: String(localized: "Transactions",
comment: "ViewTitle of TransactionList"),
currency: currency,
@@ -233,17 +247,19 @@ fileprivate struct BalancesNavigationLinksView: View {
showUpDown: true,
reloadAllAction: reloadAllAction,
reloadOneAction: reloadOneAction)
- }, tag: 3, selection: $buttonSelected
- ) { EmptyView() }.frame(width: 0).opacity(0).hidden() //
TransactionsListView
+ }
+ NavigationLink(destination: balanceDest, tag: 3, selection:
$buttonSelected)
+ { EmptyView() }.frame(width: 0).opacity(0).hidden()
// TransactionsListView
- BalanceRowView(amount: balance.available,
- sendAction: {
+ BalanceRowView(stack: stack.push(),
+ amount: balance.available,
+ sendAction: {
selectAndUpdate(1) // trigger SendAmount
NavigationLink
- }, recvAction: {
+ }, recvAction: {
selectAndUpdate(2) // trigger RequestPayment
NavigationLink
- }, rowAction: {
+ }, rowAction: {
buttonSelected = 3 // trigger TransactionList
NavigationLink
- })
+ }, balanceDest: balanceDest)
}
}
}
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [taler-taler-ios] 04/69: AccountPicker, remove exchangePaytoUris, (continued)
- [taler-taler-ios] 04/69: AccountPicker, remove exchangePaytoUris, gnunet, 2024/01/19
- [taler-taler-ios] 03/69: CurrencyInfo from Exchange, gnunet, 2024/01/19
- [taler-taler-ios] 25/69: colors adapted for WCAG AA, gnunet, 2024/01/19
- [taler-taler-ios] 05/69: ToS language, gnunet, 2024/01/19
- [taler-taler-ios] 19/69: cleanup, gnunet, 2024/01/19
- [taler-taler-ios] 02/69: LoadingView, gnunet, 2024/01/19
- [taler-taler-ios] 12/69: PRINT_CHANGES, gnunet, 2024/01/19
- [taler-taler-ios] 07/69: Haptics, gnunet, 2024/01/19
- [taler-taler-ios] 31/69: Withdraw only once, gnunet, 2024/01/19
- [taler-taler-ios] 22/69: Summary in ThreeAmountsV, gnunet, 2024/01/19
- [taler-taler-ios] 30/69: Layout Balances,
gnunet <=
- [taler-taler-ios] 20/69: button color if disabled, gnunet, 2024/01/19
- [taler-taler-ios] 10/69: Exchanges->Banking, gnunet, 2024/01/19
- [taler-taler-ios] 32/69: Warnings for tx buttons, gnunet, 2024/01/19
- [taler-taler-ios] 16/69: remove about protocols, gnunet, 2024/01/19
- [taler-taler-ios] 18/69: ToS for P2P, gnunet, 2024/01/19
- [taler-taler-ios] 29/69: clearDb (instead of reset), gnunet, 2024/01/19
- [taler-taler-ios] 27/69: use minor for Status, gnunet, 2024/01/19
- [taler-taler-ios] 14/69: remove Apple Sounds, gnunet, 2024/01/19
- [taler-taler-ios] 21/69: TransactionDone popToRootView, gnunet, 2024/01/19
- [taler-taler-ios] 09/69: API 2:0:1, gnunet, 2024/01/19