Files
fuelboard/Shared/FuelBoardLiveActivity.swift
T

38 lines
1.7 KiB
Swift

// FuelBoardLiveActivity.swift — Live Activity shared model.
//
// Compiled into BOTH the app target (to start/update/end the activity) and
// the widget extension (to render it). ActivityKit is iOS-only, so this file
// is deliberately NOT symlinked into FuelBoardTests/Sources — the SPM test
// target runs on macOS where ActivityKit does not exist.
//
// The activity tracks the cheapest station for the fuel + radius configured
// in Settings → Live Activity (INDEPENDENT of the Stations-tab selection).
// Everything dynamic lives in ContentState so updates — including a fuel
// change — apply to the running activity without needing to restart it.
// Tapping the activity opens Apple Maps driving directions (maps://).
import ActivityKit
import Foundation
/// Attributes are fixed at request time. Kept empty: the fuel itself lives in
/// ContentState so a fuel change in Settings updates the running activity
/// in place instead of requiring an end + restart.
struct FuelBoardLiveActivityAttributes: ActivityAttributes {
public struct ContentState: Codable, Hashable {
var fuel: FuelType
var stationID: String
var stationName: String
var brand: String
/// Price in pence per litre (same unit as `FuelStation.prices`).
var pricePence: Double
/// Display style at push time (station sign vs pounds & pence) — carried
/// in the state so the extension renders deterministically instead of
/// re-reading storage that may not be shared on sideloads.
var priceDisplayStyle: PriceDisplayStyle
var distanceKM: Double
var lat: Double
var lng: Double
var updatedAt: Date
}
}