taler-ios

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

commit 77e69037b1c86de7013962a3751cd4cde884ff39
parent 0c31cb12e84eccb5334760a2f102ea9a0fff424c
Author: Marc Stibane <marc@taler.net>
Date:   Sun,  1 Mar 2026 21:58:28 +0100

QRGenerator with Logo

Diffstat:
MTalerWallet1/Views/HelperViews/QRCodeDetailView.swift | 9+++++----
MTalerWallet1/Views/HelperViews/QRGeneratorView.swift | 15+++++++++++++--
MTalerWallet1/Views/OIM/OIMp2pReadyView.swift | 4++--
MTalerWallet1/Views/Transactions/QRcodesForPayto.swift | 13+++++++------
4 files changed, 27 insertions(+), 14 deletions(-)

diff --git a/TalerWallet1/Views/HelperViews/QRCodeDetailView.swift b/TalerWallet1/Views/HelperViews/QRCodeDetailView.swift @@ -1,5 +1,5 @@ /* - * This file is part of GNU Taler, ©2022-25 Taler Systems S.A. + * This file is part of GNU Taler, ©2022-26 Taler Systems S.A. * See LICENSE.md */ /** @@ -67,10 +67,11 @@ struct QRCodeDetailView: View { let amountStr = amountStr(currencyInfo) let scanLong = incoming ? (requesting(amountStr.0), requesting(amountStr.1)) : (sending(amountStr.0), sending(amountStr.1)) + let logo = Image(TALER_LOGO_QR) let size = 240.0 - let qrView = QRGeneratorView(text: talerURI, size: size, image: $qrImage) - .frame(maxWidth: .infinity, alignment: .center) - .accessibilityLabel(Text("QR Code", comment: "a11y")) + let logoSize = 88.0 + let qrView = QRGeneratorView(text: talerURI, size: size, logo: logo, logoSize: logoSize, image: $qrImage) + .frame(maxWidth: .infinity, alignment: .center) if #available(iOS 17.7, *) { BorderWithHCE(talerURI: talerURI, nfcHint: true, size: size, scanHints: scanLong) { qrView diff --git a/TalerWallet1/Views/HelperViews/QRGeneratorView.swift b/TalerWallet1/Views/HelperViews/QRGeneratorView.swift @@ -24,20 +24,31 @@ import SwiftUI struct QRGeneratorView: View { let text: String let size: CGFloat + let logo: Image? + let logoSize: CGFloat @Binding var image: UIImage? var body: some View { - VStack { + ZStack { if let image { Image(uiImage: image) .interpolation(.none) .resizable() .scaledToFit() .frame(width: size, height: size) + if let logo { + logo + .resizable() + .scaledToFit() + .frame(width: logoSize, height: logoSize) + } } else { EmptyView() } - }.onAppear { + } + .accessibilityElement(children: .combine) + .accessibilityLabel(Text("QR Code", comment: "a11y")) + .onAppear { // if let uiImage = getQRCode(text: text) { if let data = getQRCodeData(text: text) { if let uiImage = UIImage(data: data) { diff --git a/TalerWallet1/Views/OIM/OIMp2pReadyView.swift b/TalerWallet1/Views/OIM/OIMp2pReadyView.swift @@ -1,5 +1,5 @@ /* - * This file is part of GNU Taler, ©2022-25 Taler Systems S.A. + * This file is part of GNU Taler, ©2022-26 Taler Systems S.A. * See LICENSE.md */ /** @@ -38,7 +38,7 @@ struct OIMp2pReadyView: View { Group { Spacer() let size = 240.0 - QRGeneratorView(text: talerURI, size: size, image: $qrImage) + QRGeneratorView(text: talerURI, size: size, logo: nil, logoSize: size / 4, image: $qrImage) .frame(maxWidth: .infinity, alignment: .center) .accessibilityLabel(Text("QR Code", comment: "a11y")) Spacer() diff --git a/TalerWallet1/Views/Transactions/QRcodesForPayto.swift b/TalerWallet1/Views/Transactions/QRcodesForPayto.swift @@ -12,15 +12,14 @@ import taler_swift struct QRcodeCopyShare: View { let spec: QrCodeSpec let textToShare: String - @State private var qrImage: UIImage? = nil var body: some View { - Text(spec.type) - let size = 200.0 - QRGeneratorView(text: spec.qrContent, size: size, image: $qrImage) +// Text(spec.type) + let logo = spec.type == "spc" ? Image(SWISS_QR) : nil + let size = 240.0 + QRGeneratorView(text: spec.qrContent, size: size, logo: logo, logoSize: size / 4, image: $qrImage) .frame(maxWidth: .infinity, alignment: .center) - .accessibilityLabel(Text("QR Code", comment: "a11y")) .listRowSeparator(.hidden) HStack { Text(verbatim: "|") // only reason for this leading-aligned text is to get a nice full length listRowSeparator @@ -29,7 +28,7 @@ struct QRcodeCopyShare: View { // Spacer() CopyShare(textToCopy: textToShare, image: qrImage) .disabled(false) - }.listRowSeparator(.automatic) + } } } @@ -47,6 +46,7 @@ struct QRcodesForPayto: View { var body: some View { let message = messageStr ?? EMPTYSTRING let textToShare = String(receiverStr + "\n" + amountStr + "\n" + message) + let count = qrCodeSpecs.count List { if !minimalistic { Text("If your banking software runs on another device, you can scan one of these QR codes:") @@ -54,6 +54,7 @@ struct QRcodesForPayto: View { } ForEach(qrCodeSpecs, id: \.self) { spec in QRcodeCopyShare(spec: spec, textToShare: textToShare) + .listRowSeparator(.automatic) } } .navigationTitle(navTitle)