taler-ios

iOS apps for GNU Taler (wallet)
Log | Files | Refs | README | LICENSE

commit 3559d3680d5df0a1d76302c1b70436619473e457
parent fa60cb70ea24cfd58d4fd5ae87196d338d758338
Author: Marc Stibane <marc@taler.net>
Date:   Sat,  4 Nov 2023 07:44:59 +0100

Accessibility

Diffstat:
MTalerWallet1/Views/Balances/BalanceRowView.swift | 5+++--
MTalerWallet1/Views/Exchange/ExchangeSectionView.swift | 1-
MTalerWallet1/Views/HelperViews/SelectDays.swift | 80++++++++++++++++++++++++++++++++++++++++++++++---------------------------------
MTalerWallet1/Views/HelperViews/TextFieldAlert.swift | 1+
MTalerWallet1/Views/Peer2peer/PaymentPurpose.swift | 6++----
MTalerWallet1/Views/Peer2peer/SendPurpose.swift | 7+++----
6 files changed, 56 insertions(+), 44 deletions(-)

diff --git a/TalerWallet1/Views/Balances/BalanceRowView.swift b/TalerWallet1/Views/Balances/BalanceRowView.swift @@ -33,8 +33,9 @@ struct BalanceButton: View { } } .disabled(false) .buttonStyle(TalerButtonStyle(type: iconOnly ? .plain : .balance, aligned: .trailing)) - .accessibilityElement(children: /*@START_MENU_TOKEN@*/.ignore/*@END_MENU_TOKEN@*/) - .accessibilityLabel(balanceTitleStr + " " + amountStr) // TODO: CurrencyFormatter! + .accessibilityElement(children: .combine) + .accessibilityHint("will go to main transactions list") +// .accessibilityLabel(balanceTitleStr + " " + amountStr) // TODO: CurrencyFormatter! } } diff --git a/TalerWallet1/Views/Exchange/ExchangeSectionView.swift b/TalerWallet1/Views/Exchange/ExchangeSectionView.swift @@ -28,7 +28,6 @@ struct ExchangeSectionView: View { currency: currency, // TODO: (balance.available) amount.isZero to disable Deposit-button centsToTransfer: $centsToTransfer) } - .accessibilityElement(children: .combine) } header: { BarGraphHeader(stack: stack.push(), currency: currency) } diff --git a/TalerWallet1/Views/HelperViews/SelectDays.swift b/TalerWallet1/Views/HelperViews/SelectDays.swift @@ -34,40 +34,54 @@ struct SelectDays: View { } var body: some View { - HStack { - Button(action: oneDayAction) { - if developerMode { - Text(verbatim: "3 Min.") - } else { - Text("\(ONEDAY) Day", comment: "1 Day, might get plural (e.g. 2..3 Days), 4 letters max., abbreviate if longer") // TODO: Plural - } - }.buttonStyle(TalerButtonStyle(type: (selected == ONEDAY) ? .prominent : .bordered, dimmed: true)) - .disabled(!isEnabled) + let selectedStr = String(localized: "selected", comment: "VoiceOver hint which button is selected") + let emptyStr = "" - Button(action: sevenDayAction) { - if developerMode { - Text(verbatim: "1 Hour") - } else { - Text("\(SEVENDAYS) Days", comment: "7 Days, always plural (3..9), 4 letters max., abbreviate if longer") - } - }.buttonStyle(TalerButtonStyle(type: (selected == SEVENDAYS) ? .prominent : .bordered, dimmed: true)) - .disabled(!isEnabled || maxExpiration < SEVENDAYS) + Section { // (alignment: .leading) + Text("Expires in:") + .accessibilityLabel("Choose the expiration duration") + .accessibilityAddTraits(.isHeader) + .accessibilityFont(.title3) + HStack { + Button(action: oneDayAction) { + if developerMode { + Text(verbatim: "3 Min.") + } else { + Text("\(ONEDAY) Day", comment: "1 Day, might get plural (e.g. 2..3 Days), 4 letters max., abbreviate if longer") // TODO: Plural + } + }.buttonStyle(TalerButtonStyle(type: (selected == ONEDAY) ? .prominent : .bordered, dimmed: true)) + .accessibilityHint((selected == ONEDAY) ? selectedStr : emptyStr) + .disabled(!isEnabled) - Button(action: thirtyDayAction) { - if developerMode { - Text(verbatim: "1 Day") - } else { - Text("\(THIRTYDAYS) Days", comment: "30 Days, always plural (10..30), 4 letters max., abbreviate if longer") - } - }.buttonStyle(TalerButtonStyle(type: (selected == THIRTYDAYS) ? .prominent : .bordered, dimmed: true)) - .disabled(!isEnabled || maxExpiration < THIRTYDAYS) - } // 3 buttons + Button(action: sevenDayAction) { + if developerMode { + Text(verbatim: "1 Hour") + } else { + Text("\(SEVENDAYS) Days", comment: "7 Days, always plural (3..9), 4 letters max., abbreviate if longer") + } + }.buttonStyle(TalerButtonStyle(type: (selected == SEVENDAYS) ? .prominent : .bordered, dimmed: true)) + .accessibilityHint((selected == SEVENDAYS) ? selectedStr : emptyStr) + .disabled(!isEnabled || maxExpiration < SEVENDAYS) + + Button(action: thirtyDayAction) { + if developerMode { + Text(verbatim: "1 Day") + } else { + Text("\(THIRTYDAYS) Days", comment: "30 Days, always plural (10..30), 4 letters max., abbreviate if longer") + } + }.buttonStyle(TalerButtonStyle(type: (selected == THIRTYDAYS) ? .prominent : .bordered, dimmed: true)) + .accessibilityHint((selected == THIRTYDAYS) ? selectedStr : emptyStr) + .disabled(!isEnabled || maxExpiration < THIRTYDAYS) + } // 3 buttons + } } } - -//struct SelectDays_Previews: PreviewProvider { -// static var previews: some View { -// @State var expireDays: UInt = 1 -// SelectDays(selected: $expireDays, maxExpiration: 20) -// } -//} +// MARK: - +#if DEBUG +struct SelectDays_Previews: PreviewProvider { + static var previews: some View { + @State var expireDays: UInt = 1 + SelectDays(selected: $expireDays, maxExpiration: 20) + } +} +#endif diff --git a/TalerWallet1/Views/HelperViews/TextFieldAlert.swift b/TalerWallet1/Views/HelperViews/TextFieldAlert.swift @@ -19,6 +19,7 @@ struct TextFieldAlert: ViewModifier { VStack { Text(title) .accessibilityFont(.headline) + .accessibilityAddTraits(.isHeader) .padding() TextField(placeholder, text: $text).textFieldStyle(.roundedBorder).padding() Divider() diff --git a/TalerWallet1/Views/Peer2peer/PaymentPurpose.swift b/TalerWallet1/Views/Peer2peer/PaymentPurpose.swift @@ -56,15 +56,12 @@ struct PaymentPurpose: View { Text(verbatim: "\(summary.count)/100") } // maximum 100 characters - Text("Expires in:") - .accessibilityFont(.title3) - SelectDays(selected: $expireDays, maxExpiration: THIRTYDAYS) .disabled(false) .padding(.bottom) + let emptyStr = "" let disabled = (expireDays == 0) || (summary.count < 1) - NavigationLink(destination: LazyView { SendDone(stack: stack.push(), amountToSend: nil, @@ -77,6 +74,7 @@ struct PaymentPurpose: View { } .buttonStyle(TalerButtonStyle(type: .prominent)) .disabled(disabled) + .accessibilityHint(disabled ? "enabled when subject and expiration are set" : emptyStr) Spacer() } diff --git a/TalerWallet1/Views/Peer2peer/SendPurpose.swift b/TalerWallet1/Views/Peer2peer/SendPurpose.swift @@ -73,16 +73,13 @@ struct SendPurpose: View { .accessibilityFont(.body) } // maximum 100 characters - Text("Expires in:") - .accessibilityFont(.title3) - // TODO: compute max Expiration day from peerPushCheck to disable 30 (and even 7) SelectDays(selected: $expireDays, maxExpiration: THIRTYDAYS) .disabled(false) .padding(.bottom) + let emptyStr = "" let disabled = (expireDays == 0) || (summary.count < 1) // TODO: check amountAvailable - NavigationLink(destination: LazyView { SendDone(stack: stack.push(), amountToSend: amount, @@ -94,6 +91,8 @@ struct SendPurpose: View { } .buttonStyle(TalerButtonStyle(type: .prominent)) .disabled(disabled) + .accessibilityHint(disabled ? "enabled when subject and expiration are set" : emptyStr) + Spacer() }