taler-ios

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

commit 7152b6eec54222b5b98c880bcdfb1bc537a53ae6
parent ccfe6cc21ea6725a88c4aecd64b979bc67911624
Author: Marc Stibane <marc@taler.net>
Date:   Tue, 26 Nov 2024 09:26:56 +0100

cleanup, comments

Diffstat:
MTalerWallet1/Views/Main/MainView.swift | 74+++++++++++++++++++++++++++++++++++++-------------------------------------
1 file changed, 37 insertions(+), 37 deletions(-)

diff --git a/TalerWallet1/Views/Main/MainView.swift b/TalerWallet1/Views/Main/MainView.swift @@ -310,36 +310,23 @@ extension MainView { #else let delay: UInt = 0 // no delay for release builds #endif - let balancesTitle = Tab.balances.title -// let actionTitle = Tab.actions.title - let settingsTitle = Tab.settings.title - let tabBarView = TabBarView(selection: tabSelection(), userAction: $userAction, hidden: $navModel.tabBarHidden) { - logger.log("onActionTab") - showActionSheet = true - } onActionDrag: { - logger.log("onActionDrag: showScanner = true") - showScanner = true - } - + /// Destinations for the 4 actions let sendDest = SendAmountV(stack: stack.push(Self.name), selectedBalance: $selectedBalance, // if nil shows currency picker amountLastUsed: $amountLastUsed, // currency needs to be updated! summary: $summary) - let requestDest = RequestPayment(stack: stack.push(Self.name), selectedBalance: $selectedBalance, amountLastUsed: $amountLastUsed, // currency needs to be updated! summary: $summary) - let depositDest = DepositIbanV(stack: stack.push(Self.name), selectedBalance: $selectedBalance, amountLastUsed: $amountLastUsed) - let manualWithdrawDest = ManualWithdraw(stack: stack.push(Self.name), selectedBalance: $selectedBalance, amountLastUsed: $amountLastUsed, // currency needs to be updated! isSheet: false) - + /// each NavigationView needs its own NavLinks let balanceActions = Group { NavLink(1, $navModel.actionSelected) { sendDest } NavLink(2, $navModel.actionSelected) { requestDest } @@ -352,42 +339,55 @@ extension MainView { NavLink(7, $navModel.actionSelected) { depositDest } NavLink(8, $navModel.actionSelected) { manualWithdrawDest } } + /// tab titles, and invisible tabItems which are only used for a11y + let balancesTitle = Tab.balances.title // "Balances" + let actionTitle = Tab.actions.title // "Actions" + let settingsTitle = Tab.settings.title // "Settings" let a11yBalanceTab = Label(Tab.balances).labelStyle(.titleOnly) - .accessibilityLabel(Tab.balances.title) // "Balances" + .accessibilityLabel(balancesTitle) let a11yActionsTab = Label(Tab.actions).labelStyle(.titleOnly) - .accessibilityLabel(Tab.actions.title) // "Actions" + .accessibilityLabel(actionTitle) let a11ySettingsTab = Label(Tab.settings).labelStyle(.titleOnly) - .accessibilityLabel(Tab.settings.title) // "Settings" + .accessibilityLabel(settingsTitle) + /// NavigationViews for Balances & Settings + let balancesStack = NavigationView { + BalancesListView(stack: stack.push(balancesTitle), + selectedBalance: $selectedBalance, +// shouldReloadPending: $shouldReloadPending, + shouldReloadBalances: $shouldReloadBalances) + .navigationTitle(balancesTitle) + .background(balanceActions) + }.navigationViewStyle(.stack) + let settingsStack = NavigationView { + SettingsView(stack: stack.push(), + navTitle: settingsTitle) + .background(settingsActions) + }.navigationViewStyle(.stack) + /// our custom tabBar with the Actions button in the middle + let tabBarView = TabBarView(selection: tabSelection(), userAction: $userAction, hidden: $navModel.tabBarHidden) { + logger.log("onActionTab") + showActionSheet = true + } onActionDrag: { + logger.log("onActionDrag: showScanner = true") + showScanner = true + } + /// custom tabBar is rendered on top of the TabView, and overlaps its tabBar ZStack(alignment: .bottom) { + /// the tabItems (EMPTYSTRING .titleOnly) could indeed be omitted and the app would work the same - but are needed for accessibilityLabel TabView(selection: tabSelection()) { - NavigationView { - BalancesListView(stack: stack.push(balancesTitle), - selectedBalance: $selectedBalance, -// shouldReloadPending: $shouldReloadPending, - shouldReloadBalances: $shouldReloadBalances) - .navigationTitle(balancesTitle) - .background(balanceActions) - }.id(viewState.rootViewId) // any change to rootViewId triggers popToRootView behaviour - .navigationViewStyle(.stack) + balancesStack.id(viewState.rootViewId) // change rootViewId to trigger popToRootView behaviour .tag(Tab.balances) .tabItem { a11yBalanceTab } - - Color.clear + Color.clear // can't use EmptyView because then VoiceOver wouldn't have the Actions tab .tag(Tab.actions) .tabItem { a11yActionsTab } - - NavigationView { - SettingsView(stack: stack.push(), - navTitle: settingsTitle) - .background(settingsActions) - }.id(viewState2.rootViewId) // any change to rootViewId triggers popToRootView behaviour - .navigationViewStyle(.stack) + settingsStack.id(viewState2.rootViewId) // change rootViewId to trigger popToRootView behaviour .tag(Tab.settings) .tabItem { a11ySettingsTab } } // TabView tabBarView .ignoresSafeArea(.keyboard, edges: .bottom) - .accessibilityHidden(true) // for a11y we use the original tabBar, not our custom one + .accessibilityHidden(true) // for a11y we use the original tabBar, not our custom one } // ZStack .frame(maxWidth: .infinity, maxHeight: .infinity) .onNotification(.SendAction) { triggerAction(1) }