commit d30fe6eae6bd19ffbe710c5f676fb76dcc1c71ff
parent 2fbfa381a92830d15b953ab87da5391981b82005
Author: Marc Stibane <marc@taler.net>
Date: Sat, 17 Jun 2023 14:54:36 +0200
Preparations for localization + accessability
Diffstat:
2 files changed, 30 insertions(+), 37 deletions(-)
diff --git a/TalerWallet1/Views/Main/MainView.swift b/TalerWallet1/Views/Main/MainView.swift
@@ -20,7 +20,7 @@ struct MainView: View {
@State private var sheetPresented = false
@State private var urlToOpen: URL? = nil
- func sheetDismiss() -> Void {
+ func sheetDismissed() -> Void {
symLog.log("sheet dismiss")
}
var body: some View {
@@ -51,7 +51,7 @@ struct MainView: View {
DebugViewV()
.id("ViewID")
}
- .sheet(item: $urlToOpen, onDismiss: sheetDismiss) { url in
+ .sheet(item: $urlToOpen, onDismiss: sheetDismissed) { url in
let sheet = AnyView(URLSheet(urlToOpen: url))
Sheet(sheetView: sheet)
}
@@ -63,25 +63,34 @@ extension MainView {
let symLog: SymLogV?
@State var sidebarVisible: Bool = false
- @State var currentView: Int = 0
+ func hamburgerAction() {
+ sidebarVisible = !sidebarVisible
+ }
+ let balances = String(localized: "Balances")
+ let exchanges = String(localized: "Exchanges")
+ let settings = String(localized: "Settings")
var views: [SidebarItem] {[
- SidebarItem(name: String(localized: "Balances"),
+ SidebarItem(name: balances,
sysImage: "creditcard.fill", // TODO: Wallet Icon
- view: AnyView(BalancesListView(model: BalancesModel.model(currency: "*"))
- { sidebarVisible = !sidebarVisible } // hamburgerAction
+ view: AnyView(BalancesListView(navTitle: balances,
+ model: BalancesModel.model(currency: "*"),
+ hamburgerAction: hamburgerAction)
)),
- SidebarItem(name: String(localized: "Exchanges"),
+ SidebarItem(name: exchanges,
sysImage: "building.columns",
- view: AnyView(ExchangeListView(model: ExchangeModel.model())
- { sidebarVisible = !sidebarVisible } // hamburgerAction
+ view: AnyView(ExchangeListView(navTitle: exchanges,
+ model: ExchangeModel.model(),
+ hamburgerAction: hamburgerAction)
)),
- SidebarItem(name: String(localized: "Settings"), // TODO: "About"?
+ SidebarItem(name: settings, // TODO: "About"?
sysImage: "gearshape.fill",
- view: AnyView(SettingsView()
- { sidebarVisible = !sidebarVisible } // hamburgerAction
+ view: AnyView(SettingsView(navTitle: settings,
+ hamburgerAction: hamburgerAction)
))
]}
+ @State var currentView: Int = 0
+
var body: some View {
#if DEBUG
let _ = Self._printChanges()
@@ -89,12 +98,11 @@ extension MainView {
#endif
ZStack(alignment: .leading) {
views[currentView].view
- .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .center)
.id(views[currentView].name)
+ .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .center)
.transition(.backslide)
SideBarView(views: views, currentView: $currentView, sidebarVisible: $sidebarVisible)
}
- .background(WalletColors().backgroundColor)
}
}
}
diff --git a/TalerWallet1/Views/Main/SideBarView.swift b/TalerWallet1/Views/Main/SideBarView.swift
@@ -22,19 +22,19 @@ struct SideBarView: View {
var body: some View {
HStack { // sideView left, clear dismiss target right
EqualIconWidthDomain {
- VStack {
- Spacer()
+ VStack(spacing: 10) {
+ Text("GNU Taler")
+ .font(.largeTitle).bold()
Image("taler-logo-2023-red")
.resizable()
.scaledToFit()
.frame(width: 100, height: 100)
- .padding(.top, 30)
+ .accessibilityHidden(true) // decorative logo
ForEach(0..<views.count, id: \.self) { i in
Button {
symLog.log("sidebar item \"\(views[i].name)\" selected")
sidebarVisible = false // slide sidebar to the left
withAnimation(.easeInOut) {currentView = i} // switch to the view the user selected
-// withAnimation(.easeInOut(duration: 0.5)) {currentView = i} // switch to the view the user selected
} label: {
if let sysImage = views[i].sysImage {
Label(views[i].name, systemImage: sysImage)
@@ -46,35 +46,19 @@ struct SideBarView: View {
}
.buttonStyle(.bordered)
.font(.title)
- // .padding(.vertical)
+ .disabled(i == currentView)
+ .accessibilityHidden(i == currentView) // don't suggest the current item
}
Spacer()
- Spacer()
- Spacer()
-// Button {
-// symLog.log("Scan QR selected")
-// sidebarVisible = false // slide sidebar to the left
- // TODO: show scan sheet
-// } label: {
-// Label("Scan QR", systemImage: "qrcode.viewfinder")
-// .frame(maxWidth: sidebarWidth, alignment: .leading)
-// }
-// .buttonStyle(.bordered)
-// .font(.title)
-// .padding(.bottom, 26.0)
}
.background(WalletColors().sideBackground)
.frame(width: sidebarWidth, alignment: .center)
// TODO: use leading instead of sidebarWidth for right-to-left
.offset(x: sidebarVisible ? 0 : -sidebarWidth)
- .animation(.easeInOut, value: sidebarVisible)
- .ignoresSafeArea()
// .onAppear can NOT be used here, because we don't show or dismiss this view,
// but only slide it left or right - so it is always there.
- // .onAppear {} would be called once even before LaunchScreen is dismissed and then never again
-
- // this is just a target for a tap gesture outside the sidebar to dismiss it
}
+ // this is just a target for a tap gesture outside the sidebar to dismiss it
Color.clear
.frame(maxWidth: sidebarVisible ? .infinity : 0, maxHeight: .infinity, alignment: .leading)
// TODO: right-to-left ?
@@ -84,6 +68,7 @@ struct SideBarView: View {
sidebarVisible = false
}
}
+ .animation(sidebarVisible ? .easeOut : .easeIn, value: sidebarVisible)
}
}
// MARK: -