MockPumpManager+UI.swift 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. //
  2. // MockPumpManager+UI.swift
  3. // LoopKitUI
  4. //
  5. // Created by Michael Pangburn on 11/20/18.
  6. // Copyright © 2018 LoopKit Authors. All rights reserved.
  7. //
  8. import Foundation
  9. import SwiftUI
  10. import LoopKit
  11. import LoopKitUI
  12. import MockKit
  13. extension MockPumpManager: PumpManagerUI {
  14. private var appName: String {
  15. return Bundle.main.object(forInfoDictionaryKey: "CFBundleDisplayName") as! String
  16. }
  17. public static var onboardingImage: UIImage? { return UIImage(named: "Pump Simulator", in: Bundle(for: MockPumpManagerSettingsViewController.self), compatibleWith: nil) }
  18. public var smallImage: UIImage? { return UIImage(named: "Pump Simulator", in: Bundle(for: MockPumpManagerSettingsViewController.self), compatibleWith: nil) }
  19. public static func setupViewController(initialSettings settings: PumpManagerSetupSettings, bluetoothProvider: BluetoothProvider, colorPalette: LoopUIColorPalette, allowDebugFeatures: Bool, prefersToSkipUserInteraction: Bool, allowedInsulinTypes: [InsulinType]) -> SetupUIResult<PumpManagerViewController, PumpManagerUI> {
  20. let mockPumpManager = MockPumpManager()
  21. mockPumpManager.setMaximumTempBasalRate(settings.maxBasalRateUnitsPerHour)
  22. mockPumpManager.syncBasalRateSchedule(items: settings.basalSchedule.items, completion: { _ in })
  23. return .createdAndOnboarded(mockPumpManager)
  24. }
  25. public func settingsViewController(bluetoothProvider: BluetoothProvider, colorPalette: LoopUIColorPalette, allowDebugFeatures: Bool, allowedInsulinTypes: [InsulinType]) -> PumpManagerViewController {
  26. let settings = MockPumpManagerSettingsView(pumpManager: self, supportedInsulinTypes: allowedInsulinTypes, appName: appName, allowDebugFeatures: allowDebugFeatures)
  27. let hostingController = DismissibleHostingController(content: settings, isModalInPresentation: false, colorPalette: colorPalette)
  28. hostingController.navigationItem.backButtonDisplayMode = .generic
  29. let nav = PumpManagerSettingsNavigationViewController(rootViewController: hostingController)
  30. nav.navigationBar.prefersLargeTitles = true
  31. return nav
  32. }
  33. public func deliveryUncertaintyRecoveryViewController(colorPalette: LoopUIColorPalette, allowDebugFeatures: Bool) -> (UIViewController & CompletionNotifying) {
  34. return DeliveryUncertaintyRecoveryViewController(appName: appName, uncertaintyStartedAt: Date()) {
  35. self.state.deliveryCommandsShouldTriggerUncertainDelivery = false
  36. self.state.deliveryIsUncertain = false
  37. }
  38. }
  39. public func hudProvider(bluetoothProvider: BluetoothProvider, colorPalette: LoopUIColorPalette, allowedInsulinTypes: [InsulinType]) -> HUDProvider? {
  40. return MockHUDProvider(pumpManager: self, allowedInsulinTypes: allowedInsulinTypes)
  41. }
  42. public static func createHUDView(rawValue: HUDProvider.HUDViewRawState) -> BaseHUDView? {
  43. return MockHUDProvider.createHUDView(rawValue: rawValue)
  44. }
  45. }
  46. public enum MockPumpStatusBadge: DeviceStatusBadge {
  47. case timeSyncNeeded
  48. public var image: UIImage? {
  49. switch self {
  50. case .timeSyncNeeded:
  51. return UIImage(systemName: "clock.fill")
  52. }
  53. }
  54. public var state: DeviceStatusBadgeState {
  55. switch self {
  56. case .timeSyncNeeded:
  57. return .warning
  58. }
  59. }
  60. }
  61. // MARK: - PumpStatusIndicator
  62. extension MockPumpManager {
  63. public var pumpStatusHighlight: DeviceStatusHighlight? {
  64. return buildPumpStatusHighlight(for: state)
  65. }
  66. public var pumpLifecycleProgress: DeviceLifecycleProgress? {
  67. return buildPumpLifecycleProgress(for: state)
  68. }
  69. public var pumpStatusBadge: DeviceStatusBadge? {
  70. return isClockOffset ? MockPumpStatusBadge.timeSyncNeeded : nil
  71. }
  72. }