From d5e7ff737fd03a30544f5d60089eb99d28890ab4 Mon Sep 17 00:00:00 2001 From: FuelBoard Contributor Date: Sun, 11 Oct 2026 21:08:46 +0100 Subject: [PATCH] Best Value page: the button says Continue in both states The declined state had its own "Not now" label, on the theory that declining should read as a decision rather than a skip. In practice the toggle above it already shows which answer is being given, so the second label only added a second thing to read. The label is now an unconditional Continue for both states, which also let primaryTitle drop the settings value it no longer consulted. Nothing else about the page changed: the toggle still hides the sliders when off, the "can be turned on in Settings" note still appears when declined, and the settings still save as the controls move. Verified on the simulator (OCR of the rendered screens): the announcement page, and the onboarding page with the toggle both off and on, all show Continue as the bottom button. No "Not now" remains in the app's source. 180 tests, 0 failures. --- FuelBoard/BestValueIntroView.swift | 14 +++++++------- FuelBoard/OnboardingView.swift | 8 +++----- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/FuelBoard/BestValueIntroView.swift b/FuelBoard/BestValueIntroView.swift index b71a79f..a400ffc 100644 --- a/FuelBoard/BestValueIntroView.swift +++ b/FuelBoard/BestValueIntroView.swift @@ -17,12 +17,12 @@ import SwiftUI struct BestValueIntroContent: View { @Binding var settings: FuelSavingsSettings - /// What the host's primary button should say. Declining is a first-class - /// answer: "Not now" reads as a decision where "Continue" reads as a skip. - static func primaryTitle(for settings: FuelSavingsSettings) -> String { - settings.enabled - ? String(localized: "Continue", comment: "Best Value continue button") - : String(localized: "Not now", comment: "Best Value declined button") + /// What the host's primary button says. ONE label for both answers: the + /// toggle already shows whether Best Value is being switched on, so a + /// separate "Not now" for the declined case was second-guessing a choice the + /// user could see on screen. + static var primaryTitle: String { + String(localized: "Continue", comment: "Best Value continue button") } var body: some View { @@ -214,7 +214,7 @@ struct BestValueIntroView: View { VStack(spacing: 0) { BestValueIntroContent(settings: $settings) - OnboardingPrimaryButton(title: BestValueIntroContent.primaryTitle(for: settings), + OnboardingPrimaryButton(title: BestValueIntroContent.primaryTitle, action: finish) .padding(.horizontal, 20) .padding(.bottom, 24) diff --git a/FuelBoard/OnboardingView.swift b/FuelBoard/OnboardingView.swift index eb5bec1..8e51b43 100644 --- a/FuelBoard/OnboardingView.swift +++ b/FuelBoard/OnboardingView.swift @@ -286,11 +286,9 @@ struct OnboardingView: View { // No permission on this page — prices need none. Straight on. primaryButton(String(localized: "Continue", comment: "Onboarding continue button")) { page = 4 } case 4: - // Best Value: the button states the answer the toggle is showing, so - // declining reads as a decision rather than a skip. Either way the - // settings were saved when the toggle moved, so a swipe past this - // page keeps the choice. - primaryButton(BestValueIntroContent.primaryTitle(for: fuelSavings)) { page = 5 } + // Best Value: the settings were saved when the toggle moved, so a + // swipe past this page keeps the choice. + primaryButton(BestValueIntroContent.primaryTitle) { page = 5 } default: primaryButton(String(localized: "Start Using FuelBoard", comment: "Finish onboarding button")) { finish() } }