gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-taler-ios] branch master updated (686fcd4 -> 9f7de5c)


From: gnunet
Subject: [taler-taler-ios] branch master updated (686fcd4 -> 9f7de5c)
Date: Thu, 26 Oct 2023 13:21:26 +0200

This is an automated email from the git hooks/post-receive script.

marc-stibane pushed a change to branch master
in repository taler-ios.

    from 686fcd4  Bump version to 0.9.3 (21)
     new a4faa7d  Different Icon for Taler Wallet
     new 8767f5a  Adjust volume for payment sounds
     new 8f3d547  Accessibility: QR, Date
     new 4e340f5  Abbreviations
     new 3a8281d  Currency Symbol
     new b6f5846  Fixed Balances layout for dynamic font sizes (Previews work 
again)
     new 9f7de5c  Bump version to 0.9.3 (22)

The 7 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 TalerWallet.xcodeproj/project.pbxproj              |  16 +++---
 .../Contents.json                                  |   0
 .../AppIcon2.appiconset/appstore1024.png           | Bin 0 -> 924900 bytes
 .../AppIcon2.appiconset/iphone120.png              | Bin 0 -> 41529 bytes
 .../AppIcon2.appiconset/iphone180.png              | Bin 0 -> 82634 bytes
 .../AppIcon2.appiconset/notification40.png         | Bin 0 -> 8808 bytes
 .../AppIcon2.appiconset/notification60.png         | Bin 0 -> 15046 bytes
 .../AppIcon2.appiconset/settings58.png             | Bin 0 -> 14203 bytes
 .../AppIcon2.appiconset/settings87.png             | Bin 0 -> 25467 bytes
 .../AppIcon2.appiconset/spotlight120.png           | Bin 0 -> 41529 bytes
 .../AppIcon2.appiconset/spotlight80.png            | Bin 0 -> 21614 bytes
 TalerWallet1/Helper/Controller+playSound.swift     |  33 ++++++++++--
 TalerWallet1/Helper/CurrencySpecification.swift    |  15 ++++--
 TalerWallet1/Helper/TalerDater.swift               |  16 ++++--
 TalerWallet1/Views/Balances/BalanceRowView.swift   |  56 ++++++++++++--------
 TalerWallet1/Views/Balances/PendingRowView.swift   |  32 +++++++-----
 TalerWallet1/Views/Exchange/ExchangeRowView.swift  |   2 +-
 .../Views/HelperViews/QRCodeDetailView.swift       |   1 +
 .../Views/HelperViews/View+needVStack.swift        |  57 +++++++++++++++------
 .../Views/Settings/Pending/PendingOpView.swift     |   2 +-
 .../Views/Sheets/P2P_Sheets/P2pPayURIView.swift    |  12 +++--
 .../Sheets/P2P_Sheets/P2pReceiveURIView.swift      |   4 +-
 .../Views/Sheets/Payment/PayTemplateView.swift     |  25 +++++----
 .../Views/Sheets/Payment/PaymentView.swift         |  25 +++++----
 .../WithdrawBankIntegrated/WithdrawURIView.swift   |   4 +-
 TalerWallet1/Views/Transactions/ThreeAmounts.swift |  32 +++++++++---
 .../Views/Transactions/TransactionDetailView.swift |  49 ++++++++++++++----
 .../Views/Transactions/TransactionRowView.swift    |   2 +-
 TestFlight/WhatToTest.en-US.txt                    |   5 ++
 29 files changed, 272 insertions(+), 116 deletions(-)
 copy TalerWallet1/Assets.xcassets/{AppIcon.appiconset => 
AppIcon2.appiconset}/Contents.json (100%)
 create mode 100644 
TalerWallet1/Assets.xcassets/AppIcon2.appiconset/appstore1024.png
 create mode 100644 
TalerWallet1/Assets.xcassets/AppIcon2.appiconset/iphone120.png
 create mode 100644 
TalerWallet1/Assets.xcassets/AppIcon2.appiconset/iphone180.png
 create mode 100644 
TalerWallet1/Assets.xcassets/AppIcon2.appiconset/notification40.png
 create mode 100644 
TalerWallet1/Assets.xcassets/AppIcon2.appiconset/notification60.png
 create mode 100644 
TalerWallet1/Assets.xcassets/AppIcon2.appiconset/settings58.png
 create mode 100644 
TalerWallet1/Assets.xcassets/AppIcon2.appiconset/settings87.png
 create mode 100644 
TalerWallet1/Assets.xcassets/AppIcon2.appiconset/spotlight120.png
 create mode 100644 
TalerWallet1/Assets.xcassets/AppIcon2.appiconset/spotlight80.png

diff --git a/TalerWallet.xcodeproj/project.pbxproj 
b/TalerWallet.xcodeproj/project.pbxproj
index 34e503c..16114b3 100644
--- a/TalerWallet.xcodeproj/project.pbxproj
+++ b/TalerWallet.xcodeproj/project.pbxproj
@@ -1291,7 +1291,7 @@
                                CODE_SIGN_ENTITLEMENTS = 
"$(TARGET_NAME).entitlements";
                                CODE_SIGN_IDENTITY = "Apple Development";
                                CODE_SIGN_STYLE = Automatic;
-                               CURRENT_PROJECT_VERSION = 21;
+                               CURRENT_PROJECT_VERSION = 22;
                                DEVELOPMENT_TEAM = GUDDQ9428Y;
                                ENABLE_PREVIEWS = YES;
                                GENERATE_INFOPLIST_FILE = YES;
@@ -1316,6 +1316,7 @@
                                SUPPORTED_PLATFORMS = "iphoneos 
iphonesimulator";
                                SUPPORTS_MACCATALYST = NO;
                                SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+                               SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
                                SWIFT_EMIT_LOC_STRINGS = YES;
                                TARGETED_DEVICE_FAMILY = 1;
                                VALIDATE_WORKSPACE = YES;
@@ -1331,7 +1332,7 @@
                                CODE_SIGN_ENTITLEMENTS = 
"$(TARGET_NAME).entitlements";
                                CODE_SIGN_IDENTITY = "Apple Development";
                                CODE_SIGN_STYLE = Automatic;
-                               CURRENT_PROJECT_VERSION = 21;
+                               CURRENT_PROJECT_VERSION = 22;
                                DEVELOPMENT_TEAM = GUDDQ9428Y;
                                ENABLE_PREVIEWS = YES;
                                GENERATE_INFOPLIST_FILE = YES;
@@ -1356,6 +1357,7 @@
                                SUPPORTED_PLATFORMS = "iphoneos 
iphonesimulator";
                                SUPPORTS_MACCATALYST = NO;
                                SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+                               SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
                                SWIFT_EMIT_LOC_STRINGS = YES;
                                TARGETED_DEVICE_FAMILY = 1;
                                VALIDATE_WORKSPACE = YES;
