HealthKitStateModel.swift 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import Combine
  2. import SwiftUI
  3. extension AppleHealthKit {
  4. final class StateModel: BaseStateModel<Provider> {
  5. @Injected() var healthKitManager: HealthKitManager!
  6. @Published var units: GlucoseUnits = .mgdL
  7. @Published var useAppleHealth = false
  8. @Published var needShowInformationTextForSetPermissions = false
  9. override func subscribe() {
  10. units = settingsManager.settings.units
  11. useAppleHealth = settingsManager.settings.useAppleHealth
  12. needShowInformationTextForSetPermissions = healthKitManager.areAllowAllPermissions
  13. subscribeSetting(\.useAppleHealth, on: $useAppleHealth) {
  14. useAppleHealth = $0
  15. } didSet: { [weak self] value in
  16. guard let self = self else { return }
  17. guard value else {
  18. self.needShowInformationTextForSetPermissions = false
  19. return
  20. }
  21. self.healthKitManager.requestPermission { ok, error in
  22. DispatchQueue.main.async {
  23. self.needShowInformationTextForSetPermissions = !self.healthKitManager.checkAvailabilitySaveBG()
  24. }
  25. guard ok, error == nil else {
  26. warning(.service, "Permission not granted for HealthKitManager", error: error)
  27. return
  28. }
  29. debug(.service, "Permission granted HealthKitManager")
  30. self.healthKitManager.createBGObserver()
  31. self.healthKitManager.enableBackgroundDelivery()
  32. }
  33. }
  34. }
  35. }
  36. }
  37. extension AppleHealthKit.StateModel: SettingsObserver {
  38. func settingsDidChange(_: FreeAPSSettings) {
  39. units = settingsManager.settings.units
  40. }
  41. }