Files
fuelboard/Shared/FuelBoardLiveActivity.swift
T
FuelBoard Contributor fcb83f1eed Live Activity: own fuel + distance config, independent of Stations tab
- Settings → Live Activity now has Fuel and Distance pickers (5/10/15,
  unit-aware) stored under fuelboard.liveActivityFuel / liveActivityRadiusMiles
- LiveActivityManager uses these instead of the Stations-tab selectedFuel /
  stationLimit; Stations changes no longer re-target the pill
- Fuel moved from Activity attributes into ContentState so changing fuel in
  Settings updates the RUNNING activity in place (no end+restart needed)
- Stations tab stays a pure data-interrogation + favourites surface
2026-08-12 20:58:05 +01:00

34 lines
1.4 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
var distanceKM: Double
var lat: Double
var lng: Double
var updatedAt: Date
}
}