@@ -1483,12 +1485,12 @@
                D14AFD4824D232B500C51073 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+                               ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon2;
                                CLANG_ENABLE_MODULES = YES;
                                CODE_SIGN_ENTITLEMENTS = 
"$(TARGET_NAME).entitlements";
                                CODE_SIGN_IDENTITY = "Apple Development";
                                CODE_SIGN_STYLE = Automatic;
-                               CURRENT_PROJECT_VERSION = 21;
+                               CURRENT_PROJECT_VERSION = 22;
                                DEVELOPMENT_TEAM = GUDDQ9428Y;
                                ENABLE_PREVIEWS = YES;
                                GENERATE_INFOPLIST_FILE = YES;
@@ -1513,6 +1515,7 @@
                                SUPPORTED_PLATFORMS = "iphoneos 
iphonesimulator";
                                SUPPORTS_MACCATALYST = NO;
                                SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+                               SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
                                SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG 
TABBAR";
                                SWIFT_EMIT_LOC_STRINGS = YES;
                                TARGETED_DEVICE_FAMILY = 1;
@@ -1523,13 +1526,13 @@
                D14AFD4924D232B500C51073 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+                               ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon2;
                                ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME 
= AccentColor;
                                CLANG_ENABLE_MODULES = YES;
                                CODE_SIGN_ENTITLEMENTS = 
"$(TARGET_NAME).entitlements";
                                CODE_SIGN_IDENTITY = "Apple Development";
                                CODE_SIGN_STYLE = Automatic;
-                               CURRENT_PROJECT_VERSION = 21;
+                               CURRENT_PROJECT_VERSION = 22;
                                DEVELOPMENT_TEAM = GUDDQ9428Y;
                                ENABLE_PREVIEWS = YES;
                                GENERATE_INFOPLIST_FILE = YES;
@@ -1554,6 +1557,7 @@
                                SUPPORTED_PLATFORMS = "iphoneos 
iphonesimulator";
                                SUPPORTS_MACCATALYST = NO;
                                SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+                               SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
                                SWIFT_ACTIVE_COMPILATION_CONDITIONS = TABBAR;
                                SWIFT_EMIT_LOC_STRINGS = YES;
                                TARGETED_DEVICE_FAMILY = 1;
