gnunet-svn
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]