// // LiveActivityManager.swift // Keging // // 다이나믹 아일랜드 Live Activity — 현재 횟수·수축/이완 국면 표시 // import ActivityKit import Foundation @MainActor final class LiveActivityManager { static let shared = LiveActivityManager() private var activity: Activity? private init() {} func start(totalReps: Int, phase: KegelPhase, rep: Int, phaseEnd: Date) { guard ActivityAuthorizationInfo().areActivitiesEnabled else { return } end() let state = KegingActivityAttributes.ContentState( phase: phase, rep: rep, totalReps: totalReps, phaseStart: Date(), phaseEnd: phaseEnd ) activity = try? Activity.request( attributes: KegingActivityAttributes(startedAt: Date()), content: ActivityContent(state: state, staleDate: nil) ) } func update(phase: KegelPhase, rep: Int, totalReps: Int, phaseEnd: Date) { guard let activity else { return } let state = KegingActivityAttributes.ContentState( phase: phase, rep: rep, totalReps: totalReps, phaseStart: Date(), phaseEnd: phaseEnd ) Task { await activity.update(ActivityContent(state: state, staleDate: nil)) } } func end() { guard let activity else { return } self.activity = nil Task { await activity.end(nil, dismissalPolicy: .immediate) } } }