// LoopFollow // Observable.swift import Foundation import HealthKit import SwiftUI /* Observable in memory storage */ class Observable { static let shared = Observable() var tempTarget = ObservableValue(default: nil) var override = ObservableValue(default: nil) /// End of the active override as Unix epoch seconds; nil = no override or indefinite. var overrideEndAt = ObservableValue(default: nil) /// End of the active temp target as Unix epoch seconds; nil = no active temp target. var tempTargetEndAt = ObservableValue(default: nil) var minAgoText = ObservableValue(default: String(localized: "?? min ago")) var bgText = ObservableValue(default: "BG") var bg = ObservableValue(default: nil) var bgStale = ObservableValue(default: true) var bgTextColor = ObservableValue(default: .primary) var directionText = ObservableValue(default: "-") var deltaText = ObservableValue(default: "+0") var iobText = ObservableValue(default: "--") var serverText = ObservableValue(default: "Server") var loopStatusText = ObservableValue(default: "") var loopStatusColor = ObservableValue(default: .primary) var predictionText = ObservableValue(default: "") var predictionColor = ObservableValue(default: .purple) var currentAlarm = ObservableValue(default: nil) var alarmSoundPlaying = ObservableValue(default: false) var debug = ObservableValue(default: false) var chartSettingsChanged = ObservableValue(default: false) var alertLastLoopTime = ObservableValue(default: nil) var previousAlertLastLoopTime = ObservableValue(default: nil) var deviceRecBolus = ObservableValue(default: nil) var deviceBatteryLevel = ObservableValue(default: nil) var deviceBatteryIsCharging = ObservableValue(default: nil) var pumpBatteryLevel = ObservableValue(default: nil) var dbSizePercentage = ObservableValue(default: nil) var enactedOrSuggested = ObservableValue(default: nil) var lastSentTOTP = ObservableValue(default: nil) var loopFollowDeviceToken = ObservableValue(default: "") var isNotLooping = ObservableValue(default: false) /// Selected tab index used by SwiftUI TabView — set from MainViewController to switch tabs var selectedTabIndex = ObservableValue(default: 0) /// Currently visible app-wide banner (nil = hidden). Managed by BannerManager. var activeBanner = ObservableValue(default: nil) /// True while the onboarding cover is on screen; AlarmManager doesn't act /// on alarms while set. In-memory, so background launches are unaffected. var isOnboardingActive = ObservableValue(default: false) private init() {} }