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.
This commit is contained in:
FuelBoard Contributor
2026-10-11 21:08:46 +01:00
parent bfa9209d68
commit d5e7ff737f
2 changed files with 10 additions and 12 deletions
+7 -7
View File
@@ -17,12 +17,12 @@ import SwiftUI
struct BestValueIntroContent: View { struct BestValueIntroContent: View {
@Binding var settings: FuelSavingsSettings @Binding var settings: FuelSavingsSettings
/// What the host's primary button should say. Declining is a first-class /// What the host's primary button says. ONE label for both answers: the
/// answer: "Not now" reads as a decision where "Continue" reads as a skip. /// toggle already shows whether Best Value is being switched on, so a
static func primaryTitle(for settings: FuelSavingsSettings) -> String { /// separate "Not now" for the declined case was second-guessing a choice the
settings.enabled /// user could see on screen.
? String(localized: "Continue", comment: "Best Value continue button") static var primaryTitle: String {
: String(localized: "Not now", comment: "Best Value declined button") String(localized: "Continue", comment: "Best Value continue button")
} }
var body: some View { var body: some View {
@@ -214,7 +214,7 @@ struct BestValueIntroView: View {
VStack(spacing: 0) { VStack(spacing: 0) {
BestValueIntroContent(settings: $settings) BestValueIntroContent(settings: $settings)
OnboardingPrimaryButton(title: BestValueIntroContent.primaryTitle(for: settings), OnboardingPrimaryButton(title: BestValueIntroContent.primaryTitle,
action: finish) action: finish)
.padding(.horizontal, 20) .padding(.horizontal, 20)
.padding(.bottom, 24) .padding(.bottom, 24)
+3 -5
View File
@@ -286,11 +286,9 @@ struct OnboardingView: View {
// No permission on this page — prices need none. Straight on. // No permission on this page — prices need none. Straight on.
primaryButton(String(localized: "Continue", comment: "Onboarding continue button")) { page = 4 } primaryButton(String(localized: "Continue", comment: "Onboarding continue button")) { page = 4 }
case 4: case 4:
// Best Value: the button states the answer the toggle is showing, so // Best Value: the settings were saved when the toggle moved, so a
// declining reads as a decision rather than a skip. Either way the // swipe past this page keeps the choice.
// settings were saved when the toggle moved, so a swipe past this primaryButton(BestValueIntroContent.primaryTitle) { page = 5 }
// page keeps the choice.
primaryButton(BestValueIntroContent.primaryTitle(for: fuelSavings)) { page = 5 }
default: default:
primaryButton(String(localized: "Start Using FuelBoard", comment: "Finish onboarding button")) { finish() } primaryButton(String(localized: "Start Using FuelBoard", comment: "Finish onboarding button")) { finish() }
} }