mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-21 13:53:37 +00:00
[ios] Remove all activities on track recording start and stop
Closes https://github.com/organicmaps/organicmaps/issues/11045 1. Remove all activities on track recording start and stop 2. Store the latest activity id in the UD to retrieve on launch after the app termination Signed-off-by: Kiryl Kaveryn <kirylkaveryn@gmail.com>
This commit is contained in:
committed by
Yannik Bloscheck
parent
8e9dbe0248
commit
31970c87c4
@@ -2,6 +2,8 @@ import ActivityKit
|
|||||||
|
|
||||||
#if canImport(ActivityKit)
|
#if canImport(ActivityKit)
|
||||||
|
|
||||||
|
private let kCurrentTrackRecordingLiveActivityIDKey = "kCurrentTrackRecordingLiveActivityIDKey"
|
||||||
|
|
||||||
protocol TrackRecordingActivityManager {
|
protocol TrackRecordingActivityManager {
|
||||||
func start(with info: TrackInfo) throws
|
func start(with info: TrackInfo) throws
|
||||||
func update(_ info: TrackInfo)
|
func update(_ info: TrackInfo)
|
||||||
@@ -22,25 +24,39 @@ final class TrackRecordingLiveActivityManager {
|
|||||||
|
|
||||||
@available(iOS 16.2, *)
|
@available(iOS 16.2, *)
|
||||||
extension TrackRecordingLiveActivityManager: TrackRecordingActivityManager {
|
extension TrackRecordingLiveActivityManager: TrackRecordingActivityManager {
|
||||||
|
|
||||||
func start(with info: TrackInfo) throws {
|
func start(with info: TrackInfo) throws {
|
||||||
guard activity == nil else { return }
|
stop()
|
||||||
let state = TrackRecordingLiveActivityAttributes.ContentState(trackInfo: info)
|
let state = TrackRecordingLiveActivityAttributes.ContentState(trackInfo: info)
|
||||||
let content = ActivityContent<TrackRecordingLiveActivityAttributes.ContentState>(state: state, staleDate: nil)
|
let content = ActivityContent<TrackRecordingLiveActivityAttributes.ContentState>(state: state, staleDate: nil)
|
||||||
let attributes = TrackRecordingLiveActivityAttributes()
|
let attributes = TrackRecordingLiveActivityAttributes()
|
||||||
activity = try LiveActivityManager.startActivity(attributes, content: content)
|
let activity = try LiveActivityManager.startActivity(attributes, content: content)
|
||||||
|
self.activity = activity
|
||||||
|
UserDefaults.standard.set(activity.id, forKey: kCurrentTrackRecordingLiveActivityIDKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
func update(_ info: TrackInfo) {
|
func update(_ info: TrackInfo) {
|
||||||
guard let activity else { return }
|
guard let activity = activity ?? fetchCurrentActivity() else {
|
||||||
|
LOG(.warning, "No active TrackRecordingLiveActivity found to update.")
|
||||||
|
return
|
||||||
|
}
|
||||||
let state = TrackRecordingLiveActivityAttributes.ContentState(trackInfo: info)
|
let state = TrackRecordingLiveActivityAttributes.ContentState(trackInfo: info)
|
||||||
let content = ActivityContent<TrackRecordingLiveActivityAttributes.ContentState>(state: state, staleDate: nil)
|
let content = ActivityContent<TrackRecordingLiveActivityAttributes.ContentState>(state: state, staleDate: nil)
|
||||||
|
self.activity = activity
|
||||||
LiveActivityManager.update(activity, content: content)
|
LiveActivityManager.update(activity, content: content)
|
||||||
}
|
}
|
||||||
|
|
||||||
func stop() {
|
func stop() {
|
||||||
guard let activity else { return }
|
let activities = Activity<TrackRecordingLiveActivityAttributes>.activities
|
||||||
LiveActivityManager.stop(activity)
|
activities.forEach(LiveActivityManager.stop)
|
||||||
self.activity = nil
|
activity = nil
|
||||||
|
UserDefaults.standard.removeObject(forKey: kCurrentTrackRecordingLiveActivityIDKey)
|
||||||
|
}
|
||||||
|
|
||||||
|
private func fetchCurrentActivity() -> Activity<TrackRecordingLiveActivityAttributes>? {
|
||||||
|
guard let id = UserDefaults.standard.string(forKey: kCurrentTrackRecordingLiveActivityIDKey) else { return nil }
|
||||||
|
let activities = Activity<TrackRecordingLiveActivityAttributes>.activities
|
||||||
|
return activities.first(where: { $0.id == id })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user