feat(watch): display water lock status indicator during workout

This commit is contained in:
2026-08-09 18:33:23 +02:00
parent 383f641ac2
commit a17ae0dea5
3 changed files with 320 additions and 240 deletions
+22
View File
@@ -41,6 +41,9 @@ class WorkoutManager: NSObject, ObservableObject, HKLiveWorkoutBuilderDelegate {
@Published var lapDetected = false
@Published var healthKitAuthorized = false
@Published var isPaused = false
@Published var isWaterLockEnabled = false
private var waterLockCheckTimer: Timer?
override init() {
super.init()
@@ -163,6 +166,7 @@ class WorkoutManager: NSObject, ObservableObject, HKLiveWorkoutBuilderDelegate {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
WKInterfaceDevice.current().enableWaterLock()
}
startWaterLockCheck()
WKInterfaceDevice.current().play(.start)
}
@@ -189,6 +193,7 @@ class WorkoutManager: NSObject, ObservableObject, HKLiveWorkoutBuilderDelegate {
restTimer?.invalidate()
isWorkoutActive = false
stopWaterLockCheck()
stopLapDetection()
stopHeartRateQuery()
stopCalorieQuery()
@@ -199,6 +204,23 @@ class WorkoutManager: NSObject, ObservableObject, HKLiveWorkoutBuilderDelegate {
WKInterfaceDevice.current().play(.success)
}
// MARK: - Water Lock Check
private func startWaterLockCheck() {
isWaterLockEnabled = WKInterfaceDevice.current().isWaterLockEnabled
waterLockCheckTimer = Timer.scheduledTimer(withTimeInterval: 1.5, repeats: true) { [weak self] _ in
DispatchQueue.main.async {
self?.isWaterLockEnabled = WKInterfaceDevice.current().isWaterLockEnabled
}
}
}
private func stopWaterLockCheck() {
waterLockCheckTimer?.invalidate()
waterLockCheckTimer = nil
isWaterLockEnabled = false
}
// MARK: - Workout Summary
private func createWorkoutSummary() {