Live Activity: price now respects the Price display style — style carried in ContentState (captured at push time, extension renders deterministically instead of re-reading storage), setting change pushes an in-place content update via explicit override (no save-ordering race)
This commit is contained in:
@@ -322,13 +322,21 @@ struct ContentView: View {
|
||||
fuel: alertsFuel, radiusKM: effectiveAlertsRadiusKM)
|
||||
}
|
||||
}
|
||||
.onChange(of: priceDisplayStyle) { _, newValue in
|
||||
// The pill carries its own display style in content state — push
|
||||
// an update so the running activity re-renders in the new style
|
||||
// immediately. Pass the style explicitly: SettingsView saves it
|
||||
// in its own onChange, whose ordering vs this one isn't guaranteed,
|
||||
// so reading storage here could push the OLD style.
|
||||
updateLiveActivity(priceDisplayStyleOverride: newValue)
|
||||
}
|
||||
}
|
||||
|
||||
/// Pushes the current best-in-radius station into the Live Activity.
|
||||
/// No-op (or ends the activity) when the toggle is off or there's no
|
||||
/// location/data yet. Uses the Live Activity's OWN fuel + radius (set in
|
||||
/// Settings) — independent of the Stations-tab fuel/distance.
|
||||
private func updateLiveActivity() {
|
||||
private func updateLiveActivity(priceDisplayStyleOverride: PriceDisplayStyle? = nil) {
|
||||
// "Follow search" mirrors the Stations-tab distance exactly (no cap —
|
||||
// the pill only displays, it doesn't geofence).
|
||||
let radiusKM = liveActivityFollowsSearch
|
||||
@@ -339,7 +347,8 @@ struct ContentView: View {
|
||||
fuel: liveActivityFuel,
|
||||
radiusKM: radiusKM,
|
||||
location: location,
|
||||
enabled: liveActivityEnabled
|
||||
enabled: liveActivityEnabled,
|
||||
priceDisplayStyle: priceDisplayStyleOverride
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -28,12 +28,15 @@ enum LiveActivityManager {
|
||||
|
||||
/// Recomputes the cheapest-in-radius station and updates the activity.
|
||||
/// Passing `enabled: false` (or no usable data) ends any running activity.
|
||||
/// `priceDisplayStyle` overrides the saved style (used when the setting
|
||||
/// just changed and the save may not have landed yet); nil = read storage.
|
||||
static func update(
|
||||
stations: [FuelStation],
|
||||
fuel: FuelType,
|
||||
radiusKM: Double,
|
||||
location: Coordinate?,
|
||||
enabled: Bool
|
||||
enabled: Bool,
|
||||
priceDisplayStyle: PriceDisplayStyle? = nil
|
||||
) {
|
||||
guard enabled, let location else {
|
||||
end()
|
||||
@@ -53,6 +56,7 @@ enum LiveActivityManager {
|
||||
stationName: best.name,
|
||||
brand: best.brand,
|
||||
pricePence: price,
|
||||
priceDisplayStyle: priceDisplayStyle ?? FuelStore.loadPriceDisplayStyle(),
|
||||
distanceKM: best.distanceKM(to: location.lat, lng2: location.lng),
|
||||
lat: best.lat,
|
||||
lng: best.lng,
|
||||
|
||||
Reference in New Issue
Block a user