LibreTransmitterManager+UI.swift 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. import UIKit
  2. import SwiftUI
  3. import HealthKit
  4. public struct LibreTransmitterSetupView: UIViewControllerRepresentable {
  5. public class Coordinator: CompletionDelegate, CGMManagerSetupViewControllerDelegate {
  6. let completion: (() -> Void)?
  7. let setup: ((LibreTransmitterManager) -> Void)?
  8. public func cgmManagerSetupViewController(_ cgmManagerSetupViewController: CGMManagerSetupViewController, didSetUpCGMManager cgmManager: LibreTransmitterManager) {
  9. setup?(cgmManager)
  10. }
  11. public func completionNotifyingDidComplete(_ object: CompletionNotifying) {
  12. completion?()
  13. }
  14. init(completion: (() -> Void)?, setup: ((LibreTransmitterManager) -> Void)?) {
  15. self.completion = completion
  16. self.setup = setup
  17. }
  18. }
  19. private let setup: ((LibreTransmitterManager) -> Void)?
  20. private let completion: (() -> Void)?
  21. public init(setup: ((LibreTransmitterManager) -> Void)? = nil , completion: (() -> Void)? = nil) {
  22. self.setup = setup
  23. self.completion = completion
  24. }
  25. public func makeUIViewController(context: Context) -> UIViewController {
  26. let controller = LibreTransmitterSetupViewController()
  27. controller.completionDelegate = context.coordinator
  28. controller.setupDelegate = context.coordinator
  29. return controller
  30. }
  31. public func updateUIViewController(_ uiViewController: UIViewController, context: Context) {}
  32. public func makeCoordinator() -> Coordinator {
  33. Coordinator(completion: completion, setup: setup)
  34. }
  35. }
  36. public struct LibreTransmitterSettingsView: UIViewControllerRepresentable {
  37. public class Coordinator: CompletionDelegate {
  38. let completion: (() -> Void)?
  39. let delete: (() -> Void)?
  40. public func completionNotifyingDidComplete(_ object: CompletionNotifying) {
  41. completion?()
  42. }
  43. init(completion: (() -> Void)?, delete: (() -> Void)?) {
  44. self.completion = completion
  45. self.delete = delete
  46. }
  47. }
  48. private weak var manager: LibreTransmitterManager!
  49. private let glucoseUnit: HKUnit
  50. private let delete: (() -> Void)?
  51. private let completion: (() -> Void)?
  52. public init(manager: LibreTransmitterManager, glucoseUnit: HKUnit, delete: (() -> Void)? = nil , completion: (() -> Void)? = nil) {
  53. self.manager = manager
  54. self.glucoseUnit = glucoseUnit
  55. self.delete = delete
  56. self.completion = completion
  57. }
  58. public func makeUIViewController(context: Context) -> UIViewController {
  59. let doneNotifier = GenericObservableObject()
  60. let wantToTerminateNotifier = GenericObservableObject()
  61. let settings = SettingsView.asHostedViewController(
  62. glucoseUnit: glucoseUnit,
  63. //displayGlucoseUnitObservable: displayGlucoseUnitObservable,
  64. notifyComplete: doneNotifier,
  65. notifyDelete: wantToTerminateNotifier,
  66. transmitterInfoObservable: manager.transmitterInfoObservable,
  67. sensorInfoObervable: manager.sensorInfoObservable,
  68. glucoseInfoObservable: manager.glucoseInfoObservable
  69. )
  70. let nav = SettingsNavigationViewController(rootViewController: settings)
  71. nav.navigationItem.title = NSLocalizedString("Libre Bluetooth", comment: "Libre Bluetooth")
  72. nav.completionDelegate = context.coordinator
  73. doneNotifier.listenOnce { [weak nav] in
  74. nav?.notifyComplete()
  75. }
  76. wantToTerminateNotifier.listenOnce { [weak nav] in
  77. manager.logger.debug("CGM wants to terminate")
  78. manager.disconnect()
  79. UserDefaults.standard.preSelectedDevice = nil
  80. context.coordinator.delete?()
  81. nav?.notifyComplete()
  82. }
  83. return nav
  84. }
  85. public func makeCoordinator() -> Coordinator {
  86. Coordinator(completion: completion, delete: delete)
  87. }
  88. public func updateUIViewController(_ uiViewController: UIViewController, context: Context) {}
  89. }