WatchConfigStateModel.swift 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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 units: GlucoseUnits = .mgdL
  29. @Published var devices: [IQDevice] = []
  30. @Published var selectedAwConfig: AwConfig = .HR
  31. @Published var displayFatAndProteinOnWatch = false
  32. @Published var confirmBolusFaster = false
  33. private(set) var preferences = Preferences()
  34. override func subscribe() {
  35. preferences = provider.preferences
  36. units = settingsManager.settings.units
  37. subscribeSetting(\.displayFatAndProteinOnWatch, on: $displayFatAndProteinOnWatch) { displayFatAndProteinOnWatch = $0 }
  38. subscribeSetting(\.confirmBolusFaster, on: $confirmBolusFaster) { confirmBolusFaster = $0 }
  39. subscribeSetting(\.displayOnWatch, on: $selectedAwConfig) { selectedAwConfig = $0 }
  40. didSet: { [weak self] value in
  41. // for compatibility with old displayHR
  42. switch value {
  43. case .HR:
  44. self?.settingsManager.settings.displayHR = true
  45. default:
  46. self?.settingsManager.settings.displayHR = false
  47. }
  48. }
  49. devices = garmin.devices
  50. }
  51. func selectGarminDevices() {
  52. garmin.selectDevices()
  53. .receive(on: DispatchQueue.main)
  54. .weakAssign(to: \.devices, on: self)
  55. .store(in: &lifetime)
  56. }
  57. func deleteGarminDevice() {
  58. garmin.updateListDevices(devices: devices)
  59. }
  60. }
  61. }
  62. extension WatchConfig.StateModel: SettingsObserver {
  63. func settingsDidChange(_: FreeAPSSettings) {
  64. units = settingsManager.settings.units
  65. }
  66. }