diff --git a/TalerWallet1/Assets.xcassets/AppIcon.appiconset/Contents.json 
b/TalerWallet1/Assets.xcassets/AppIcon2.appiconset/Contents.json
similarity index 100%
copy from TalerWallet1/Assets.xcassets/AppIcon.appiconset/Contents.json
copy to TalerWallet1/Assets.xcassets/AppIcon2.appiconset/Contents.json
diff --git a/TalerWallet1/Assets.xcassets/AppIcon2.appiconset/appstore1024.png 
b/TalerWallet1/Assets.xcassets/AppIcon2.appiconset/appstore1024.png
new file mode 100644
index 0000000..f77e019
Binary files /dev/null and 
b/TalerWallet1/Assets.xcassets/AppIcon2.appiconset/appstore1024.png differ
diff --git a/TalerWallet1/Assets.xcassets/AppIcon2.appiconset/iphone120.png 
b/TalerWallet1/Assets.xcassets/AppIcon2.appiconset/iphone120.png
new file mode 100644
index 0000000..1b79c26
Binary files /dev/null and 
b/TalerWallet1/Assets.xcassets/AppIcon2.appiconset/iphone120.png differ
diff --git a/TalerWallet1/Assets.xcassets/AppIcon2.appiconset/iphone180.png 
b/TalerWallet1/Assets.xcassets/AppIcon2.appiconset/iphone180.png
new file mode 100644
index 0000000..b08f228
Binary files /dev/null and 
b/TalerWallet1/Assets.xcassets/AppIcon2.appiconset/iphone180.png differ
diff --git 
a/TalerWallet1/Assets.xcassets/AppIcon2.appiconset/notification40.png 
b/TalerWallet1/Assets.xcassets/AppIcon2.appiconset/notification40.png
new file mode 100644
index 0000000..acb063a
Binary files /dev/null and 
b/TalerWallet1/Assets.xcassets/AppIcon2.appiconset/notification40.png differ
diff --git 
a/TalerWallet1/Assets.xcassets/AppIcon2.appiconset/notification60.png 
b/TalerWallet1/Assets.xcassets/AppIcon2.appiconset/notification60.png
new file mode 100644
index 0000000..d536991
Binary files /dev/null and 
b/TalerWallet1/Assets.xcassets/AppIcon2.appiconset/notification60.png differ
diff --git a/TalerWallet1/Assets.xcassets/AppIcon2.appiconset/settings58.png 
b/TalerWallet1/Assets.xcassets/AppIcon2.appiconset/settings58.png
new file mode 100644
index 0000000..4e4148c
Binary files /dev/null and 
b/TalerWallet1/Assets.xcassets/AppIcon2.appiconset/settings58.png differ
diff --git a/TalerWallet1/Assets.xcassets/AppIcon2.appiconset/settings87.png 
b/TalerWallet1/Assets.xcassets/AppIcon2.appiconset/settings87.png
new file mode 100644
index 0000000..8f6f09b
Binary files /dev/null and 
b/TalerWallet1/Assets.xcassets/AppIcon2.appiconset/settings87.png differ
diff --git a/TalerWallet1/Assets.xcassets/AppIcon2.appiconset/spotlight120.png 
b/TalerWallet1/Assets.xcassets/AppIcon2.appiconset/spotlight120.png
new file mode 100644
index 0000000..1b79c26
Binary files /dev/null and 
b/TalerWallet1/Assets.xcassets/AppIcon2.appiconset/spotlight120.png differ
diff --git a/TalerWallet1/Assets.xcassets/AppIcon2.appiconset/spotlight80.png 
b/TalerWallet1/Assets.xcassets/AppIcon2.appiconset/spotlight80.png
new file mode 100644
index 0000000..b5a0c93
Binary files /dev/null and 
b/TalerWallet1/Assets.xcassets/AppIcon2.appiconset/spotlight80.png differ
diff --git a/TalerWallet1/Helper/Controller+playSound.swift 
b/TalerWallet1/Helper/Controller+playSound.swift
index bf6a784..7e76e36 100644
--- a/TalerWallet1/Helper/Controller+playSound.swift
+++ b/TalerWallet1/Helper/Controller+playSound.swift
@@ -10,13 +10,34 @@ extension Controller {
 
     /// 0 = failure, 1 = received, 2 = sent
     @MainActor func playSound(_ number: Int) {
+        let sysVolume = AVAudioSession.sharedInstance().outputVolume
+        let volume = sysVolume < 0.16 ? 2.5     // too bad we cannot make it 
louder
+                   : sysVolume < 0.21 ? 1.5     // nope, doesn't work
+                   : sysVolume < 0.26 ? 1.0     // this is full volume...
+                   : sysVolume < 0.31 ? 0.9     // and
+//                 : sysVolume < 0.36 ?
+                   : sysVolume < 0.41 ? 0.8     // we
+//                 : sysVolume < 0.46 ?
+                   : sysVolume < 0.51 ? 0.7     // must
+                   : sysVolume < 0.56 ? 0.6     // reduce
+//                 : sysVolume < 0.61 ?
+                   : sysVolume < 0.66 ? 0.5     // it,
+                   : sysVolume < 0.71 ? 0.4     // or
+                   : sysVolume < 0.76 ? 0.3     // it'll
+                   : sysVolume < 0.81 ? 0.2     // play
+                   : sysVolume < 0.86 ? 0.15    // way
+                   : sysVolume < 0.91 ? 0.10    // too
+                                      : 0.07    // loud!
+//        logger.log("❗️sys:\(sysVolume)  vol:\(volume)")
+
         var soundID: SystemSoundID = 0
         let notificationGenerator = useHaptics ? 
UINotificationFeedbackGenerator() : nil
         if number > 9 {
             soundID = UInt32(number)
         } else {
             let sound = (number == 0) ? "payment_failure" :
-                        (number == 1) ? "payment_success" : "PaymentReceived"
+                        (number == 1) ? "payment_success"
+                                      : "PaymentReceived"
             let fileURL = URL(fileURLWithPath: 
"/System/Library/Audio/UISounds/"
                               + sound + ".caf")
             AudioServicesCreateSystemSoundID(fileURL as CFURL, &soundID)
@@ -25,13 +46,14 @@ extension Controller {
         if number == 0 || number > 9 || playSounds < 0 {
             AudioServicesPlaySystemSound(soundID);
         } else if playSounds > 0 {
-            if let url = Bundle.main.url(forResource: (number == 1) ? 
"payment_received"
-                                                                    : 
"payment_sent",
-                                         withExtension: "m4a") {
+            if let url = Bundle.main.url(forResource: (number == 1) ? 
"payment_sent"
+                                                                    : 
"payment_received",
+                                       withExtension: "m4a") {
                 player.removeAllItems()
                 player.insert(AVPlayerItem(url: url), after: nil)
-                logger.log("\(url, privacy: .public) \(soundID)")
+                logger.log("\(url, privacy: .public)")
                 player.play()
+                player.volume = Float(volume)
             } else {
                 AudioServicesPlaySystemSound(soundID);
             }
@@ -39,5 +61,6 @@ extension Controller {
         if let notificationGenerator {
             notificationGenerator.notificationOccurred(number == 0 ? .error : 
.success)
         }
+
     }
 }
diff --git a/TalerWallet1/Helper/CurrencySpecification.swift 
b/TalerWallet1/Helper/CurrencySpecification.swift
index cbbefc1..9adff4b 100644
--- a/TalerWallet1/Helper/CurrencySpecification.swift
+++ b/TalerWallet1/Helper/CurrencySpecification.swift
@@ -27,6 +27,15 @@ public struct CurrencyInfo {
         }
     }
 
+    func symbol() -> String? {
+        if formatter.hasAltUnitName0 {
+            if let symbol = specs.altUnitNames?[0] {
+                return symbol
+            }
+        }
+        return nil
+    }
+
     func string(for valueTuple: (Double, Double), useSymbol: Bool = true) -> 
String {
         formatter.setUseSymbol(useSymbol)
         let (integer, fraction) = valueTuple
@@ -70,10 +79,8 @@ public struct CurrencyInfo {
         // we need to format ourselves
         var currencyName = scope.currency
         if useSymbol {
-            if formatter.hasAltUnitName0 {
-                if let symbol = specs.altUnitNames?[0] {
-                    currencyName = symbol
-                }
+            if let symbol = symbol() {
+                currencyName = symbol
             }
         }
         var madeUpStr = currencyName + " " + String(integer)
diff --git a/TalerWallet1/Helper/TalerDater.swift 
b/TalerWallet1/Helper/TalerDater.swift
index 2629900..5bde4bc 100644
--- a/TalerWallet1/Helper/TalerDater.swift
+++ b/TalerWallet1/Helper/TalerDater.swift
@@ -54,21 +54,29 @@ public class TalerDater: DateFormatter {
         }
     }
 
+//    public static func date(from: Timestamp) -> Date {
+//        let milliseconds = try from.milliseconds()
+//        let date = Date(milliseconds: milliseconds)
+//        return date
+//    }
+
     /// converts a timestamp into a formatted date string
-    public static func dateString(from: Timestamp, relative: Bool = false) -> 
String {
+    public static func dateString(from: Timestamp, relative: Bool = false) -> 
(String, Date?) {
         do {
             let milliseconds = try from.milliseconds()
             let date = Date(milliseconds: milliseconds)
+//            let date = date(from: from)
             if relative {
                 let now = Date.now
                 let timeInterval = now.timeIntervalSince(date)
                 if let relativeDate = relativeDate(from: timeInterval) {
-                    return relativeDate
+                    return (relativeDate, date)
                 }
             }
-            return shared.string(from: date)
+            return (shared.string(from: date), date)
         } catch {       // Never
-            return "Never"
+//            let never = LocalizedString("Never")
+            return ("Never", nil)
         }
     }
 
diff --git a/TalerWallet1/Views/Balances/BalanceRowView.swift 
b/TalerWallet1/Views/Balances/BalanceRowView.swift
index 27ded57..fabbe63 100644
--- a/TalerWallet1/Views/Balances/BalanceRowView.swift
+++ b/TalerWallet1/Views/Balances/BalanceRowView.swift
@@ -35,6 +35,7 @@ struct BalanceLabel: View {
 
 struct BalanceButton: View {
     let amountStr: String
+    let correctForSize: CGFloat
     let rowAction: () -> Void
 
     @AppStorage("iconOnly") var iconOnly: Bool = false
@@ -44,11 +45,11 @@ struct BalanceButton: View {
         Button(action: rowAction) {
             SingleAxisGeometryReader { width in
                 Group {
-                    let balancesFont = TalerFont.uiFont(.title2)
-                    let amountFont = TalerFont.uiFont(.title)
-                    let titles = [(balanceTitle, balancesFont),
-                                  (amountStr, amountFont)]
-                    let needVStack = !iconOnly && Self.needVStack(titles, 
width: width, spacing: HSPACING, sameSize: false)
+                    let titles = [(balanceTitle, TalerFont.uiFont(.title2)),
+                                  (amountStr,    TalerFont.uiFont(.title))]
+                    let needVStack = !iconOnly && Self.needVStack(titles, 
width: width,
+                                                                  
correctForSize: correctForSize,
+                                                                  spacing: 
HSPACING, sameSize: false)
                     if needVStack {
                         VStack(alignment: .leading, spacing: 0) {
                             BalanceLabel(balanceTitle: balanceTitle, 
horizontal: false, amountStr: amountStr, iconOnly: iconOnly)
@@ -85,10 +86,12 @@ struct BalanceRowView: View {
     let requestTitle2 = String(localized: "Payment", comment: "Bottom of 
button <Request Payment>")
 
     var body: some View {
+        let correctForSize = Self.correctForSize(sizeCategory)
         SingleAxisGeometryReader { width in
             VStack (alignment: .trailing) {
                 let amountStr = currencyInfo?.string(for: amount.valueAsTuple)
                 BalanceButton(amountStr: amountStr ?? amount.valueStr,
+                         correctForSize: correctForSize,
                               rowAction: rowAction)
                 let uiFont = TalerFont.uiFont(.title3)
                 let titles = [(requestTitle1, uiFont), (requestTitle2, 
uiFont), (sendTitle1, uiFont), (sendTitle2, uiFont)]
@@ -98,42 +101,53 @@ struct BalanceRowView: View {
                                                   lineLimit: 5, sendDisabled: 
amount.isZero,
                                                   sendAction: sendAction, 
recvAction: recvAction)
 //  let _ = print("Screenwidth: \(UIScreen.screenWidth)  Geometry: \(width)  
\(sizeCategory): \(sizeCategory)")
-                if Self.needVStack(titles, width: width, spacing: HSPACING) {
+                if Self.needVStack(titles, width: width, correctForSize: 
correctForSize, spacing: HSPACING) {
                     VStack { twoRowButtons }
                 } else {
                     HStack(spacing: HSPACING) { twoRowButtons }
                 }
             }
-            .accessibilityElement(children: .combine)
+//            .accessibilityElement(children: .combine)
         }
     }
 }
 // MARK: -
-#if false // DEBUG
-struct BalanceRowView_Previews: PreviewProvider {
-    static var previews: some View {
+#if  DEBUG
+
+struct SomeBalanceRows: View {
+    @Environment(\.sizeCategory) var sizeCategory
+
+    var body: some View {
+        let testInfo = PreviewCurrencyInfo(TESTCURRENCY, digits: 0)
+        let demoInfo = PreviewCurrencyInfo(TESTCURRENCY, digits: 2)
         let test = try! Amount(fromString: TESTCURRENCY + ":1.23")
-        let demo = try! Amount(fromString: DEMOCURRENCY + ":1234.56")
+        let demo = try! Amount(fromString: DEMOCURRENCY + ":1234.12")
+        let testStr = testInfo.string(for: test.valueAsTuple)
+        let demoStr = demoInfo.string(for: demo.valueAsTuple)
+
+        let correctForSize = Self.correctForSize(sizeCategory)
+
         List {
             Section {
-                HStack(alignment: .lastTextBaseline) {
-                    BalanceLabel(balanceTitle: "BalanceA:", horizontal: true, 
amountStr: test.valueStr, iconOnly: false)
-                        .listRowSeparator(.hidden)
-                }
-            }
-            Section {
-                BalanceLabel(balanceTitle: "Balance:", horizontal: false, 
amountStr: demo.valueStr, iconOnly: false)
+                BalanceLabel(balanceTitle: "Balance:", horizontal: false, 
amountStr: demoStr, iconOnly: false)
                     .listRowSeparator(.hidden)
             }
             Section {
-                BalanceButton(amountStr: demo.valueStr, rowAction: {})
+                BalanceButton(amountStr: testStr, correctForSize: 
correctForSize, rowAction: {})
                     .listRowSeparator(.hidden)
             }
             Section {
-                BalanceRowView(amount: demo, sendAction: {}, recvAction: {}, 
rowAction: {})
+                BalanceRowView(amount: demo, currencyInfo: demoInfo, 
sendAction: {}, recvAction: {}, rowAction: {})
             }
-            BalanceRowView(amount: test, sendAction: {}, recvAction: {}, 
rowAction: {})
+            BalanceRowView(amount: test, currencyInfo: testInfo, sendAction: 
{}, recvAction: {}, rowAction: {})
         }
+
+    }
+}
+
+struct BalanceRowView_Previews: PreviewProvider {
+    static var previews: some View {
+        SomeBalanceRows()
     }
 }
 #endif
diff --git a/TalerWallet1/Views/Balances/PendingRowView.swift 
b/TalerWallet1/Views/Balances/PendingRowView.swift
index 6604bc1..f999c3f 100644
--- a/TalerWallet1/Views/Balances/PendingRowView.swift
+++ b/TalerWallet1/Views/Balances/PendingRowView.swift
@@ -139,24 +139,30 @@ struct PendingRowView: View {
 }
 // MARK: -
 #if DEBUG
+
+func PreviewCurrencyInfo(_ currency: String, digits: Int) -> CurrencyInfo {
+    let unitName = digits == 0 ? "¥" : "€"
+    let scope = ScopeInfo(type: .global, currency: currency)
+    let specs = CurrencySpecification(name: TESTCURRENCY,
+//                        decimalSeparator: ".", groupSeparator: "'",
+                     fractionalInputDigits: digits,
+                    fractionalNormalDigits: digits,
+              fractionalTrailingZeroDigits: digits,
+//                   isCurrencyNameLeading: true,
+                              altUnitNames: [0 : unitName])
+    let formatter = CurrencyFormatter.formatter(scope: scope, specs: specs)
+    return CurrencyInfo(scope: scope, specs: specs, formatter: formatter)
+}
+
 struct PendingRowView_Previews: PreviewProvider {
     static var previews: some View {
-        let scope = ScopeInfo(type: .global, currency: TESTCURRENCY)
-        let specs = CurrencySpecification(name: TESTCURRENCY,
-//                                          decimalSeparator: ".", 
groupSeparator: "'",
-                                          fractionalInputDigits: 0,
-                                          fractionalNormalDigits: 0,
-                                          fractionalTrailingZeroDigits: 0,
-//                                          isCurrencyNameLeading: true,
-                                          altUnitNames: [0 : "¥"])
-        let formatter = CurrencyFormatter.formatter(scope: scope,
-                                                    specs: specs)
-        let currencyInfo = CurrencyInfo(scope: scope, specs: specs, formatter: 
formatter)
+        let testInfo = PreviewCurrencyInfo(TESTCURRENCY, digits: 0)
+        let demoInfo = PreviewCurrencyInfo(TESTCURRENCY, digits: 2)
         let test = try! Amount(fromString: TESTCURRENCY + ":1.23")
         let demo = try! Amount(fromString: DEMOCURRENCY + ":1234.56")
         List {
-            PendingRowView(amount: test, currencyInfo: currencyInfo, incoming: 
true)
-            PendingRowView(amount: demo, currencyInfo: currencyInfo, incoming: 
false)
+            PendingRowView(amount: test, currencyInfo: testInfo, incoming: 
true)
+            PendingRowView(amount: demo, currencyInfo: demoInfo, incoming: 
false)
         }
     }
 }
diff --git a/TalerWallet1/Views/Exchange/ExchangeRowView.swift 
b/TalerWallet1/Views/Exchange/ExchangeRowView.swift
index fa08d80..f1cf984 100644
--- a/TalerWallet1/Views/Exchange/ExchangeRowView.swift
+++ b/TalerWallet1/Views/Exchange/ExchangeRowView.swift
@@ -59,7 +59,7 @@ struct ExchangeRowView: View {
                                                   lineLimit: 5, sendDisabled: 
true,     // TODO: amount.isZero
                                                  sendAction: { 
selectAndUpdate(1) },
                                                  recvAction: { 
selectAndUpdate(2) })
-                if Self.needVStack(titles, width: width, spacing: HSPACING + 
4, currency: currency) {
+                if Self.needVStack(titles, width: width, correctForSize: 1.0, 
spacing: HSPACING + 4) {
                     VStack { twoRowButtons }
                 } else {
                     HStack(spacing: HSPACING) { twoRowButtons }
diff --git a/TalerWallet1/Views/HelperViews/QRCodeDetailView.swift 
b/TalerWallet1/Views/HelperViews/QRCodeDetailView.swift
index 33a5e44..3f7b139 100644
--- a/TalerWallet1/Views/HelperViews/QRCodeDetailView.swift
+++ b/TalerWallet1/Views/HelperViews/QRCodeDetailView.swift
@@ -36,6 +36,7 @@ struct QRCodeDetailView: View {
                 HStack {
                     Spacer()
                     QRGeneratorView(text: talerURI)
+                        .accessibilityLabel("QR Code")
                     Spacer()
                 }
                 .listRowSeparator(.hidden)
diff --git a/TalerWallet1/Views/HelperViews/View+needVStack.swift 
b/TalerWallet1/Views/HelperViews/View+needVStack.swift
index fc6f18b..689a81d 100644
--- a/TalerWallet1/Views/HelperViews/View+needVStack.swift
+++ b/TalerWallet1/Views/HelperViews/View+needVStack.swift
@@ -11,33 +11,60 @@ extension View {
     /// if !sameSize then all titles are added with spacing
     static func needVStack(_ titles: [(String, UIFont)],
                               width: CGFloat,           // total width 
available
+                     correctForSize: CGFloat,
                             spacing: CGFloat,           // between titles
                            sameSize: Bool = true,
-                           numViews: Int = 2,
-                           currency: String = "")
+                           numViews: Int = 2)
     -> Bool {
         let padding: CGFloat = 20        // TODO: depend on myListStyle
-        var maxTitleWidth: CGFloat = 0
-        var totalWidth = padding
+        let totalSpacing = spacing * CGFloat(numViews - 1)
+        var totalWidth = padding + totalSpacing
 
+        var maxTitleWidth: CGFloat = 0
+        var minTitleWidth: CGFloat = 1000
         for (title, uiFont) in titles {
             let titleWidth = title.widthOfString(usingUIFont: uiFont)
-            if titleWidth > maxTitleWidth {
-                maxTitleWidth = titleWidth
+            let fixWidth = round(CGFloat(Int(20 * titleWidth * 
correctForSize))) / 20
+            if fixWidth > maxTitleWidth {
+                maxTitleWidth = fixWidth
+            }
+            if fixWidth < minTitleWidth {
+                minTitleWidth = fixWidth
             }
-            totalWidth += titleWidth
+            totalWidth += fixWidth
         }
 
-        let neededWidth = padding + maxTitleWidth
-        let totalSpacing = spacing * CGFloat(numViews - 1)
-        let availableWidth = (width / CGFloat(numViews)) - totalSpacing
-        totalWidth += totalSpacing
         if sameSize {
-            print("❗️\(currency) available: \(availableWidth)   needed: 
\(neededWidth)")
+            let availableWidth = (width / CGFloat(numViews)) - totalSpacing
+            let neededWidth = padding + maxTitleWidth
+//            if width > 20 {
+//                print("❗️ available: \(availableWidth)   needed: 
\(neededWidth)")
+//            }
+            return neededWidth > availableWidth
         } else {
-            print("❗️\(currency) width: \(width)   total: \(totalWidth)")
+//            if width > 20 {
+//                let (amount, font) = titles[1]
+//                print("❗️ view width: \(width)   total: \(totalWidth)  min: 
\(minTitleWidth)  max: \(maxTitleWidth)  \(amount)")
+//            }
+            return totalWidth > width
+        }
+    }
+
+    static func correctForSize(_ sizeCategory: ContentSizeCategory) -> CGFloat 
{
+        return switch sizeCategory {
+            case .extraSmall: 0.7
+            case .small: 0.8
+            case .medium: 0.9
+            case .large: 1.0
+            case .extraLarge: 1.15
+            case .extraExtraLarge: 1.25
+            case .extraExtraExtraLarge: 1.33
+            case .accessibilityMedium: 1.52
+            case .accessibilityLarge: 1.8
+            case .accessibilityExtraLarge: 2.0
+            case .accessibilityExtraExtraLarge: 2.2
+            case .accessibilityExtraExtraExtraLarge: 2.5
+            default: 1.0
         }
-        return sameSize ? neededWidth > availableWidth
-                        : totalWidth > width
     }
 }
diff --git a/TalerWallet1/Views/Settings/Pending/PendingOpView.swift 
b/TalerWallet1/Views/Settings/Pending/PendingOpView.swift
index c3ceb29..ddfbfcd 100644
--- a/TalerWallet1/Views/Settings/Pending/PendingOpView.swift
+++ b/TalerWallet1/Views/Settings/Pending/PendingOpView.swift
@@ -28,7 +28,7 @@ struct PendingOpView: View {
                 let isDue = "isDue"
                 Toggle(isDue, isOn: $isDue)
                     .disabled(true)
-                let dateString = TalerDater.dateString(from: 
pendingOp.timestampDue)
+                let (dateString, date) = TalerDater.dateString(from: 
pendingOp.timestampDue)
                 Text(dateString)
             }
             .accessibilityFont(.body)
diff --git a/TalerWallet1/Views/Sheets/P2P_Sheets/P2pPayURIView.swift 
b/TalerWallet1/Views/Sheets/P2P_Sheets/P2pPayURIView.swift
index 30251d8..905670d 100644
--- a/TalerWallet1/Views/Sheets/P2P_Sheets/P2pPayURIView.swift
+++ b/TalerWallet1/Views/Sheets/P2P_Sheets/P2pPayURIView.swift
@@ -30,11 +30,13 @@ struct P2pPayURIView: View {
                     let currency = raw.currencyStr
                     let fee = try! Amount.diff(raw, effective)
                     ThreeAmountsView(topTitle: String(localized: "Amount to 
pay:"),
-                                     topAmount: raw, fee: fee,
-                                     bottomTitle: String(localized: 
"\(currency) to be spent:"),
-                                     bottomAmount: effective,
-                                     large: false, pending: false, incoming: 
false,
-                                     baseURL: nil)
+                                    topAbbrev: String(localized: "Pay:"),
+                                    topAmount: raw, fee: fee,
+                                  bottomTitle: String(localized: "Amount to be 
spent:"),
+                                 bottomAbbrev: String(localized: "Effective:"),
+                                 bottomAmount: effective,
+                                        large: false, pending: false, 
incoming: false,
+                                      baseURL: nil)
                 }
                 .listStyle(myListStyle.style).anyView
                 .navigationTitle(navTitle)
diff --git a/TalerWallet1/Views/Sheets/P2P_Sheets/P2pReceiveURIView.swift 
b/TalerWallet1/Views/Sheets/P2P_Sheets/P2pReceiveURIView.swift
index 26fc4a3..d8521e5 100644
--- a/TalerWallet1/Views/Sheets/P2P_Sheets/P2pReceiveURIView.swift
+++ b/TalerWallet1/Views/Sheets/P2P_Sheets/P2pReceiveURIView.swift
@@ -30,8 +30,10 @@ struct P2pReceiveURIView: View {
                     let currency = raw.currencyStr
                     let fee = try! Amount.diff(raw, effective)
                     ThreeAmountsView(topTitle: String(localized: "Amount to 
receive:"),
+                                    topAbbrev: String(localized: "Receive:"),
                                     topAmount: raw, fee: fee,
-                                  bottomTitle: String(localized: "\(currency) 
to be obtained:"),
+                                  bottomTitle: String(localized: "Amount to be 
obtained:"),
+                                 bottomAbbrev: String(localized: "Effective:"),
                                  bottomAmount: effective,
                                         large: false, pending: false, 
incoming: true,
                                       baseURL: nil)
diff --git a/TalerWallet1/Views/Sheets/Payment/PayTemplateView.swift 
b/TalerWallet1/Views/Sheets/Payment/PayTemplateView.swift
index ea6c73a..e626cc2 100644
--- a/TalerWallet1/Views/Sheets/Payment/PayTemplateView.swift
+++ b/TalerWallet1/Views/Sheets/Payment/PayTemplateView.swift
@@ -56,25 +56,30 @@ struct PayTemplateView: View {
                 let raw = preparePayResult.amountRaw
                 let currency = raw.currencyStr
                 let topTitle = String(localized: "Amount to pay:")
+                let topAbbrev = String(localized: "Pay:")
                 if let effective {
                     // TODO: already paid
                     let fee = try! Amount.diff(raw, effective)      // TODO: 
different currencies
                     ThreeAmountsView(topTitle: topTitle,
-                                     topAmount: raw, fee: fee,
-                                     bottomTitle: String(localized: 
"\(currency) to be spent:"),
-                                     bottomAmount: effective,
-                                     large: false, pending: false, incoming: 
false,
-                                     baseURL: baseURL)
+                                    topAbbrev: topAbbrev,
+                                    topAmount: raw, fee: fee,
+                                  bottomTitle: String(localized: "Amount to be 
spent:"),
+                                 bottomAbbrev: String(localized: "Effective:"),
+                                 bottomAmount: effective,
+                                        large: false, pending: false, 
incoming: false,
+                                      baseURL: baseURL)
                     // TODO: payment: popup with all possible exchanges, check 
fees
                 } else if let balanceDetails = preparePayResult.balanceDetails 
{    // Insufficient
                     Text("You don't have enough \(currency)")
                         .accessibilityFont(.body)
                     ThreeAmountsView(topTitle: topTitle,
-                                     topAmount: raw, fee: nil,
-                                     bottomTitle: String(localized: 
"\(currency) available:"),
-                                     bottomAmount: 
balanceDetails.balanceAvailable,
-                                     large: false, pending: false, incoming: 
false,
-                                     baseURL: baseURL)
+                                    topAbbrev: topAbbrev,
+                                    topAmount: raw, fee: nil,
+                                  bottomTitle: String(localized: "Amount 
available:"),
+                                 bottomAbbrev: String(localized: "Available:"),
+                                 bottomAmount: balanceDetails.balanceAvailable,
+                                        large: false, pending: false, 
incoming: false,
+                                      baseURL: baseURL)
                 } else {
                     // TODO: Error - neither effective nor balanceDetails
                     Text("Error")
diff --git a/TalerWallet1/Views/Sheets/Payment/PaymentView.swift 
b/TalerWallet1/Views/Sheets/Payment/PaymentView.swift
index 6bc9a08..7a14aeb 100644
--- a/TalerWallet1/Views/Sheets/Payment/PaymentView.swift
+++ b/TalerWallet1/Views/Sheets/Payment/PaymentView.swift
@@ -49,25 +49,30 @@ struct PaymentView: View {
                 let raw = preparePayResult.amountRaw
                 let currency = raw.currencyStr
                 let topTitle = String(localized: "Amount to pay:")
+                let topAbbrev = String(localized: "Pay:")
                 if let effective {
                     // TODO: already paid
                     let fee = try! Amount.diff(raw, effective)      // TODO: 
different currencies
                     ThreeAmountsView(topTitle: topTitle,
-                                     topAmount: raw, fee: fee,
-                                     bottomTitle: String(localized: 
"\(currency) to be spent:"),
-                                     bottomAmount: effective,
-                                     large: false, pending: false, incoming: 
false,
-                                     baseURL: baseURL)
+                                    topAbbrev: topAbbrev,
+                                    topAmount: raw, fee: fee,
+                                  bottomTitle: String(localized: "Amount to be 
spent:"),
+                                 bottomAbbrev: String(localized: "Effective:"),
+                                 bottomAmount: effective,
+                                        large: false, pending: false, 
incoming: false,
+                                      baseURL: baseURL)
                     // TODO: payment: popup with all possible exchanges, check 
fees
                 } else if let balanceDetails = preparePayResult.balanceDetails 
{    // Insufficient
                     Text("You don't have enough \(currency)")
                         .accessibilityFont(.body)
                     ThreeAmountsView(topTitle: topTitle,
-                                     topAmount: raw, fee: nil,
-                                     bottomTitle: String(localized: 
"\(currency) available:"),
-                                     bottomAmount: 
balanceDetails.balanceAvailable,
-                                     large: false, pending: false, incoming: 
false,
-                                     baseURL: baseURL)
+                                    topAbbrev: topAbbrev,
+                                    topAmount: raw, fee: nil,
+                                  bottomTitle: String(localized: "Available:"),
+                                 bottomAbbrev: String(localized: "Available:"),
+                                 bottomAmount: balanceDetails.balanceAvailable,
+                                        large: false, pending: false, 
incoming: false,
+                                      baseURL: baseURL)
                 } else {
                     // TODO: Error - neither effective nor balanceDetails
                     Text("Error")
diff --git 
a/TalerWallet1/Views/Sheets/WithdrawBankIntegrated/WithdrawURIView.swift 
b/TalerWallet1/Views/Sheets/WithdrawBankIntegrated/WithdrawURIView.swift
index 0dc3a9e..89eda47 100644
--- a/TalerWallet1/Views/Sheets/WithdrawBankIntegrated/WithdrawURIView.swift
+++ b/TalerWallet1/Views/Sheets/WithdrawBankIntegrated/WithdrawURIView.swift
@@ -37,8 +37,10 @@ struct WithdrawURIView: View {
                     let inColor = WalletColors().transactionColor(true)
 
                     ThreeAmountsView(topTitle: String(localized: "Chosen 
amount to withdraw:"),
+                                    topAbbrev: String(localized: "Chosen:"),
                                     topAmount: raw, fee: fee,
-                                  bottomTitle: String(localized: "\(currency) 
to be withdrawn:"),
+                                  bottomTitle: String(localized: "Amount to be 
withdrawn:"),
+                                 bottomAbbrev: String(localized: "Effective:"),
                                  bottomAmount: effective,
                                         large: false, pending: false, 
incoming: true,
                                       baseURL: exchangeBaseUrl)
diff --git a/TalerWallet1/Views/Transactions/ThreeAmounts.swift 
b/TalerWallet1/Views/Transactions/ThreeAmounts.swift
index 83d8d73..ef77848 100644
--- a/TalerWallet1/Views/Transactions/ThreeAmounts.swift
+++ b/TalerWallet1/Views/Transactions/ThreeAmounts.swift
@@ -7,8 +7,10 @@ import taler_swift
 
 struct ThreeAmountsSheet: View {
     var common: TransactionCommon
+    var topAbbrev: String
     var topTitle: String
     var bottomTitle: String?
+    var bottomAbbrev: String?
     let baseURL: String?
     let large: Bool               // set to false for QR or IBAN
 
@@ -22,8 +24,13 @@ struct ThreeAmountsSheet: View {
         let defaultBottomTitle = incoming ? (pending ? String(localized: 
"Pending amount to obtain:")
                                                      : String(localized: 
"Obtained amount:") )
                                           :            String(localized: "Paid 
amount:")
-        ThreeAmountsView(topTitle: topTitle, topAmount: raw, fee: fee,
-                      bottomTitle: bottomTitle ?? defaultBottomTitle, 
bottomAmount: effective,
+        let defaultBottomAbbre = incoming ? (pending ? String(localized: 
"Pending:")
+                                                     : String(localized: 
"Obtained:") )
+                                          :            String(localized: 
"Paid:")
+        ThreeAmountsView(topTitle: topTitle, topAbbrev: topAbbrev, topAmount: 
raw, fee: fee,
+                      bottomTitle: bottomTitle ?? defaultBottomTitle,
+                     bottomAbbrev: bottomAbbrev ?? defaultBottomAbbre,
+                     bottomAmount: effective,
                             large: large, pending: pending, incoming: incoming,
                           baseURL: baseURL,
                            status: common.txState.major.localizedState)
@@ -32,9 +39,11 @@ struct ThreeAmountsSheet: View {
 // MARK: -
 struct ThreeAmountsView: View {
     var topTitle: String
+    var topAbbrev: String
     var topAmount: Amount
     var fee: Amount?
     var bottomTitle: String
+    var bottomAbbrev: String
     var bottomAmount: Amount
     let large: Bool
     let pending: Bool
@@ -42,30 +51,33 @@ struct ThreeAmountsView: View {
     let baseURL: String?
     var status: String?
 
+    @AppStorage("iconOnly") var iconOnly: Bool = false
+    
     var body: some View {
         let labelColor = Color(UIColor.label)
         let foreColor = pending ? WalletColors().pendingColor(incoming)
                                 : WalletColors().transactionColor(incoming)
         Section {
-            AmountView(title: topTitle,
+            AmountView(title: iconOnly ? topAbbrev : topTitle,
                        value: topAmount.readableDescription,
                        color: labelColor,
                        large: large)
                 .padding(.bottom, 4)
             if let fee {
-                AmountView(title: String(localized: "Exchange fee:"),
+                AmountView(title: iconOnly ? String(localized: "Fee:")
+                                           : String(localized: "Exchange 
fee:"),
                            value: fee.readableDescription,
                            color: labelColor,
                            large: false)
                 .padding(.bottom, 4)
             }
-            AmountView(title: bottomTitle,
+            AmountView(title: iconOnly ? bottomAbbrev : bottomTitle,
                        value: bottomAmount.readableDescription,
                        color: foreColor,
                        large: large)
             if let baseURL {
                 VStack(alignment: .leading) {
-                    Text("Using Exchange:")
+                    Text(iconOnly ? "Exchange:" : "Using Exchange:")
                         .multilineTextAlignment(.leading)
                         .accessibilityFont(.body)
                     HStack {
@@ -81,6 +93,11 @@ struct ThreeAmountsView: View {
                 .frame(maxWidth: .infinity, alignment: .leading)
                 .listRowSeparator(.hidden)
             }
+        } header: {
+            if !iconOnly {
+                Text("Summary")
+                    .accessibilityFont(.title3)
+            }
         }
     }
 }
@@ -96,7 +113,8 @@ struct ThreeAmounts_Previews: PreviewProvider {
                                   txActions: [])
         Group {
             List {
-                ThreeAmountsSheet(common: common, topTitle: "Withdrawal", 
baseURL: DEMOEXCHANGE, large: 1==0)
+                ThreeAmountsSheet(common: common, topAbbrev: "Withdrawal",
+                                topTitle: "Withdrawal", baseURL: DEMOEXCHANGE, 
large: 1==0)
                     .safeAreaInset(edge: .bottom) {
                         Button(String(localized: "Accept"), action: {})
                             .buttonStyle(TalerButtonStyle(type: .prominent))
diff --git a/TalerWallet1/Views/Transactions/TransactionDetailView.swift 
b/TalerWallet1/Views/Transactions/TransactionDetailView.swift
index 409b37b..2da1d91 100644
--- a/TalerWallet1/Views/Transactions/TransactionDetailView.swift
+++ b/TalerWallet1/Views/Transactions/TransactionDetailView.swift
@@ -45,6 +45,20 @@ struct TransactionDetailView: View {
     @State var transaction: Transaction = Transaction(dummyCurrency: 
DEMOCURRENCY)
     @State var viewId = UUID()
 
+    func accessibilityDate(_ date: Date?) -> String? {
+        if let date {
+            let dateString = DateFormatter.localizedString(from: date,
+                                                      dateStyle: .short,
+                                                      timeStyle: .none)
+            let hourComponents = Calendar.current.dateComponents([.hour, 
.minute], from: date)
+            if let timeString = DateComponentsFormatter.localizedString(from: 
hourComponents, unitsStyle: .spellOut) {
+                return dateString + ", " + timeString
+            }
+            return dateString
+        }
+        return nil
+    }
+
     var body: some View {
 #if DEBUG
         let _ = Self._printChanges()
@@ -52,7 +66,10 @@ struct TransactionDetailView: View {
 #endif
         let common = transaction.common
         let pending = transaction.isPending
-        let dateString = TalerDater.dateString(from: common.timestamp)
+        let locale = TalerDater.shared.locale
+        let (dateString, date) = TalerDater.dateString(from: common.timestamp)
+        let accessibilityDate = accessibilityDate(date) ??
+                                    dateString
         let navTitle2 = transaction.localizedType
         Group {
             List {
@@ -68,6 +85,7 @@ struct TransactionDetailView: View {
                 } // Suspend + Resume buttons
                 Text(dateString)
                     .accessibilityFont(.body)
+                    .accessibilityLabel(accessibilityDate)
                     .foregroundColor(.secondary)
                     .listRowSeparator(.hidden)
                 HStack {
@@ -170,6 +188,7 @@ struct TransactionDetailView: View {
     struct SwitchCase: View {
         @Binding var transaction: Transaction
         let hasDone: Bool
+        @AppStorage("iconOnly") var iconOnly: Bool = false
 
         var body: some View {
             let common = transaction.common
@@ -193,10 +212,12 @@ struct TransactionDetailView: View {
                                         if let confirmationUrl = 
withdrawalDetails.bankConfirmationUrl {
                                             if let destination = URL(string: 
confirmationUrl) {
                                                 VStack(alignment: .leading) {  
// Show Hint that User should Confirm on bank website
-                                                    Text("Waiting for bank 
confirmation")
-                                                        .fixedSize(horizontal: 
false, vertical: true)       // wrap in scrollview
-                                                        
.multilineTextAlignment(.leading)                   // otherwise
-                                                        
.listRowSeparator(.hidden)
+                                                    if !iconOnly {
+                                                        Text("Waiting for bank 
confirmation")
+                                                            
.fixedSize(horizontal: false, vertical: true)       // wrap in scrollview
+                                                            
.multilineTextAlignment(.leading)                   // otherwise
+                                                            
.listRowSeparator(.hidden)
+                                                    }
                                                     Link("Confirm with bank", 
destination: destination)
                                                         
.buttonStyle(TalerButtonStyle(type: .prominent, narrow: false, aligned: 
.center))
                                                         .padding(.horizontal)  
                                                  
@@ -206,7 +227,8 @@ struct TransactionDetailView: View {
                                     }
                             }
                         } // ManualDetails or Confirm with bank
-                        ThreeAmountsSheet(common: common, topTitle: 
String(localized: "Chosen amount to withdraw:"),
+                        ThreeAmountsSheet(common: common, topAbbrev: 
String(localized: "Chosen:"),
+                                        topTitle: String(localized: "Chosen 
amount to withdraw:"),
                                          baseURL: details.exchangeBaseUrl, 
large: false)
                     case .payment(let paymentTransaction):
                         let details = paymentTransaction.details
@@ -214,19 +236,23 @@ struct TransactionDetailView: View {
                             .accessibilityFont(.title2)
                             .lineLimit(4)
                             .padding(.bottom)
-                        ThreeAmountsSheet(common: common, topTitle: 
String(localized: "Sum to be paid:"),
+                        ThreeAmountsSheet(common: common, topAbbrev: 
String(localized: "Pay:"),
+                                        topTitle: String(localized: "Sum to be 
paid:"),
                                          baseURL: nil, large: true)     // 
TODO: baseURL
                     case .refund(let refundTransaction):
                         let details = refundTransaction.details                
 // TODO: more details
-                        ThreeAmountsSheet(common: common, topTitle: 
String(localized: "Refunded amount:"),
+                        ThreeAmountsSheet(common: common, topAbbrev: 
String(localized: "Refunded:"),
+                                        topTitle: String(localized: "Refunded 
amount:"),
                                          baseURL: nil, large: true)     // 
TODO: baseURL
                     case .reward(let rewardTransaction):
                         let details = rewardTransaction.details                
 // TODO: more details
-                        ThreeAmountsSheet(common: common, topTitle: 
String(localized: "Received Reward:"),
+                        ThreeAmountsSheet(common: common, topAbbrev: 
String(localized: "Reward:"),
+                                        topTitle: String(localized: "Received 
Reward:"),
                                          baseURL: details.exchangeBaseUrl, 
large: true)
                     case .refresh(let refreshTransaction):
                         let details = refreshTransaction.details               
 // TODO: details
-                        ThreeAmountsSheet(common: common, topTitle: 
String(localized: "Refreshed amount:"),
+                        ThreeAmountsSheet(common: common, topAbbrev: 
String(localized: "Refreshed:"),
+                                        topTitle: String(localized: "Refreshed 
amount:"),
                                          baseURL: nil, large: true)     // 
TODO: baseURL
                     case .peer2peer(let p2pTransaction):
                         let details = p2pTransaction.details                   
 // TODO: details
@@ -244,7 +270,8 @@ struct TransactionDetailView: View {
                                     .padding(.top)
                             }
                         }
-                        ThreeAmountsSheet(common: common, topTitle: 
transaction.localizedType,
+                        ThreeAmountsSheet(common: common, topAbbrev: 
transaction.localizedType,
+                                        topTitle: transaction.localizedType,
                                          baseURL: details.exchangeBaseUrl, 
large: false)
                 } // switch
             } // Group
diff --git a/TalerWallet1/Views/Transactions/TransactionRowView.swift 
b/TalerWallet1/Views/Transactions/TransactionRowView.swift
index ee8ff88..3eaaa76 100644
--- a/TalerWallet1/Views/Transactions/TransactionRowView.swift
+++ b/TalerWallet1/Views/Transactions/TransactionRowView.swift
@@ -32,7 +32,7 @@ struct TransactionRowView: View {
         let details = transaction.detailsToShow()
         let keys = details.keys
 
-        let dateString = TalerDater.dateString(from: common.timestamp, 
relative: true)
+        let (dateString, date) = TalerDater.dateString(from: common.timestamp, 
relative: true)
         let incoming = common.incoming()
         let foreColor = pending ? WalletColors().pendingColor(incoming)
                       : done ? WalletColors().transactionColor(incoming)
diff --git a/TestFlight/WhatToTest.en-US.txt b/TestFlight/WhatToTest.en-US.txt
index cca7034..ba7456a 100644
--- a/TestFlight/WhatToTest.en-US.txt
+++ b/TestFlight/WhatToTest.en-US.txt
@@ -1,4 +1,9 @@
 
+Version 0.9.3 (22)
+
+- Fixed layout for Balances for dynamic font sizes
+
+
 Version 0.9.3 (21)
 
 - BugFix: P2P payments should work again

-- 
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]