- 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
34 lines
1.4 KiB
Swift
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
|
|
}
|
|
}
|