// LoopFollow // UserDefaults.swift // Created by Jon Fawcett on 2020-06-05. import Foundation import HealthKit import UIKit /* Legacy storage, we are moving away from this */ class UserDefaultsRepository { static let infoSort = UserDefaultsValue<[Int]>(key: "infoSort", default: InfoType.allCases.map { $0.sortOrder }) static let infoVisible = UserDefaultsValue<[Bool]>(key: "infoVisible", default: InfoType.allCases.map { $0.defaultVisible }) static func synchronizeInfoTypes() { var sortArray = infoSort.value var visibleArray = infoVisible.value // Current valid indices based on InfoType let currentValidIndices = InfoType.allCases.map { $0.rawValue } // Add missing indices to sortArray for index in currentValidIndices { if !sortArray.contains(index) { sortArray.append(index) // print("Added missing index \(index) to sortArray") } } // Remove deprecated indices sortArray = sortArray.filter { currentValidIndices.contains($0) } // Ensure visibleArray is updated with new entries if visibleArray.count < currentValidIndices.count { for i in visibleArray.count ..< currentValidIndices.count { visibleArray.append(InfoType(rawValue: i)?.defaultVisible ?? false) // print("Added default visibility for new index \(i)") } } // Trim excess elements if there are more than needed if visibleArray.count > currentValidIndices.count { visibleArray = Array(visibleArray.prefix(currentValidIndices.count)) // print("Trimmed visibleArray to match current valid indices") } infoSort.value = sortArray infoVisible.value = visibleArray } static let hideInfoTable = UserDefaultsValue(key: "hideInfoTable", default: false) // Nightscout Settings static let token = UserDefaultsValue(key: "token", default: "") static let units = UserDefaultsValue(key: "units", default: "mg/dL") static func getPreferredUnit() -> HKUnit { let unitString = units.value switch unitString { case "mmol/L": return .millimolesPerLiter default: return .milligramsPerDeciliter } } static func setPreferredUnit(_ unit: HKUnit) { var unitString = "mg/dL" if unit == .millimolesPerLiter { unitString = "mmol/L" } units.value = unitString } // Dexcom Share Settings static let shareUserName = UserDefaultsValue(key: "shareUserName", default: "") static let sharePassword = UserDefaultsValue(key: "sharePassword", default: "") static let shareServer = UserDefaultsValue(key: "shareServer", default: "US") // Graph Settings static let chartScaleX = UserDefaultsValue(key: "chartScaleX", default: 18.0) // Deprecated, used to detect if backgroundRefresh was set to off. TODO: Remove in the beginning of 2026 static let backgroundRefresh = UserDefaultsValue(key: "backgroundRefresh", default: true) // Advanced Settings static let downloadTreatments = UserDefaultsValue(key: "downloadTreatments", default: true) static let downloadPrediction = UserDefaultsValue(key: "downloadPrediction", default: true) static let graphOtherTreatments = UserDefaultsValue(key: "graphOtherTreatments", default: true) static let graphBasal = UserDefaultsValue(key: "graphBasal", default: true) static let graphBolus = UserDefaultsValue(key: "graphBolus", default: true) static let graphCarbs = UserDefaultsValue(key: "graphCarbs", default: true) static let bgUpdateDelay = UserDefaultsValue(key: "bgUpdateDelay", default: 10) static let alertCageInsertTime = UserDefaultsValue(key: "alertCageInsertTime", default: 0) static let alertSageInsertTime = UserDefaultsValue(key: "alertSageInsertTime", default: 0) static let alertNotLoopingActive = UserDefaultsValue(key: "alertNotLoopingActive", default: false) static let alertNotLooping = UserDefaultsValue(key: "alertNotLooping", default: 31) static let alertNotLoopingSnooze = UserDefaultsValue(key: "alertNotLoopingSnooze", default: 30) static let alertNotLoopingUseLimits = UserDefaultsValue(key: "alertNotLoopingUseLimits", default: false) static let alertNotLoopingLowerLimit = UserDefaultsValue(key: "alertNotLoopingBelowBG", default: 100.0) static let alertNotLoopingUpperLimit = UserDefaultsValue(key: "alertNotLoopingAboveBG", default: 160.0) static let alertNotLoopingSnoozedTime = UserDefaultsValue(key: "alertNotLoopingSnoozedTime", default: nil) static let alertNotLoopingIsSnoozed = UserDefaultsValue(key: "alertNotLoopingIsSnoozed", default: false) static let alertNotLoopingRepeat = UserDefaultsValue(key: "alertNotLoopingRepeat", default: "Never") static let alertNotLoopingDayTime = UserDefaultsValue(key: "alertNotLoopingDayTime", default: false) static let alertNotLoopingNightTime = UserDefaultsValue(key: "alertNotLoopingNightTime", default: false) static let alertNotLoopingSound = UserDefaultsValue(key: "alertNotLoopingSound", default: "Sci-Fi_Engine_Shut_Down") static let alertLastLoopTime = UserDefaultsValue(key: "alertLastLoopTime", default: 0) static let alertNotLoopingAudible = UserDefaultsValue(key: "alertNotLoopingAudible", default: "Always") static let alertNotLoopingDayTimeAudible = UserDefaultsValue(key: "alertNotLoopingDayTimeAudible", default: true) static let alertNotLoopingNightTimeAudible = UserDefaultsValue(key: "alertNotLoopingNightTimeAudible", default: true) static let alertNotLoopingAutosnooze = UserDefaultsValue(key: "alertNotLoopingAutosnooze", default: "Never") static let alertNotLoopingAutosnoozeDay = UserDefaultsValue(key: "alertNotLoopingAutosnoozeDay", default: false) static let alertNotLoopingAutosnoozeNight = UserDefaultsValue(key: "alertNotLoopingAutosnoozeNight", default: false) static let alertMissedBolusActive = UserDefaultsValue(key: "alertMissedBolusActive", default: false) static let alertMissedBolus = UserDefaultsValue(key: "alertMissedBolus", default: 10) static let alertMissedBolusSnooze = UserDefaultsValue(key: "alertMissedBolusSnooze", default: 10) static let alertMissedBolusPrebolus = UserDefaultsValue(key: "alertMissedBolusPrebolus", default: 20) static let alertMissedBolusIgnoreBolus = UserDefaultsValue(key: "alertMissedBolusIgnoreBolus", default: 0.5) static let alertMissedBolusLowGrams = UserDefaultsValue(key: "alertMissedBolusLowGrams", default: 10) static let alertMissedBolusLowGramsBG = UserDefaultsValue(key: "alertMissedBolusLowGramsBG", default: 70.0) static let alertMissedBolusSnoozedTime = UserDefaultsValue(key: "alertMissedBolusSnoozedTime", default: nil) static let alertMissedBolusIsSnoozed = UserDefaultsValue(key: "alertMissedBolusIsSnoozed", default: false) static let alertMissedBolusQuiet = UserDefaultsValue(key: "alertMissedBolusQuiet", default: false) static let alertMissedBolusRepeat = UserDefaultsValue(key: "alertMissedBolusRepeat", default: "Never") static let alertMissedBolusDayTime = UserDefaultsValue(key: "alertMissedBolusDayTime", default: false) static let alertMissedBolusNightTime = UserDefaultsValue(key: "alertMissedBolusNightTime", default: false) static let alertMissedBolusSound = UserDefaultsValue(key: "alertMissedBolusSound", default: "Dhol_Shuffleloop") static let alertMissedBolusAudible = UserDefaultsValue(key: "alertMissedBolusAudible", default: "Always") static let alertMissedBolusDayTimeAudible = UserDefaultsValue(key: "alertMissedBolusDayTimeAudible", default: true) static let alertMissedBolusNightTimeAudible = UserDefaultsValue(key: "alertMissedBolusNightTimeAudible", default: true) static let alertMissedBolusAutosnooze = UserDefaultsValue(key: "alertMissedBolusAutosnooze", default: "Never") static let alertMissedBolusAutosnoozeDay = UserDefaultsValue(key: "alertMissedBolusAutosnoozeDay", default: false) static let alertMissedBolusAutosnoozeNight = UserDefaultsValue(key: "alertMissedBolusAutosnoozeNight", default: false) static let alertSAGEActive = UserDefaultsValue(key: "alertSAGEActive", default: false) static let alertSAGE = UserDefaultsValue(key: "alertSAGE", default: 8) // Hours static let alertSAGEQuiet = UserDefaultsValue(key: "alertSAGEQuiet", default: false) static let alertSAGERepeat = UserDefaultsValue(key: "alertSAGERepeat", default: "Never") static let alertSAGEDayTime = UserDefaultsValue(key: "alertSAGEDayTime", default: false) static let alertSAGENightTime = UserDefaultsValue(key: "alertSAGENightTime", default: false) static let alertSAGEAudible = UserDefaultsValue(key: "alertSAGEAudible", default: "Always") static let alertSAGEDayTimeAudible = UserDefaultsValue(key: "alertSAGEDayTimeAudible", default: true) static let alertSAGENightTimeAudible = UserDefaultsValue(key: "alertSAGENightTimeAudible", default: true) static let alertSAGESnooze = UserDefaultsValue(key: "alertSAGESnooze", default: 2) // Hours static let alertSAGESnoozedTime = UserDefaultsValue(key: "alertSAGESnoozedTime", default: nil) static let alertSAGEIsSnoozed = UserDefaultsValue(key: "alertSAGEIsSnoozed", default: false) static let alertSAGESound = UserDefaultsValue(key: "alertSAGESound", default: "Wake_Up_Will_You") static let alertSAGEAutosnooze = UserDefaultsValue(key: "alertSAGEAutosnooze", default: "At night") static let alertSAGEAutosnoozeDay = UserDefaultsValue(key: "alertSAGEAutosnoozeDay", default: false) static let alertSAGEAutosnoozeNight = UserDefaultsValue(key: "alertSAGEAutosnoozeNight", default: true) static let alertCAGEActive = UserDefaultsValue(key: "alertCAGEActive", default: false) static let alertCAGE = UserDefaultsValue(key: "alertCAGE", default: 4) // Hours static let alertCAGEQuiet = UserDefaultsValue(key: "alertCAGEQuiet", default: false) static let alertCAGERepeat = UserDefaultsValue(key: "alertCAGERepeat", default: "Never") static let alertCAGEDayTime = UserDefaultsValue(key: "alertCAGEDayTime", default: false) static let alertCAGENightTime = UserDefaultsValue(key: "alertCAGENightTime", default: false) static let alertCAGEAudible = UserDefaultsValue(key: "alertCAGEAudible", default: "Always") static let alertCAGEDayTimeAudible = UserDefaultsValue(key: "alertCAGEDayTimeAudible", default: true) static let alertCAGENightTimeAudible = UserDefaultsValue(key: "alertCAGENightTimeAudible", default: true) static let alertCAGESnooze = UserDefaultsValue(key: "alertCAGESnooze", default: 2) // Hours static let alertCAGESnoozedTime = UserDefaultsValue(key: "alertCAGESnoozedTime", default: nil) static let alertCAGEIsSnoozed = UserDefaultsValue(key: "alertCAGEIsSnoozed", default: false) static let alertCAGESound = UserDefaultsValue(key: "alertCAGESound", default: "Wake_Up_Will_You") static let alertCAGEAutosnooze = UserDefaultsValue(key: "alertCAGEAutosnooze", default: "At night") static let alertCAGEAutosnoozeDay = UserDefaultsValue(key: "alertCAGEAutosnoozeDay", default: false) static let alertCAGEAutosnoozeNight = UserDefaultsValue(key: "alertCAGEAutosnoozeNight", default: true) static let alertAppInactive = UserDefaultsValue(key: "alertAppInactive", default: false) static let alertTemporaryActive = UserDefaultsValue(key: "alertTemporaryActive", default: false) static let alertTemporaryBelow = UserDefaultsValue(key: "alertTemporaryBelow", default: true) static let alertTemporaryBG = UserDefaultsValue(key: "alertTemporaryBG", default: 90.0) static let alertTemporaryBGRepeat = UserDefaultsValue(key: "alertTemporaryBGRepeat", default: false) static let alertTemporaryBGAudible = UserDefaultsValue(key: "alertTemporaryBGRepeatAudible", default: true) static let alertTemporarySound = UserDefaultsValue(key: "alertTemporarySound", default: "Indeed") static let alertOverrideStart = UserDefaultsValue(key: "alertOverrideStart", default: false) static let alertOverrideStartQuiet = UserDefaultsValue(key: "alertOverrideStartQuiet", default: false) static let alertOverrideStartRepeat = UserDefaultsValue(key: "alertOverrideStartRepeat", default: "Never") static let alertOverrideStartDayTime = UserDefaultsValue(key: "alertOverrideStartDayTime", default: false) static let alertOverrideStartNightTime = UserDefaultsValue(key: "alertOverrideStartNightTime", default: false) static let alertOverrideStartAudible = UserDefaultsValue(key: "alertOverrideStartRepeatAudible", default: "Always") static let alertOverrideStartDayTimeAudible = UserDefaultsValue(key: "alertOverrideStartDayTimeAudible", default: true) static let alertOverrideStartNightTimeAudible = UserDefaultsValue(key: "alertOverrideStartNightTimeAudible", default: true) static let alertOverrideStartSound = UserDefaultsValue(key: "alertOverrideStartSound", default: "Ending_Reached") static let alertOverrideStartSnoozedTime = UserDefaultsValue(key: "alertOverrideStartSnoozedTime", default: nil) static let alertOverrideStartIsSnoozed = UserDefaultsValue(key: "alertOverrideStartIsSnoozed", default: false) static let alertOverrideStartAutosnooze = UserDefaultsValue(key: "alertOverrideStartAutosnooze", default: "Never") static let alertOverrideStartAutosnoozeDay = UserDefaultsValue(key: "alertOverrideStartAutosnoozeDay", default: false) static let alertOverrideStartAutosnoozeNight = UserDefaultsValue(key: "alertOverrideStartAutosnoozeNight", default: false) static let alertOverrideEnd = UserDefaultsValue(key: "alertOverrideEnd", default: false) static let alertOverrideEndQuiet = UserDefaultsValue(key: "alertOverrideEndQuiet", default: false) static let alertOverrideEndRepeat = UserDefaultsValue(key: "alertOverrideEndRepeat", default: "Never") static let alertOverrideEndDayTime = UserDefaultsValue(key: "alertOverrideEndDayTime", default: false) static let alertOverrideEndNightTime = UserDefaultsValue(key: "alertOverrideEndNightTime", default: false) static let alertOverrideEndAudible = UserDefaultsValue(key: "alertOverrideEndRepeatAudible", default: "Always") static let alertOverrideEndDayTimeAudible = UserDefaultsValue(key: "alertOverrideEndDayTimeAudible", default: true) static let alertOverrideEndNightTimeAudible = UserDefaultsValue(key: "alertOverrideEndNightTimeAudible", default: true) static let alertOverrideEndSound = UserDefaultsValue(key: "alertOverrideEndSound", default: "Alert_Tone_Busy") static let alertOverrideEndSnoozedTime = UserDefaultsValue(key: "alertOverrideEndSnoozedTime", default: nil) static let alertOverrideEndIsSnoozed = UserDefaultsValue(key: "alertOverrideEndIsSnoozed", default: false) static let alertOverrideEndAutosnooze = UserDefaultsValue(key: "alertOverrideEndAutosnooze", default: "Never") static let alertOverrideEndAutosnoozeDay = UserDefaultsValue(key: "alertOverrideEndAutosnoozeDay", default: false) static let alertOverrideEndAutosnoozeNight = UserDefaultsValue(key: "alertOverrideEndAutosnoozeNight", default: false) static let alertTempTargetStart = UserDefaultsValue(key: "alertTempTargetStart", default: false) static let alertTempTargetStartQuiet = UserDefaultsValue(key: "alertTempTargetStartQuiet", default: false) static let alertTempTargetStartRepeat = UserDefaultsValue(key: "alertTempTargetStartRepeat", default: "Never") static let alertTempTargetStartDayTime = UserDefaultsValue(key: "alertTempTargetStartDayTime", default: false) static let alertTempTargetStartNightTime = UserDefaultsValue(key: "alertTempTargetStartNightTime", default: false) static let alertTempTargetStartAudible = UserDefaultsValue(key: "alertTempTargetStartRepeatAudible", default: "Always") static let alertTempTargetStartDayTimeAudible = UserDefaultsValue(key: "alertTempTargetStartDayTimeAudible", default: true) static let alertTempTargetStartNightTimeAudible = UserDefaultsValue(key: "alertTempTargetStartNightTimeAudible", default: true) static let alertTempTargetStartSound = UserDefaultsValue(key: "alertTempTargetStartSound", default: "Ending_Reached") static let alertTempTargetStartSnoozedTime = UserDefaultsValue(key: "alertTempTargetStartSnoozedTime", default: nil) static let alertTempTargetStartIsSnoozed = UserDefaultsValue(key: "alertTempTargetStartIsSnoozed", default: false) static let alertTempTargetStartAutosnooze = UserDefaultsValue(key: "alertTempTargetStartAutosnooze", default: "Never") static let alertTempTargetStartAutosnoozeDay = UserDefaultsValue(key: "alertTempTargetStartAutosnoozeDay", default: false) static let alertTempTargetStartAutosnoozeNight = UserDefaultsValue(key: "alertTempTargetStartAutosnoozeNight", default: false) static let alertTempTargetEnd = UserDefaultsValue(key: "alertTempTargetEnd", default: false) static let alertTempTargetEndQuiet = UserDefaultsValue(key: "alertTempTargetEndQuiet", default: false) static let alertTempTargetEndRepeat = UserDefaultsValue(key: "alertTempTargetEndRepeat", default: "Never") static let alertTempTargetEndDayTime = UserDefaultsValue(key: "alertTempTargetEndDayTime", default: false) static let alertTempTargetEndNightTime = UserDefaultsValue(key: "alertTempTargetEndNightTime", default: false) static let alertTempTargetEndAudible = UserDefaultsValue(key: "alertTempTargetEndRepeatAudible", default: "Always") static let alertTempTargetEndDayTimeAudible = UserDefaultsValue(key: "alertTempTargetEndDayTimeAudible", default: true) static let alertTempTargetEndNightTimeAudible = UserDefaultsValue(key: "alertTempTargetEndNightTimeAudible", default: true) static let alertTempTargetEndSound = UserDefaultsValue(key: "alertTempTargetEndSound", default: "Alert_Tone_Busy") static let alertTempTargetEndSnoozedTime = UserDefaultsValue(key: "alertTempTargetEndSnoozedTime", default: nil) static let alertTempTargetEndIsSnoozed = UserDefaultsValue(key: "alertTempTargetEndIsSnoozed", default: false) static let alertTempTargetEndAutosnooze = UserDefaultsValue(key: "alertTempTargetEndAutosnooze", default: "Never") static let alertTempTargetEndAutosnoozeDay = UserDefaultsValue(key: "alertTempTargetEndAutosnoozeDay", default: false) static let alertTempTargetEndAutosnoozeNight = UserDefaultsValue(key: "alertTempTargetEndAutosnoozeNight", default: false) static let alertPump = UserDefaultsValue(key: "alertPump", default: false) static let alertPumpAt = UserDefaultsValue(key: "alertPumpAt", default: 10) // Units static let alertPumpQuiet = UserDefaultsValue(key: "alertPumpQuiet", default: false) static let alertPumpRepeat = UserDefaultsValue(key: "alertPumpRepeat", default: "Never") static let alertPumpDayTime = UserDefaultsValue(key: "alertPumpDayTime", default: false) static let alertPumpNightTime = UserDefaultsValue(key: "alertPumpNightTime", default: false) static let alertPumpAudible = UserDefaultsValue(key: "alertPumpAudible", default: "Always") static let alertPumpDayTimeAudible = UserDefaultsValue(key: "alertPumpDayTimeAudible", default: true) static let alertPumpNightTimeAudible = UserDefaultsValue(key: "alertPumpNightTimeAudible", default: true) static let alertPumpSound = UserDefaultsValue(key: "alertPumpSound", default: "Marimba_Descend") static let alertPumpSnoozeHours = UserDefaultsValue(key: "alertPumpSnoozeHours", default: 5) // Hours static let alertPumpIsSnoozed = UserDefaultsValue(key: "alertPumpIsSnoozed", default: false) static let alertPumpSnoozedTime = UserDefaultsValue(key: "alertPumpSnoozedTime", default: nil) static let alertPumpAutosnooze = UserDefaultsValue(key: "alertPumpAutosnooze", default: "Never") static let alertPumpAutosnoozeDay = UserDefaultsValue(key: "alertPumpAutosnoozeDay", default: false) static let alertPumpAutosnoozeNight = UserDefaultsValue(key: "alertPumpAutosnoozeNight", default: false) static let alertIOB = UserDefaultsValue(key: "alertIOB", default: false) static let alertIOBAt = UserDefaultsValue(key: "alertIOBAt", default: 1.5) // Units static let alertIOBNumber = UserDefaultsValue(key: "alertIOBNumber", default: 3) // Number static let alertIOBBolusesWithin = UserDefaultsValue(key: "alertIOBBolusesWithin", default: 60) // Minutes static let alertIOBMaxBoluses = UserDefaultsValue(key: "alertIOBMaxBoluses", default: 10) // Units static let alertIOBQuiet = UserDefaultsValue(key: "alertIOBQuiet", default: false) static let alertIOBRepeat = UserDefaultsValue(key: "alertIOBRepeat", default: "Always") static let alertIOBDayTime = UserDefaultsValue(key: "alertIOBDayTime", default: true) static let alertIOBNightTime = UserDefaultsValue(key: "alertIOBNightTime", default: true) static let alertIOBAudible = UserDefaultsValue(key: "alertIOBAudible", default: "Always") static let alertIOBDayTimeAudible = UserDefaultsValue(key: "alertIOBDayTimeAudible", default: true) static let alertIOBNightTimeAudible = UserDefaultsValue(key: "alertIOBNightTimeAudible", default: true) static let alertIOBSound = UserDefaultsValue(key: "alertIOBSound", default: "Alert_Tone_Ringtone_1") static let alertIOBSnoozeHours = UserDefaultsValue(key: "alertIOBSnoozeHours", default: 1) // Hours static let alertIOBIsSnoozed = UserDefaultsValue(key: "alertIOBIsSnoozed", default: false) static let alertIOBSnoozedTime = UserDefaultsValue(key: "alertIOBSnoozedTime", default: nil) static let alertIOBAutosnooze = UserDefaultsValue(key: "alertIOBAutosnooze", default: "Never") static let alertIOBAutosnoozeDay = UserDefaultsValue(key: "alertIOBAutosnoozeDay", default: false) static let alertIOBAutosnoozeNight = UserDefaultsValue(key: "alertIOBAutosnoozeNight", default: false) static let alertCOB = UserDefaultsValue(key: "alertCOB", default: false) static let alertCOBAt = UserDefaultsValue(key: "alertCOBAt", default: 50) // Units static let alertCOBQuiet = UserDefaultsValue(key: "alertCOBQuiet", default: false) static let alertCOBRepeat = UserDefaultsValue(key: "alertCOBRepeat", default: "Always") static let alertCOBDayTime = UserDefaultsValue(key: "alertCOBDayTime", default: true) static let alertCOBNightTime = UserDefaultsValue(key: "alertCOBNightTime", default: true) static let alertCOBAudible = UserDefaultsValue(key: "alertCOBAudible", default: "Always") static let alertCOBDayTimeAudible = UserDefaultsValue(key: "alertCOBDayTimeAudible", default: true) static let alertCOBNightTimeAudible = UserDefaultsValue(key: "alertCOBNightTimeAudible", default: true) static let alertCOBSound = UserDefaultsValue(key: "alertCOBSound", default: "Alert_Tone_Ringtone_2") static let alertCOBSnoozeHours = UserDefaultsValue(key: "alertCOBSnoozeHours", default: 1) // Hours static let alertCOBIsSnoozed = UserDefaultsValue(key: "alertCOBIsSnoozed", default: false) static let alertCOBSnoozedTime = UserDefaultsValue(key: "alertCOBSnoozedTime", default: nil) static let alertCOBAutosnooze = UserDefaultsValue(key: "alertCOBAutosnooze", default: "Never") static let alertCOBAutosnoozeDay = UserDefaultsValue(key: "alertCOBAutosnoozeDay", default: false) static let alertCOBAutosnoozeNight = UserDefaultsValue(key: "alertCOBAutosnoozeNight", default: false) static let alertBatteryActive = UserDefaultsValue(key: "alertBatteryActive", default: false) static let alertBatteryLevel = UserDefaultsValue(key: "alertBatteryLevel", default: 25) static let alertBatterySound = UserDefaultsValue(key: "alertBatterySound", default: "Machine_Charge") static let alertBatteryRepeat = UserDefaultsValue(key: "alertBatteryRepeat", default: true) static let alertBatteryIsSnoozed = UserDefaultsValue(key: "alertBatteryIsSnoozed", default: false) static let alertBatterySnoozedTime = UserDefaultsValue(key: "alertBatterySnoozedTime", default: nil) static let alertBatterySnoozeHours = UserDefaultsValue(key: "alertBatterySnoozeHours", default: 1) static var deviceBatteryLevel: UserDefaultsValue = UserDefaultsValue(key: "deviceBatteryLevel", default: 100.0) static let alertBatteryDropActive = UserDefaultsValue(key: "alertBatteryDropActive", default: false) static let alertBatteryDropPercentage = UserDefaultsValue(key: "alertBatteryDropPercentage", default: 5) static let alertBatteryDropPeriod = UserDefaultsValue(key: "alertBatteryDropPeriod", default: 15) static let alertBatteryDropSound = UserDefaultsValue(key: "alertBatteryDropSound", default: "Machine_Charge") static let alertBatteryDropRepeat = UserDefaultsValue(key: "alertBatteryDropRepeat", default: true) static let alertBatteryDropIsSnoozed = UserDefaultsValue(key: "alertBatteryDropIsSnoozed", default: false) static let alertBatteryDropSnoozedTime = UserDefaultsValue(key: "alertBatteryDropSnoozedTime", default: nil) static let alertBatteryDropSnoozeHours = UserDefaultsValue(key: "alertBatteryDropSnoozeHours", default: 1) static let alertRecBolusActive = UserDefaultsValue(key: "alertRecBolusActive", default: false) static let alertRecBolusLevel = UserDefaultsValue(key: "alertRecBolusLevel", default: 1) // Unit[s] static let alertRecBolusSound = UserDefaultsValue(key: "alertRecBolusSound", default: "Dhol_Shuffleloop") static let alertRecBolusRepeat = UserDefaultsValue(key: "alertRecBolusRepeat", default: false) static let alertRecBolusIsSnoozed = UserDefaultsValue(key: "alertRecBolusIsSnoozed", default: false) static let alertRecBolusSnooze = UserDefaultsValue(key: "alertRecBolusSnooze", default: 5) static let alertRecBolusSnoozedTime = UserDefaultsValue(key: "alertRecBolusSnoozedTime", default: nil) static var deviceRecBolus: UserDefaultsValue = UserDefaultsValue(key: "deviceRecBolus", default: 0.0) // What version is the cache valid for static let cachedForVersion = UserDefaultsValue(key: "cachedForVersion", default: nil) // Caching of latest version static let latestVersion = UserDefaultsValue(key: "latestVersion", default: nil) static let latestVersionChecked = UserDefaultsValue(key: "latestVersionChecked", default: nil) // Caching of blacklisted version static let currentVersionBlackListed = UserDefaultsValue(key: "currentVersionBlackListed", default: false) // Tracking notifications to manage frequency static let lastBlacklistNotificationShown = UserDefaultsValue(key: "lastBlacklistNotificationShown", default: nil) static let lastVersionUpdateNotificationShown = UserDefaultsValue(key: "lastVersionUpdateNotificationShown", default: nil) // Tracking the last time the expiration notification was shown static let lastExpirationNotificationShown = UserDefaultsValue(key: "lastExpirationNotificationShown", default: nil) }