[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.
- [taler-taler-ios] branch master updated (686fcd4 -> 9f7de5c),
gnunet <=
- [taler-taler-ios] 02/07: Adjust volume for payment sounds, gnunet, 2023/10/26
- [taler-taler-ios] 05/07: Currency Symbol, gnunet, 2023/10/26
- [taler-taler-ios] 07/07: Bump version to 0.9.3 (22), gnunet, 2023/10/26
- [taler-taler-ios] 03/07: Accessibility: QR, Date, gnunet, 2023/10/26
- [taler-taler-ios] 01/07: Different Icon for Taler Wallet, gnunet, 2023/10/26
- [taler-taler-ios] 04/07: Abbreviations, gnunet, 2023/10/26
- [taler-taler-ios] 06/07: Fixed Balances layout for dynamic font sizes (Previews work again), gnunet, 2023/10/26