diff --git a/FuelBoard/AlertsView.swift b/FuelBoard/AlertsView.swift index 6ed0fca..cfb1d40 100644 --- a/FuelBoard/AlertsView.swift +++ b/FuelBoard/AlertsView.swift @@ -46,6 +46,34 @@ struct AlertsView: View { return "\(shown) \(distanceUnit.label(for: Double(shown)))" } + /// Situational guidance for the currently-selected alert radius, shown + /// under the picker so users know what each choice is best for. Labels + /// mirror the picker row text (unit-aware) and explain the trade-off: + /// smaller radii ping more often but later; larger radii ping rarely in + /// town but earlier from afar. + private var alertRadiusGuidance: String { + switch alertChoice.wrappedValue { + case .followSearch: + return "Set-and-forget: alerts behave exactly like the Stations-tab search distance (capped at 8 miles for reliable geofencing)." + case .fixed(let value): + let optionLabel = "\(value) \(distanceUnit.label(for: Double(value)))" + let body: String + switch value { + case 1: + body = "Town driving. Fires most often — you're rarely inside the circle for long, so pings are meaningful. Best for stop-start local trips." + case 2: + body = "City or suburb commute. Slightly earlier heads-up than the smallest option; still fires regularly around town." + case 3: + body = "Mixed driving. Middle ground: heads-up a few minutes out, still works in most towns." + case 5: + body = "A-roads and motorway exits. Wide early warning for longer trips — but in town it rarely fires, because you're usually already inside the circle." + default: + body = "Long-distance journeys. Maximum reach: a ping when a cheap station is coming up from far out. In town this essentially never fires." + } + return "\(optionLabel) — \(body)" + } + } + private enum AlertRadiusChoice: Hashable { case followSearch case fixed(Int) @@ -115,6 +143,9 @@ struct AlertsView: View { Text("\(value) \(distanceUnit.label(for: Double(value)))").tag(AlertRadiusChoice.fixed(value)) } } + Text(alertRadiusGuidance) + .font(.caption) + .foregroundStyle(.secondary) if enabled && monitoredCount == 0 { Text("No stations monitored yet — open the Stations tab to load prices first.") .font(.caption) @@ -123,7 +154,7 @@ struct AlertsView: View { } header: { Text("Cheapest-station alerts") } footer: { - Text("When you approach a station that is the cheapest within the radius, FuelBoard sends a notification — even with the app closed. Nearby stations selling \(fuel.displayName.lowercased()) are watched — favourites get priority — and each station alerts at most once per hour. Follow search mirrors the Stations-tab distance, capped at 8 miles for reliable geofencing.") + Text("When you approach a station that is the cheapest within the radius, FuelBoard sends a notification — even with the app closed. Nearby stations selling \(fuel.displayName.lowercased()) are watched — favourites get priority — and each station alerts at most once per hour. Follow search mirrors the Stations-tab distance, capped at 8 miles for reliable geofencing. Smaller radii ping more often but later; larger radii ping rarely in town but earlier from afar.") } if enabled, let lastAlert { diff --git a/FuelBoard/Assets.xcassets/AppIcon.appiconset/AppIcon-dark.png b/FuelBoard/Assets.xcassets/AppIcon.appiconset/AppIcon-dark.png index deaaba0..1212077 100644 Binary files a/FuelBoard/Assets.xcassets/AppIcon.appiconset/AppIcon-dark.png and b/FuelBoard/Assets.xcassets/AppIcon.appiconset/AppIcon-dark.png differ diff --git a/FuelBoard/Assets.xcassets/AppIcon.appiconset/AppIcon-tinted.png b/FuelBoard/Assets.xcassets/AppIcon.appiconset/AppIcon-tinted.png index c53a703..5b79482 100644 Binary files a/FuelBoard/Assets.xcassets/AppIcon.appiconset/AppIcon-tinted.png and b/FuelBoard/Assets.xcassets/AppIcon.appiconset/AppIcon-tinted.png differ diff --git a/FuelBoard/Assets.xcassets/AppIcon.appiconset/AppIcon.png b/FuelBoard/Assets.xcassets/AppIcon.appiconset/AppIcon.png index f2eb1ea..2ef738b 100644 Binary files a/FuelBoard/Assets.xcassets/AppIcon.appiconset/AppIcon.png and b/FuelBoard/Assets.xcassets/AppIcon.appiconset/AppIcon.png differ diff --git a/FuelBoard/Assets.xcassets/AppIconArtwork.imageset/AppIconArtwork.png b/FuelBoard/Assets.xcassets/AppIconArtwork.imageset/AppIconArtwork.png index f2eb1ea..2ef738b 100644 Binary files a/FuelBoard/Assets.xcassets/AppIconArtwork.imageset/AppIconArtwork.png and b/FuelBoard/Assets.xcassets/AppIconArtwork.imageset/AppIconArtwork.png differ