WatchConfigStateModel.swift 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import ConnectIQ
  2. import SwiftUI
  3. enum AwConfig: String, JSON, CaseIterable, Identifiable, Codable {
  4. var id: String { rawValue }
  5. case HR
  6. case BGTarget
  7. case steps
  8. case isf
  9. case override
  10. var displayName: String {
  11. switch self {
  12. case .BGTarget:
  13. return NSLocalizedString("Glucose Target", comment: "")
  14. case .HR:
  15. return NSLocalizedString("Heart Rate", comment: "")
  16. case .steps:
  17. return NSLocalizedString("Steps", comment: "")
  18. case .isf:
  19. return NSLocalizedString("ISF", comment: "")
  20. case .override:
  21. return NSLocalizedString("% Override", comment: "")
  22. }
  23. }
  24. }
  25. extension WatchConfig {
  26. final class StateModel: BaseStateModel<Provider> {
  27. @Injected() private var garmin: GarminManager!
  28. @Published var devices: [IQDevice] = []
  29. @Published var selectedAwConfig: AwConfig = .HR
  30. @Published var displayFatAndProteinOnWatch = false
  31. private(set) var preferences = Preferences()
  32. override func subscribe() {
  33. preferences = provider.preferences
  34. subscribeSetting(\.displayFatAndProteinOnWatch, on: $displayFatAndProteinOnWatch) { displayFatAndProteinOnWatch = $0 }
  35. subscribeSetting(\.displayOnWatch, on: $selectedAwConfig) { selectedAwConfig = $0 }
  36. didSet: { [weak self] value in
  37. // for compatibility with old displayHR
  38. switch value {
  39. case .HR:
  40. self?.settingsManager.settings.displayHR = true
  41. default:
  42. self?.settingsManager.settings.displayHR = false
  43. }
  44. }
  45. devices = garmin.devices
  46. }
  47. func selectGarminDevices() {
  48. garmin.selectDevices()
  49. .receive(on: DispatchQueue.main)
  50. .weakAssign(to: \.devices, on: self)
  51. .store(in: &lifetime)
  52. }
  53. func deleteGarminDevice() {
  54. garmin.updateListDevices(devices: devices)
  55. }
  56. }
  57. }