HealthKitStateModel.swift 1.5 KB

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