mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-11-14 00:01:03 +00:00
f35b189ca2
A WidgetKit extension (TREKWidgets) with two parts: the next trip on the home screen, with a countdown before it starts and today's day and next stops while it runs, and a Live Activity for the travel day on the lock screen and in the Dynamic Island showing the next timed stop and the day's progress. The web app builds both from the trips stored offline on the device (native/widgets.ts) and hands them over through TrekShell (setWidgetSnapshot, syncTripDay, endTripDay). The texts are already translated, so the widget needs no localisation of its own. The snapshot lives in the keychain group the app shares with its extensions, so no App Group is needed. Taps open com.liketrek.trek://navigate/<path>. NativeWidgetsSync refreshes on start, on returning to the foreground and every quarter hour. Both parts are gated behind the widgets / liveActivity capabilities, so older binaries and the PWA are unaffected.
25 lines
870 B
Swift
25 lines
870 B
Swift
import ActivityKit
|
|
import Foundation
|
|
|
|
/// The Live Activity for a travel day: which trip and day, and the next stop.
|
|
/// Compiled into both the app (which starts and updates it, TrekShellPlugin)
|
|
/// and the widget extension (which draws it, TripDayLiveActivity).
|
|
@available(iOS 16.1, *)
|
|
struct TripDayAttributes: ActivityAttributes {
|
|
struct ContentState: Codable, Hashable {
|
|
/// "Day 2 of 5", already in the user's language.
|
|
var dayLabel: String
|
|
/// The next stop, or the label for "all done" once the day's stops are behind.
|
|
var nextName: String
|
|
/// The next stop's time as the user formats it, if it has one.
|
|
var nextTime: String?
|
|
/// Stops behind, out of the day's stops.
|
|
var done: Int
|
|
var total: Int
|
|
}
|
|
|
|
var tripTitle: String
|
|
/// The app path a tap opens.
|
|
var path: String
|
|
}
|