UserDefaults.swift 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556
  1. //
  2. // UserDefaults.swift
  3. // LoopFollow
  4. //
  5. // Created by Jon Fawcett on 6/4/20.
  6. // Copyright © 2020 Jon Fawcett. All rights reserved.
  7. //
  8. //
  9. //
  10. //
  11. //
  12. import Foundation
  13. import UIKit
  14. import HealthKit
  15. /*
  16. Legacy storage, we are moving away from this
  17. */
  18. class UserDefaultsRepository {
  19. static let infoSort = UserDefaultsValue<[Int]>(key: "infoSort", default: InfoType.allCases.map { $0.sortOrder })
  20. static let infoVisible = UserDefaultsValue<[Bool]>(key: "infoVisible", default: InfoType.allCases.map { $0.defaultVisible })
  21. static func synchronizeInfoTypes() {
  22. var sortArray = infoSort.value
  23. var visibleArray = infoVisible.value
  24. // Current valid indices based on InfoType
  25. let currentValidIndices = InfoType.allCases.map { $0.rawValue }
  26. // Add missing indices to sortArray
  27. for index in currentValidIndices {
  28. if !sortArray.contains(index) {
  29. sortArray.append(index)
  30. //print("Added missing index \(index) to sortArray")
  31. }
  32. }
  33. // Remove deprecated indices
  34. sortArray = sortArray.filter { currentValidIndices.contains($0) }
  35. // Ensure visibleArray is updated with new entries
  36. if visibleArray.count < currentValidIndices.count {
  37. for i in visibleArray.count..<currentValidIndices.count {
  38. visibleArray.append(InfoType(rawValue: i)?.defaultVisible ?? false)
  39. //print("Added default visibility for new index \(i)")
  40. }
  41. }
  42. // Trim excess elements if there are more than needed
  43. if visibleArray.count > currentValidIndices.count {
  44. visibleArray = Array(visibleArray.prefix(currentValidIndices.count))
  45. //print("Trimmed visibleArray to match current valid indices")
  46. }
  47. infoSort.value = sortArray
  48. infoVisible.value = visibleArray
  49. }
  50. static let hideInfoTable = UserDefaultsValue<Bool>(key: "hideInfoTable", default: false)
  51. // Nightscout Settings
  52. static let token = UserDefaultsValue<String>(key: "token", default: "")
  53. static let units = UserDefaultsValue<String>(key: "units", default: "mg/dL")
  54. static func getPreferredUnit() -> HKUnit {
  55. let unitString = units.value
  56. switch unitString {
  57. case "mmol/L":
  58. return .millimolesPerLiter
  59. default:
  60. return .milligramsPerDeciliter
  61. }
  62. }
  63. static func setPreferredUnit(_ unit: HKUnit) {
  64. var unitString = "mg/dL"
  65. if unit == .millimolesPerLiter {
  66. unitString = "mmol/L"
  67. }
  68. units.value = unitString
  69. }
  70. // Dexcom Share Settings
  71. static let shareUserName = UserDefaultsValue<String>(key: "shareUserName", default: "")
  72. static let sharePassword = UserDefaultsValue<String>(key: "sharePassword", default: "")
  73. static let shareServer = UserDefaultsValue<String>(key: "shareServer", default: "US")
  74. // Graph Settings
  75. static let chartScaleX = UserDefaultsValue<Float>(key: "chartScaleX", default: 18.0)
  76. static let showDots = UserDefaultsValue<Bool>(key: "showDots", default: true)
  77. static let smallGraphTreatments = UserDefaultsValue<Bool>(key: "smallGraphTreatments", default: true)
  78. static let showValues = UserDefaultsValue<Bool>(key: "showValues", default: true)
  79. static let showAbsorption = UserDefaultsValue<Bool>(key: "showAbsorption", default: true)
  80. static let showLines = UserDefaultsValue<Bool>(key: "showLines", default: true)
  81. static let hoursToLoad = UserDefaultsValue<Int>(key: "hoursToLoad", default: 24)
  82. static let predictionToLoad = UserDefaultsValue<Double>(key: "predictionToLoad", default: 1)
  83. static let minBasalScale = UserDefaultsValue<Double>(key: "minBasalScale", default: 5.0)
  84. static let minBGScale = UserDefaultsValue<Float>(key: "minBGScale", default: 250.0)
  85. static let showDIALines = UserDefaultsValue<Bool>(key: "showDIAMarkers", default: true)
  86. static let show30MinLine = UserDefaultsValue<Bool>(key: "show30MinLine", default: false)
  87. static let show90MinLine = UserDefaultsValue<Bool>(key: "show90MinLine", default: false)
  88. static let showMidnightLines = UserDefaultsValue<Bool>(key: "showMidnightMarkers", default: false)
  89. static let lowLine = UserDefaultsValue<Float>(key: "lowLine", default: 70.0)
  90. static let highLine = UserDefaultsValue<Float>(key: "highLine", default: 180.0)
  91. static let smallGraphHeight = UserDefaultsValue<Int>(key: "smallGraphHeight", default: 40)
  92. // General Settings
  93. static let colorBGText = UserDefaultsValue<Bool>(key: "colorBGText", default: true)
  94. static let showStats = UserDefaultsValue<Bool>(key: "showStats", default: true)
  95. static let useIFCC = UserDefaultsValue<Bool>(key: "useIFCC", default: false)
  96. static let showSmallGraph = UserDefaultsValue<Bool>(key: "showSmallGraph", default: true)
  97. static let speakBG = UserDefaultsValue<Bool>(key: "speakBG", default: false)
  98. static let speakBGAlways = UserDefaultsValue<Bool>(key: "speakBGAlways", default: true)
  99. static let speakLowBG = UserDefaultsValue<Bool>(key: "speakLowBG", default: false)
  100. static let speakProactiveLowBG = UserDefaultsValue<Bool>(key: "speakProactiveLowBG", default: false)
  101. static let speakFastDropDelta = UserDefaultsValue<Float>(key: "speakFastDropDelta", default: 10.0)
  102. static let speakLowBGLimit = UserDefaultsValue<Float>(key: "speakLowBGLimit", default: 72.0)
  103. static let speakHighBGLimit = UserDefaultsValue<Float>(key: "speakHighBGLimit", default: 180.0)
  104. static let speakHighBG = UserDefaultsValue<Bool>(key: "speakHighBG", default: false)
  105. static let speakLanguage = UserDefaultsValue<String>(key: "speakLanguage", default: "en")
  106. static let showDisplayName = UserDefaultsValue<Bool>(key: "showDisplayName", default: false)
  107. // Deprecated, used to detect if backgroundRefresh was set to off. TODO: Remove in the beginning of 2026
  108. static let backgroundRefresh = UserDefaultsValue<Bool>(key: "backgroundRefresh", default: true)
  109. static let appBadge = UserDefaultsValue<Bool>(key: "appBadge", default: true)
  110. static let dimScreenWhenIdle = UserDefaultsValue<Int>(key: "dimScreenWhenIdle", default: 0)
  111. static let forceDarkMode = UserDefaultsValue<Bool>(key: "forceDarkMode", default: true)
  112. static let persistentNotification = UserDefaultsValue<Bool>(key: "persistentNotification", default: false)
  113. static let persistentNotificationLastBGTime = UserDefaultsValue<TimeInterval>(key: "persistentNotificationLastBGTime", default: 0)
  114. static let screenlockSwitchState = UserDefaultsValue<Bool>(
  115. key: "screenlockSwitchState",
  116. default: UIApplication.shared.isIdleTimerDisabled,
  117. onChange: { screenlock in
  118. UIApplication.shared.isIdleTimerDisabled = screenlock
  119. })
  120. // Advanced Settings
  121. //static let onlyDownloadBG = UserDefaultsValue<Bool>(key: "onlyDownloadBG", default: false)
  122. static let downloadTreatments = UserDefaultsValue<Bool>(key: "downloadTreatments", default: true)
  123. static let downloadPrediction = UserDefaultsValue<Bool>(key: "downloadPrediction", default: true)
  124. static let graphOtherTreatments = UserDefaultsValue<Bool>(key: "graphOtherTreatments", default: true)
  125. static let graphBasal = UserDefaultsValue<Bool>(key: "graphBasal", default: true)
  126. static let graphBolus = UserDefaultsValue<Bool>(key: "graphBolus", default: true)
  127. static let graphCarbs = UserDefaultsValue<Bool>(key: "graphCarbs", default: true)
  128. static let bgUpdateDelay = UserDefaultsValue<Int>(key: "bgUpdateDelay", default: 10)
  129. static let downloadDays = UserDefaultsValue<Int>(key: "downloadDays", default: 1)
  130. // Watch Calendar Settings
  131. static let calendarIdentifier = UserDefaultsValue<String>(key: "calendarIdentifier", default: "")
  132. static let savedEventID = UserDefaultsValue<String>(key: "savedEventID", default: "")
  133. static let lastCalendarStartDate = UserDefaultsValue<Date?>(key: "lastCalendarStartDate", default: nil)
  134. static let writeCalendarEvent = UserDefaultsValue<Bool>(key: "writeCalendarEvent", default: false)
  135. static let watchLine1 = UserDefaultsValue<String>(key: "watchLine1", default: "%BG% %DIRECTION% %DELTA% %MINAGO%")
  136. static let watchLine2 = UserDefaultsValue<String>(key: "watchLine2", default: "C:%COB% I:%IOB% B:%BASAL%")
  137. // Alarm Settings
  138. static let systemOutputVolume = UserDefaultsValue<Float>(key: "systemOutputVolume", default: 0.5)
  139. static let fadeInTimeInterval = UserDefaultsValue<TimeInterval>(key: "fadeInTimeInterval", default: 0)
  140. static let vibrate = UserDefaultsValue<Bool>(key: "vibrate", default: true)
  141. static let overrideSystemOutputVolume = UserDefaultsValue<Bool>(key: "overrideSystemOutputVolume", default: true)
  142. static let forcedOutputVolume = UserDefaultsValue<Float>(key: "forcedOutputVolume", default: 0.5)
  143. // Alerts
  144. let components = DateComponents(hour: 20, minute: 0)
  145. static let quietHourStart = UserDefaultsValue<Date?>(key: "quietHourStart", default: nil) //eventually need to adjust this to night time instead of quiet hour to clean up
  146. static let quietHourEnd = UserDefaultsValue<Date?>(key: "quietHourEnd", default: nil) //eventually need to adjust this to night time instead of quiet hour to clean up
  147. static let nightTime = UserDefaultsValue<Bool>(key: "nightTime", default: false)
  148. static let snoozedBGReadingTime = UserDefaultsValue<TimeInterval?>(key: "snoozedBGReadingTime", default: 0)
  149. static let alertIgnoreZero = UserDefaultsValue<Bool>(key: "alertIgnoreZero", default: true)
  150. static let alertAudioDuringPhone = UserDefaultsValue<Bool>(key: "alertAudioDuringPhone", default: true)
  151. static let alertAutoSnoozeCGMStart = UserDefaultsValue<Bool>(key: "alertAutoSnoozeCGMStart", default: false)
  152. static let alertCageInsertTime = UserDefaultsValue<TimeInterval>(key: "alertCageInsertTime", default: 0)
  153. static let alertSageInsertTime = UserDefaultsValue<TimeInterval>(key: "alertSageInsertTime", default: 0)
  154. static let alertSnoozeAllTime = UserDefaultsValue<Date?>(key: "alertSnoozeAllTime", default: nil)
  155. static let alertSnoozeAllIsSnoozed = UserDefaultsValue<Bool>(key: "alertSnoozeAllIsSnoozed", default: false)
  156. static let alertMuteAllTime = UserDefaultsValue<Date?>(key: "alertMuteAllTime", default: nil)
  157. static let alertMuteAllIsMuted = UserDefaultsValue<Bool>(key: "alertMuteAllIsMuted", default: false)
  158. static let alertUrgentLowActive = UserDefaultsValue<Bool>(key: "alertUrgentLowActive", default: false)
  159. static let alertUrgentLowBG = UserDefaultsValue<Float>(key: "alertUrgentLowBG", default: 55.0)
  160. static let alertUrgentLowPredictiveMinutes = UserDefaultsValue<Int>(key: "alertUrgentLowPredictiveMinutes", default: 0)
  161. static let alertUrgentLowSnooze = UserDefaultsValue<Int>(key: "alertUrgentLowSnooze", default: 5)
  162. static let alertUrgentLowSnoozedTime = UserDefaultsValue<Date?>(key: "alertUrgentLowSnoozedTime", default: nil)
  163. static let alertUrgentLowIsSnoozed = UserDefaultsValue<Bool>(key: "alertUrgentLowIsSnoozed", default: false)
  164. static let alertUrgentLowRepeat = UserDefaultsValue<String>(key: "alertUrgentLowRepeat", default: "Always")
  165. static let alertUrgentLowDayTime = UserDefaultsValue<Bool>(key: "alertUrgentLowDayTime", default: true) // need to change all DayTime to DayTimeRepeat
  166. static let alertUrgentLowNightTime = UserDefaultsValue<Bool>(key: "alertUrgentLowNightTime", default: true) // need to change all NightTime to NightTimeRepeat
  167. static let alertUrgentLowSound = UserDefaultsValue<String>(key: "alertUrgentLowSound", default: "Emergency_Alarm_Siren")
  168. static let alertUrgentLowAudible = UserDefaultsValue<String>(key: "alertUrgentLowAudible", default: "Always")
  169. static let alertUrgentLowDayTimeAudible = UserDefaultsValue<Bool>(key: "alertUrgentLowDayTimeAudible", default: true)
  170. static let alertUrgentLowNightTimeAudible = UserDefaultsValue<Bool>(key: "alertUrgentLowNightTimeAudible", default: true)
  171. static let alertUrgentLowAutosnooze = UserDefaultsValue<String>(key: "alertUrgentLowAutosnooze", default: "Never")
  172. static let alertUrgentLowAutosnoozeDay = UserDefaultsValue<Bool>(key: "alertUrgentLowAutosnoozeDay", default: false)
  173. static let alertUrgentLowAutosnoozeNight = UserDefaultsValue<Bool>(key: "alertUrgentLowAutosnoozeNight", default: false)
  174. static let alertLowActive = UserDefaultsValue<Bool>(key: "alertLowActive", default: false)
  175. static let alertLowBG = UserDefaultsValue<Float>(key: "alertLowBG", default: 70.0)
  176. static let alertLowPersistent = UserDefaultsValue<Int>(key: "alertLowPersistent", default: 0)
  177. static let alertLowPersistenceMax = UserDefaultsValue<Float>(key: "alertLowPersistenceMax", default: 5.0)
  178. static let alertLowSnooze = UserDefaultsValue<Int>(key: "alertLowSnooze", default: 5)
  179. static let alertLowSnoozedTime = UserDefaultsValue<Date?>(key: "alertLowSnoozedTime", default: nil)
  180. static let alertLowIsSnoozed = UserDefaultsValue<Bool>(key: "alertLowIsSnoozed", default: false)
  181. static let alertLowRepeat = UserDefaultsValue<String>(key: "alertLowRepeat", default: "Always")
  182. static let alertLowDayTime = UserDefaultsValue<Bool>(key: "alertLowDayTime", default: true)
  183. static let alertLowNightTime = UserDefaultsValue<Bool>(key: "alertLowNightTime", default: true)
  184. static let alertLowSound = UserDefaultsValue<String>(key: "alertLowSound", default: "Indeed")
  185. static let alertLowAudible = UserDefaultsValue<String>(key: "alertLowAudible", default: "Always")
  186. static let alertLowDayTimeAudible = UserDefaultsValue<Bool>(key: "alertLowDayTimeAudible", default: true)
  187. static let alertLowNightTimeAudible = UserDefaultsValue<Bool>(key: "alertLowNightTimeAudible", default: true)
  188. static let alertLowAutosnooze = UserDefaultsValue<String>(key: "alertLowAutosnooze", default: "Never")
  189. static let alertLowAutosnoozeDay = UserDefaultsValue<Bool>(key: "alertLowAutosnoozeDay", default: false)
  190. static let alertLowAutosnoozeNight = UserDefaultsValue<Bool>(key: "alertLowAutosnoozeNight", default: false)
  191. static let alertHighActive = UserDefaultsValue<Bool>(key: "alertHighActive", default: false)
  192. static let alertHighBG = UserDefaultsValue<Float>(key: "alertHighBG", default: 180.0)
  193. static let alertHighPersistent = UserDefaultsValue<Int>(key: "alertHighPersistent", default: 60)
  194. static let alertHighSnooze = UserDefaultsValue<Int>(key: "alertHighSnooze", default: 60)
  195. static let alertHighSnoozedTime = UserDefaultsValue<Date?>(key: "alertHighSnoozedTime", default: nil)
  196. static let alertHighIsSnoozed = UserDefaultsValue<Bool>(key: "alertHighIsSnoozed", default: false)
  197. static let alertHighRepeat = UserDefaultsValue<String>(key: "alertHighRepeat", default: "Always")
  198. static let alertHighDayTime = UserDefaultsValue<Bool>(key: "alertHighDayTime", default: true)
  199. static let alertHighNightTime = UserDefaultsValue<Bool>(key: "alertHighNightTime", default: true)
  200. static let alertHighSound = UserDefaultsValue<String>(key: "alertHighSound", default: "Time_Has_Come")
  201. static let alertHighAudible = UserDefaultsValue<String>(key: "alertHighAudible", default: "Always")
  202. static let alertHighDayTimeAudible = UserDefaultsValue<Bool>(key: "alertHighDayTimeAudible", default: true)
  203. static let alertHighNightTimeAudible = UserDefaultsValue<Bool>(key: "alertHighNightTimeAudible", default: true)
  204. static let alertHighAutosnooze = UserDefaultsValue<String>(key: "alertHighAutosnooze", default: "Never")
  205. static let alertHighAutosnoozeDay = UserDefaultsValue<Bool>(key: "alertHighAutosnoozeDay", default: false)
  206. static let alertHighAutosnoozeNight = UserDefaultsValue<Bool>(key: "alertHighAutosnoozeNight", default: false)
  207. static let alertUrgentHighActive = UserDefaultsValue<Bool>(key: "alertUrgentHighActive", default: false)
  208. static let alertUrgentHighBG = UserDefaultsValue<Float>(key: "alertUrgentHighBG", default: 250.0)
  209. static let alertUrgentHighSnooze = UserDefaultsValue<Int>(key: "alertUrgentHighSnooze", default: 30)
  210. static let alertUrgentHighSnoozedTime = UserDefaultsValue<Date?>(key: "alertUrgentHighSnoozedTime", default: nil)
  211. static let alertUrgentHighIsSnoozed = UserDefaultsValue<Bool>(key: "alertUrgentHighIsSnoozed", default: false)
  212. static let alertUrgentHighRepeat = UserDefaultsValue<String>(key: "alertUrgentHighRepeat", default: "Always")
  213. static let alertUrgentHighDayTime = UserDefaultsValue<Bool>(key: "alertUrgentHighDayTime", default: true)
  214. static let alertUrgentHighNightTime = UserDefaultsValue<Bool>(key: "alertUrgentHighNightTime", default: true)
  215. static let alertUrgentHighSound = UserDefaultsValue<String>(key: "alertUrgentHighSound", default: "Pager_Beeps")
  216. static let alertUrgentHighAudible = UserDefaultsValue<String>(key: "alertUrgentHighAudible", default: "Always")
  217. static let alertUrgentHighDayTimeAudible = UserDefaultsValue<Bool>(key: "alertUrgentHighDayTimeAudible", default: true)
  218. static let alertUrgentHighNightTimeAudible = UserDefaultsValue<Bool>(key: "alertUrgentHighNightTimeAudible", default: true)
  219. static let alertUrgentHighAutosnooze = UserDefaultsValue<String>(key: "alertUrgentHighAutosnooze", default: "Never")
  220. static let alertUrgentHighAutosnoozeDay = UserDefaultsValue<Bool>(key: "alertUrgentHighAutosnoozeDay", default: false)
  221. static let alertUrgentHighAutosnoozeNight = UserDefaultsValue<Bool>(key: "alertUrgentHighAutosnoozeNight", default: false)
  222. static let alertFastDropActive = UserDefaultsValue<Bool>(key: "alertFastDropDeltaActive", default: false)
  223. static let alertFastDropSnooze = UserDefaultsValue<Int>(key: "alertFastDropDeltaSnooze", default: 10)
  224. static let alertFastDropDelta = UserDefaultsValue<Float>(key: "alertFastDropDelta", default: 10.0)
  225. static let alertFastDropReadings = UserDefaultsValue<Int>(key: "alertFastDropReadings", default: 3)
  226. static let alertFastDropUseLimit = UserDefaultsValue<Bool>(key: "alertFastDropUseLimit", default: false)
  227. static let alertFastDropBelowBG = UserDefaultsValue<Float>(key: "alertFastDropBelowBG", default: 120.0)
  228. static let alertFastDropSnoozedTime = UserDefaultsValue<Date?>(key: "alertFastDropSnoozedTime", default: nil)
  229. static let alertFastDropIsSnoozed = UserDefaultsValue<Bool>(key: "alertFastDropIsSnoozed", default: false)
  230. static let alertFastDropRepeat = UserDefaultsValue<String>(key: "alertFastDropRepeat", default: "Never")
  231. static let alertFastDropDayTime = UserDefaultsValue<Bool>(key: "alertFastDropDayTime", default: false)
  232. static let alertFastDropNightTime = UserDefaultsValue<Bool>(key: "alertFastDropNightTime", default: false)
  233. static let alertFastDropSound = UserDefaultsValue<String>(key: "alertFastDropSound", default: "Big_Clock_Ticking")
  234. static let alertFastDropAudible = UserDefaultsValue<String>(key: "alertFastDropAudible", default: "Always")
  235. static let alertFastDropDayTimeAudible = UserDefaultsValue<Bool>(key: "alertFastDropDayTimeAudible", default: true)
  236. static let alertFastDropNightTimeAudible = UserDefaultsValue<Bool>(key: "alertFastDropNightTimeAudible", default: true)
  237. static let alertFastDropAutosnooze = UserDefaultsValue<String>(key: "alertFastDropAutosnooze", default: "Never")
  238. static let alertFastDropAutosnoozeDay = UserDefaultsValue<Bool>(key: "alertFastDropAutosnoozeDay", default: false)
  239. static let alertFastDropAutosnoozeNight = UserDefaultsValue<Bool>(key: "alertFastDropAutosnoozeNight", default: false)
  240. static let alertFastRiseActive = UserDefaultsValue<Bool>(key: "alertFastRiseDeltaActive", default: false)
  241. static let alertFastRiseSnooze = UserDefaultsValue<Int>(key: "alertFastRiseDeltaSnooze", default: 10)
  242. static let alertFastRiseDelta = UserDefaultsValue<Float>(key: "alertFastRiseDelta", default: 10.0)
  243. static let alertFastRiseReadings = UserDefaultsValue<Int>(key: "alertFastRiseReadings", default: 3)
  244. static let alertFastRiseUseLimit = UserDefaultsValue<Bool>(key: "alertFastRiseUseLimit", default: false)
  245. static let alertFastRiseAboveBG = UserDefaultsValue<Float>(key: "alertFastRiseAboveBG", default: 200.0)
  246. static let alertFastRiseSnoozedTime = UserDefaultsValue<Date?>(key: "alertFastRiseSnoozedTime", default: nil)
  247. static let alertFastRiseIsSnoozed = UserDefaultsValue<Bool>(key: "alertFastRiseIsSnoozed", default: false)
  248. static let alertFastRiseRepeat = UserDefaultsValue<String>(key: "alertFastRiseRepeat", default: "Never")
  249. static let alertFastRiseDayTime = UserDefaultsValue<Bool>(key: "alertFastRiseDayTime", default: false)
  250. static let alertFastRiseNightTime = UserDefaultsValue<Bool>(key: "alertFastRiseNightTime", default: false)
  251. static let alertFastRiseSound = UserDefaultsValue<String>(key: "alertFastRiseSound", default: "Cartoon_Fail_Strings_Trumpet")
  252. static let alertFastRiseAudible = UserDefaultsValue<String>(key: "alertFastRiseAudible", default: "Always")
  253. static let alertFastRiseDayTimeAudible = UserDefaultsValue<Bool>(key: "alertFastRiseDayTimeAudible", default: true)
  254. static let alertFastRiseNightTimeAudible = UserDefaultsValue<Bool>(key: "alertFastRiseNightTimeAudible", default: true)
  255. static let alertFastRiseAutosnooze = UserDefaultsValue<String>(key: "alertFastRiseAutosnooze", default: "Never")
  256. static let alertFastRiseAutosnoozeDay = UserDefaultsValue<Bool>(key: "alertFastRiseAutosnoozeDay", default: false)
  257. static let alertFastRiseAutosnoozeNight = UserDefaultsValue<Bool>(key: "alertFastRiseAutosnoozeNight", default: false)
  258. static let alertMissedReadingActive = UserDefaultsValue<Bool>(key: "alertMissedReadingActive", default: false)
  259. static let alertMissedReading = UserDefaultsValue<Int>(key: "alertMissedReading", default: 31)
  260. static let alertMissedReadingSnooze = UserDefaultsValue<Int>(key: "alertMissedReadingSnooze", default: 30)
  261. static let alertMissedReadingSnoozedTime = UserDefaultsValue<Date?>(key: "alertMissedReadingSnoozedTime", default: nil)
  262. static let alertMissedReadingIsSnoozed = UserDefaultsValue<Bool>(key: "alertMissedReadingIsSnoozed", default: false)
  263. static let alertMissedReadingRepeat = UserDefaultsValue<String>(key: "alertMissedReadingRepeat", default: "Never")
  264. static let alertMissedReadingDayTime = UserDefaultsValue<Bool>(key: "alertMissedReadingDayTime", default: false)
  265. static let alertMissedReadingNightTime = UserDefaultsValue<Bool>(key: "alertMissedReadingNightTime", default: false)
  266. static let alertMissedReadingSound = UserDefaultsValue<String>(key: "alertMissedReadingSound", default: "Cartoon_Tip_Toe_Sneaky_Walk")
  267. static let alertMissedReadingAudible = UserDefaultsValue<String>(key: "alertMissedReadingAudible", default: "Always")
  268. static let alertMissedReadingDayTimeAudible = UserDefaultsValue<Bool>(key: "alertMissedReadingDayTimeAudible", default: true)
  269. static let alertMissedReadingNightTimeAudible = UserDefaultsValue<Bool>(key: "alertMissedReadingNightTimeAudible", default: true)
  270. static let alertMissedReadingAutosnooze = UserDefaultsValue<String>(key: "alertMissedReadingAutosnooze", default: "Never")
  271. static let alertMissedReadingAutosnoozeDay = UserDefaultsValue<Bool>(key: "alertMissedReadingAutosnoozeDay", default: false)
  272. static let alertMissedReadingAutosnoozeNight = UserDefaultsValue<Bool>(key: "alertMissedReadingAutosnoozeNight", default: false)
  273. static let alertNotLoopingActive = UserDefaultsValue<Bool>(key: "alertNotLoopingActive", default: false)
  274. static let alertNotLooping = UserDefaultsValue<Int>(key: "alertNotLooping", default: 31)
  275. static let alertNotLoopingSnooze = UserDefaultsValue<Int>(key: "alertNotLoopingSnooze", default: 30)
  276. static let alertNotLoopingUseLimits = UserDefaultsValue<Bool>(key: "alertNotLoopingUseLimits", default: false)
  277. static let alertNotLoopingLowerLimit = UserDefaultsValue<Float>(key: "alertNotLoopingBelowBG", default: 100.0)
  278. static let alertNotLoopingUpperLimit = UserDefaultsValue<Float>(key: "alertNotLoopingAboveBG", default: 160.0)
  279. static let alertNotLoopingSnoozedTime = UserDefaultsValue<Date?>(key: "alertNotLoopingSnoozedTime", default: nil)
  280. static let alertNotLoopingIsSnoozed = UserDefaultsValue<Bool>(key: "alertNotLoopingIsSnoozed", default: false)
  281. static let alertNotLoopingRepeat = UserDefaultsValue<String>(key: "alertNotLoopingRepeat", default: "Never")
  282. static let alertNotLoopingDayTime = UserDefaultsValue<Bool>(key: "alertNotLoopingDayTime", default: false)
  283. static let alertNotLoopingNightTime = UserDefaultsValue<Bool>(key: "alertNotLoopingNightTime", default: false)
  284. static let alertNotLoopingSound = UserDefaultsValue<String>(key: "alertNotLoopingSound", default: "Sci-Fi_Engine_Shut_Down")
  285. static let alertLastLoopTime = UserDefaultsValue<TimeInterval>(key: "alertLastLoopTime", default: 0)
  286. static let alertNotLoopingAudible = UserDefaultsValue<String>(key: "alertNotLoopingAudible", default: "Always")
  287. static let alertNotLoopingDayTimeAudible = UserDefaultsValue<Bool>(key: "alertNotLoopingDayTimeAudible", default: true)
  288. static let alertNotLoopingNightTimeAudible = UserDefaultsValue<Bool>(key: "alertNotLoopingNightTimeAudible", default: true)
  289. static let alertNotLoopingAutosnooze = UserDefaultsValue<String>(key: "alertNotLoopingAutosnooze", default: "Never")
  290. static let alertNotLoopingAutosnoozeDay = UserDefaultsValue<Bool>(key: "alertNotLoopingAutosnoozeDay", default: false)
  291. static let alertNotLoopingAutosnoozeNight = UserDefaultsValue<Bool>(key: "alertNotLoopingAutosnoozeNight", default: false)
  292. static let alertMissedBolusActive = UserDefaultsValue<Bool>(key: "alertMissedBolusActive", default: false)
  293. static let alertMissedBolus = UserDefaultsValue<Int>(key: "alertMissedBolus", default: 10)
  294. static let alertMissedBolusSnooze = UserDefaultsValue<Int>(key: "alertMissedBolusSnooze", default: 10)
  295. static let alertMissedBolusPrebolus = UserDefaultsValue<Int>(key: "alertMissedBolusPrebolus", default: 20)
  296. static let alertMissedBolusIgnoreBolus = UserDefaultsValue<Double>(key: "alertMissedBolusIgnoreBolus", default: 0.5)
  297. static let alertMissedBolusLowGrams = UserDefaultsValue<Int>(key: "alertMissedBolusLowGrams", default: 10)
  298. static let alertMissedBolusLowGramsBG = UserDefaultsValue<Float>(key: "alertMissedBolusLowGramsBG", default: 70.0)
  299. static let alertMissedBolusSnoozedTime = UserDefaultsValue<Date?>(key: "alertMissedBolusSnoozedTime", default: nil)
  300. static let alertMissedBolusIsSnoozed = UserDefaultsValue<Bool>(key: "alertMissedBolusIsSnoozed", default: false)
  301. static let alertMissedBolusQuiet = UserDefaultsValue<Bool>(key: "alertMissedBolusQuiet", default: false)
  302. static let alertMissedBolusRepeat = UserDefaultsValue<String>(key: "alertMissedBolusRepeat", default: "Never")
  303. static let alertMissedBolusDayTime = UserDefaultsValue<Bool>(key: "alertMissedBolusDayTime", default: false)
  304. static let alertMissedBolusNightTime = UserDefaultsValue<Bool>(key: "alertMissedBolusNightTime", default: false)
  305. static let alertMissedBolusSound = UserDefaultsValue<String>(key: "alertMissedBolusSound", default: "Dhol_Shuffleloop")
  306. static let alertMissedBolusAudible = UserDefaultsValue<String>(key: "alertMissedBolusAudible", default: "Always")
  307. static let alertMissedBolusDayTimeAudible = UserDefaultsValue<Bool>(key: "alertMissedBolusDayTimeAudible", default: true)
  308. static let alertMissedBolusNightTimeAudible = UserDefaultsValue<Bool>(key: "alertMissedBolusNightTimeAudible", default: true)
  309. static let alertMissedBolusAutosnooze = UserDefaultsValue<String>(key: "alertMissedBolusAutosnooze", default: "Never")
  310. static let alertMissedBolusAutosnoozeDay = UserDefaultsValue<Bool>(key: "alertMissedBolusAutosnoozeDay", default: false)
  311. static let alertMissedBolusAutosnoozeNight = UserDefaultsValue<Bool>(key: "alertMissedBolusAutosnoozeNight", default: false)
  312. static let alertSAGEActive = UserDefaultsValue<Bool>(key: "alertSAGEActive", default: false)
  313. static let alertSAGE = UserDefaultsValue<Int>(key: "alertSAGE", default: 8) //Hours
  314. static let alertSAGEQuiet = UserDefaultsValue<Bool>(key: "alertSAGEQuiet", default: false)
  315. static let alertSAGERepeat = UserDefaultsValue<String>(key: "alertSAGERepeat", default: "Never")
  316. static let alertSAGEDayTime = UserDefaultsValue<Bool>(key: "alertSAGEDayTime", default: false)
  317. static let alertSAGENightTime = UserDefaultsValue<Bool>(key: "alertSAGENightTime", default: false)
  318. static let alertSAGEAudible = UserDefaultsValue<String>(key: "alertSAGEAudible", default: "Always")
  319. static let alertSAGEDayTimeAudible = UserDefaultsValue<Bool>(key: "alertSAGEDayTimeAudible", default: true)
  320. static let alertSAGENightTimeAudible = UserDefaultsValue<Bool>(key: "alertSAGENightTimeAudible", default: true)
  321. static let alertSAGESnooze = UserDefaultsValue<Int>(key: "alertSAGESnooze", default: 2) //Hours
  322. static let alertSAGESnoozedTime = UserDefaultsValue<Date?>(key: "alertSAGESnoozedTime", default: nil)
  323. static let alertSAGEIsSnoozed = UserDefaultsValue<Bool>(key: "alertSAGEIsSnoozed", default: false)
  324. static let alertSAGESound = UserDefaultsValue<String>(key: "alertSAGESound", default: "Wake_Up_Will_You")
  325. static let alertSAGEAutosnooze = UserDefaultsValue<String>(key: "alertSAGEAutosnooze", default: "At night")
  326. static let alertSAGEAutosnoozeDay = UserDefaultsValue<Bool>(key: "alertSAGEAutosnoozeDay", default: false)
  327. static let alertSAGEAutosnoozeNight = UserDefaultsValue<Bool>(key: "alertSAGEAutosnoozeNight", default: true)
  328. static let alertCAGEActive = UserDefaultsValue<Bool>(key: "alertCAGEActive", default: false)
  329. static let alertCAGE = UserDefaultsValue<Int>(key: "alertCAGE", default: 4) //Hours
  330. static let alertCAGEQuiet = UserDefaultsValue<Bool>(key: "alertCAGEQuiet", default: false)
  331. static let alertCAGERepeat = UserDefaultsValue<String>(key: "alertCAGERepeat", default: "Never")
  332. static let alertCAGEDayTime = UserDefaultsValue<Bool>(key: "alertCAGEDayTime", default: false)
  333. static let alertCAGENightTime = UserDefaultsValue<Bool>(key: "alertCAGENightTime", default: false)
  334. static let alertCAGEAudible = UserDefaultsValue<String>(key: "alertCAGEAudible", default: "Always")
  335. static let alertCAGEDayTimeAudible = UserDefaultsValue<Bool>(key: "alertCAGEDayTimeAudible", default: true)
  336. static let alertCAGENightTimeAudible = UserDefaultsValue<Bool>(key: "alertCAGENightTimeAudible", default: true)
  337. static let alertCAGESnooze = UserDefaultsValue<Int>(key: "alertCAGESnooze", default: 2) //Hours
  338. static let alertCAGESnoozedTime = UserDefaultsValue<Date?>(key: "alertCAGESnoozedTime", default: nil)
  339. static let alertCAGEIsSnoozed = UserDefaultsValue<Bool>(key: "alertCAGEIsSnoozed", default: false)
  340. static let alertCAGESound = UserDefaultsValue<String>(key: "alertCAGESound", default: "Wake_Up_Will_You")
  341. static let alertCAGEAutosnooze = UserDefaultsValue<String>(key: "alertCAGEAutosnooze", default: "At night")
  342. static let alertCAGEAutosnoozeDay = UserDefaultsValue<Bool>(key: "alertCAGEAutosnoozeDay", default: false)
  343. static let alertCAGEAutosnoozeNight = UserDefaultsValue<Bool>(key: "alertCAGEAutosnoozeNight", default: true)
  344. static let alertAppInactive = UserDefaultsValue<Bool>(key: "alertAppInactive", default: false)
  345. static let alertTemporaryActive = UserDefaultsValue<Bool>(key: "alertTemporaryActive", default: false)
  346. static let alertTemporaryBelow = UserDefaultsValue<Bool>(key: "alertTemporaryBelow", default: true)
  347. static let alertTemporaryBG = UserDefaultsValue<Float>(key: "alertTemporaryBG", default: 90.0)
  348. static let alertTemporaryBGRepeat = UserDefaultsValue<Bool>(key: "alertTemporaryBGRepeat", default: false)
  349. static let alertTemporaryBGAudible = UserDefaultsValue<Bool>(key: "alertTemporaryBGRepeatAudible", default: true)
  350. static let alertTemporarySound = UserDefaultsValue<String>(key: "alertTemporarySound", default: "Indeed")
  351. static let alertOverrideStart = UserDefaultsValue<Bool>(key: "alertOverrideStart", default: false)
  352. static let alertOverrideStartQuiet = UserDefaultsValue<Bool>(key: "alertOverrideStartQuiet", default: false)
  353. static let alertOverrideStartRepeat = UserDefaultsValue<String>(key: "alertOverrideStartRepeat", default: "Never")
  354. static let alertOverrideStartDayTime = UserDefaultsValue<Bool>(key: "alertOverrideStartDayTime", default: false)
  355. static let alertOverrideStartNightTime = UserDefaultsValue<Bool>(key: "alertOverrideStartNightTime", default: false)
  356. static let alertOverrideStartAudible = UserDefaultsValue<String>(key: "alertOverrideStartRepeatAudible", default: "Always")
  357. static let alertOverrideStartDayTimeAudible = UserDefaultsValue<Bool>(key: "alertOverrideStartDayTimeAudible", default: true)
  358. static let alertOverrideStartNightTimeAudible = UserDefaultsValue<Bool>(key: "alertOverrideStartNightTimeAudible", default: true)
  359. static let alertOverrideStartSound = UserDefaultsValue<String>(key: "alertOverrideStartSound", default: "Ending_Reached")
  360. static let alertOverrideStartSnoozedTime = UserDefaultsValue<Date?>(key: "alertOverrideStartSnoozedTime", default: nil)
  361. static let alertOverrideStartIsSnoozed = UserDefaultsValue<Bool>(key: "alertOverrideStartIsSnoozed", default: false)
  362. static let alertOverrideStartAutosnooze = UserDefaultsValue<String>(key: "alertOverrideStartAutosnooze", default: "Never")
  363. static let alertOverrideStartAutosnoozeDay = UserDefaultsValue<Bool>(key: "alertOverrideStartAutosnoozeDay", default: false)
  364. static let alertOverrideStartAutosnoozeNight = UserDefaultsValue<Bool>(key: "alertOverrideStartAutosnoozeNight", default: false)
  365. static let alertOverrideEnd = UserDefaultsValue<Bool>(key: "alertOverrideEnd", default: false)
  366. static let alertOverrideEndQuiet = UserDefaultsValue<Bool>(key: "alertOverrideEndQuiet", default: false)
  367. static let alertOverrideEndRepeat = UserDefaultsValue<String>(key: "alertOverrideEndRepeat", default: "Never")
  368. static let alertOverrideEndDayTime = UserDefaultsValue<Bool>(key: "alertOverrideEndDayTime", default: false)
  369. static let alertOverrideEndNightTime = UserDefaultsValue<Bool>(key: "alertOverrideEndNightTime", default: false)
  370. static let alertOverrideEndAudible = UserDefaultsValue<String>(key: "alertOverrideEndRepeatAudible", default: "Always")
  371. static let alertOverrideEndDayTimeAudible = UserDefaultsValue<Bool>(key: "alertOverrideEndDayTimeAudible", default: true)
  372. static let alertOverrideEndNightTimeAudible = UserDefaultsValue<Bool>(key: "alertOverrideEndNightTimeAudible", default: true)
  373. static let alertOverrideEndSound = UserDefaultsValue<String>(key: "alertOverrideEndSound", default: "Alert_Tone_Busy")
  374. static let alertOverrideEndSnoozedTime = UserDefaultsValue<Date?>(key: "alertOverrideEndSnoozedTime", default: nil)
  375. static let alertOverrideEndIsSnoozed = UserDefaultsValue<Bool>(key: "alertOverrideEndIsSnoozed", default: false)
  376. static let alertOverrideEndAutosnooze = UserDefaultsValue<String>(key: "alertOverrideEndAutosnooze", default: "Never")
  377. static let alertOverrideEndAutosnoozeDay = UserDefaultsValue<Bool>(key: "alertOverrideEndAutosnoozeDay", default: false)
  378. static let alertOverrideEndAutosnoozeNight = UserDefaultsValue<Bool>(key: "alertOverrideEndAutosnoozeNight", default: false)
  379. static let alertTempTargetStart = UserDefaultsValue<Bool>(key: "alertTempTargetStart", default: false)
  380. static let alertTempTargetStartQuiet = UserDefaultsValue<Bool>(key: "alertTempTargetStartQuiet", default: false)
  381. static let alertTempTargetStartRepeat = UserDefaultsValue<String>(key: "alertTempTargetStartRepeat", default: "Never")
  382. static let alertTempTargetStartDayTime = UserDefaultsValue<Bool>(key: "alertTempTargetStartDayTime", default: false)
  383. static let alertTempTargetStartNightTime = UserDefaultsValue<Bool>(key: "alertTempTargetStartNightTime", default: false)
  384. static let alertTempTargetStartAudible = UserDefaultsValue<String>(key: "alertTempTargetStartRepeatAudible", default: "Always")
  385. static let alertTempTargetStartDayTimeAudible = UserDefaultsValue<Bool>(key: "alertTempTargetStartDayTimeAudible", default: true)
  386. static let alertTempTargetStartNightTimeAudible = UserDefaultsValue<Bool>(key: "alertTempTargetStartNightTimeAudible", default: true)
  387. static let alertTempTargetStartSound = UserDefaultsValue<String>(key: "alertTempTargetStartSound", default: "Ending_Reached")
  388. static let alertTempTargetStartSnoozedTime = UserDefaultsValue<Date?>(key: "alertTempTargetStartSnoozedTime", default: nil)
  389. static let alertTempTargetStartIsSnoozed = UserDefaultsValue<Bool>(key: "alertTempTargetStartIsSnoozed", default: false)
  390. static let alertTempTargetStartAutosnooze = UserDefaultsValue<String>(key: "alertTempTargetStartAutosnooze", default: "Never")
  391. static let alertTempTargetStartAutosnoozeDay = UserDefaultsValue<Bool>(key: "alertTempTargetStartAutosnoozeDay", default: false)
  392. static let alertTempTargetStartAutosnoozeNight = UserDefaultsValue<Bool>(key: "alertTempTargetStartAutosnoozeNight", default: false)
  393. static let alertTempTargetEnd = UserDefaultsValue<Bool>(key: "alertTempTargetEnd", default: false)
  394. static let alertTempTargetEndQuiet = UserDefaultsValue<Bool>(key: "alertTempTargetEndQuiet", default: false)
  395. static let alertTempTargetEndRepeat = UserDefaultsValue<String>(key: "alertTempTargetEndRepeat", default: "Never")
  396. static let alertTempTargetEndDayTime = UserDefaultsValue<Bool>(key: "alertTempTargetEndDayTime", default: false)
  397. static let alertTempTargetEndNightTime = UserDefaultsValue<Bool>(key: "alertTempTargetEndNightTime", default: false)
  398. static let alertTempTargetEndAudible = UserDefaultsValue<String>(key: "alertTempTargetEndRepeatAudible", default: "Always")
  399. static let alertTempTargetEndDayTimeAudible = UserDefaultsValue<Bool>(key: "alertTempTargetEndDayTimeAudible", default: true)
  400. static let alertTempTargetEndNightTimeAudible = UserDefaultsValue<Bool>(key: "alertTempTargetEndNightTimeAudible", default: true)
  401. static let alertTempTargetEndSound = UserDefaultsValue<String>(key: "alertTempTargetEndSound", default: "Alert_Tone_Busy")
  402. static let alertTempTargetEndSnoozedTime = UserDefaultsValue<Date?>(key: "alertTempTargetEndSnoozedTime", default: nil)
  403. static let alertTempTargetEndIsSnoozed = UserDefaultsValue<Bool>(key: "alertTempTargetEndIsSnoozed", default: false)
  404. static let alertTempTargetEndAutosnooze = UserDefaultsValue<String>(key: "alertTempTargetEndAutosnooze", default: "Never")
  405. static let alertTempTargetEndAutosnoozeDay = UserDefaultsValue<Bool>(key: "alertTempTargetEndAutosnoozeDay", default: false)
  406. static let alertTempTargetEndAutosnoozeNight = UserDefaultsValue<Bool>(key: "alertTempTargetEndAutosnoozeNight", default: false)
  407. static let alertPump = UserDefaultsValue<Bool>(key: "alertPump", default: false)
  408. static let alertPumpAt = UserDefaultsValue<Int>(key: "alertPumpAt", default: 10) //Units
  409. static let alertPumpQuiet = UserDefaultsValue<Bool>(key: "alertPumpQuiet", default: false)
  410. static let alertPumpRepeat = UserDefaultsValue<String>(key: "alertPumpRepeat", default: "Never")
  411. static let alertPumpDayTime = UserDefaultsValue<Bool>(key: "alertPumpDayTime", default: false)
  412. static let alertPumpNightTime = UserDefaultsValue<Bool>(key: "alertPumpNightTime", default: false)
  413. static let alertPumpAudible = UserDefaultsValue<String>(key: "alertPumpAudible", default: "Always")
  414. static let alertPumpDayTimeAudible = UserDefaultsValue<Bool>(key: "alertPumpDayTimeAudible", default: true)
  415. static let alertPumpNightTimeAudible = UserDefaultsValue<Bool>(key: "alertPumpNightTimeAudible", default: true)
  416. static let alertPumpSound = UserDefaultsValue<String>(key: "alertPumpSound", default: "Marimba_Descend")
  417. static let alertPumpSnoozeHours = UserDefaultsValue<Int>(key: "alertPumpSnoozeHours", default: 5) //Hours
  418. static let alertPumpIsSnoozed = UserDefaultsValue<Bool>(key: "alertPumpIsSnoozed", default: false)
  419. static let alertPumpSnoozedTime = UserDefaultsValue<Date?>(key: "alertPumpSnoozedTime", default: nil)
  420. static let alertPumpAutosnooze = UserDefaultsValue<String>(key: "alertPumpAutosnooze", default: "Never")
  421. static let alertPumpAutosnoozeDay = UserDefaultsValue<Bool>(key: "alertPumpAutosnoozeDay", default: false)
  422. static let alertPumpAutosnoozeNight = UserDefaultsValue<Bool>(key: "alertPumpAutosnoozeNight", default: false)
  423. static let alertIOB = UserDefaultsValue<Bool>(key: "alertIOB", default: false)
  424. static let alertIOBAt = UserDefaultsValue<Double>(key: "alertIOBAt", default: 1.5) //Units
  425. static let alertIOBNumber = UserDefaultsValue<Int>(key: "alertIOBNumber", default: 3) //Number
  426. static let alertIOBBolusesWithin = UserDefaultsValue<Int>(key: "alertIOBBolusesWithin", default: 60) //Minutes
  427. static let alertIOBMaxBoluses = UserDefaultsValue<Int>(key: "alertIOBMaxBoluses", default: 10) //Units
  428. static let alertIOBQuiet = UserDefaultsValue<Bool>(key: "alertIOBQuiet", default: false)
  429. static let alertIOBRepeat = UserDefaultsValue<String>(key: "alertIOBRepeat", default: "Always")
  430. static let alertIOBDayTime = UserDefaultsValue<Bool>(key: "alertIOBDayTime", default: true)
  431. static let alertIOBNightTime = UserDefaultsValue<Bool>(key: "alertIOBNightTime", default: true)
  432. static let alertIOBAudible = UserDefaultsValue<String>(key: "alertIOBAudible", default: "Always")
  433. static let alertIOBDayTimeAudible = UserDefaultsValue<Bool>(key: "alertIOBDayTimeAudible", default: true)
  434. static let alertIOBNightTimeAudible = UserDefaultsValue<Bool>(key: "alertIOBNightTimeAudible", default: true)
  435. static let alertIOBSound = UserDefaultsValue<String>(key: "alertIOBSound", default: "Alert_Tone_Ringtone_1")
  436. static let alertIOBSnoozeHours = UserDefaultsValue<Int>(key: "alertIOBSnoozeHours", default: 1) //Hours
  437. static let alertIOBIsSnoozed = UserDefaultsValue<Bool>(key: "alertIOBIsSnoozed", default: false)
  438. static let alertIOBSnoozedTime = UserDefaultsValue<Date?>(key: "alertIOBSnoozedTime", default: nil)
  439. static let alertIOBAutosnooze = UserDefaultsValue<String>(key: "alertIOBAutosnooze", default: "Never")
  440. static let alertIOBAutosnoozeDay = UserDefaultsValue<Bool>(key: "alertIOBAutosnoozeDay", default: false)
  441. static let alertIOBAutosnoozeNight = UserDefaultsValue<Bool>(key: "alertIOBAutosnoozeNight", default: false)
  442. static let alertCOB = UserDefaultsValue<Bool>(key: "alertCOB", default: false)
  443. static let alertCOBAt = UserDefaultsValue<Int>(key: "alertCOBAt", default: 50) //Units
  444. static let alertCOBQuiet = UserDefaultsValue<Bool>(key: "alertCOBQuiet", default: false)
  445. static let alertCOBRepeat = UserDefaultsValue<String>(key: "alertCOBRepeat", default: "Always")
  446. static let alertCOBDayTime = UserDefaultsValue<Bool>(key: "alertCOBDayTime", default: true)
  447. static let alertCOBNightTime = UserDefaultsValue<Bool>(key: "alertCOBNightTime", default: true)
  448. static let alertCOBAudible = UserDefaultsValue<String>(key: "alertCOBAudible", default: "Always")
  449. static let alertCOBDayTimeAudible = UserDefaultsValue<Bool>(key: "alertCOBDayTimeAudible", default: true)
  450. static let alertCOBNightTimeAudible = UserDefaultsValue<Bool>(key: "alertCOBNightTimeAudible", default: true)
  451. static let alertCOBSound = UserDefaultsValue<String>(key: "alertCOBSound", default: "Alert_Tone_Ringtone_2")
  452. static let alertCOBSnoozeHours = UserDefaultsValue<Int>(key: "alertCOBSnoozeHours", default: 1) //Hours
  453. static let alertCOBIsSnoozed = UserDefaultsValue<Bool>(key: "alertCOBIsSnoozed", default: false)
  454. static let alertCOBSnoozedTime = UserDefaultsValue<Date?>(key: "alertCOBSnoozedTime", default: nil)
  455. static let alertCOBAutosnooze = UserDefaultsValue<String>(key: "alertCOBAutosnooze", default: "Never")
  456. static let alertCOBAutosnoozeDay = UserDefaultsValue<Bool>(key: "alertCOBAutosnoozeDay", default: false)
  457. static let alertCOBAutosnoozeNight = UserDefaultsValue<Bool>(key: "alertCOBAutosnoozeNight", default: false)
  458. static let alertBatteryActive = UserDefaultsValue<Bool>(key: "alertBatteryActive", default: false)
  459. static let alertBatteryLevel = UserDefaultsValue<Int>(key: "alertBatteryLevel", default: 25)
  460. static let alertBatterySound = UserDefaultsValue<String>(key: "alertBatterySound", default: "Machine_Charge")
  461. static let alertBatteryRepeat = UserDefaultsValue<Bool>(key: "alertBatteryRepeat", default: true)
  462. static let alertBatteryIsSnoozed = UserDefaultsValue<Bool>(key: "alertBatteryIsSnoozed", default: false)
  463. static let alertBatterySnoozedTime = UserDefaultsValue<Date?>(key: "alertBatterySnoozedTime", default: nil)
  464. static let alertBatterySnoozeHours = UserDefaultsValue<Int>(key: "alertBatterySnoozeHours", default: 1)
  465. static var deviceBatteryLevel: UserDefaultsValue<Double> = UserDefaultsValue(key: "deviceBatteryLevel", default: 100.0)
  466. static let alertBatteryDropActive = UserDefaultsValue<Bool>(key: "alertBatteryDropActive", default: false)
  467. static let alertBatteryDropPercentage = UserDefaultsValue<Int>(key: "alertBatteryDropPercentage", default: 5)
  468. static let alertBatteryDropPeriod = UserDefaultsValue<Int>(key: "alertBatteryDropPeriod", default: 15)
  469. static let alertBatteryDropSound = UserDefaultsValue<String>(key: "alertBatteryDropSound", default: "Machine_Charge")
  470. static let alertBatteryDropRepeat = UserDefaultsValue<Bool>(key: "alertBatteryDropRepeat", default: true)
  471. static let alertBatteryDropIsSnoozed = UserDefaultsValue<Bool>(key: "alertBatteryDropIsSnoozed", default: false)
  472. static let alertBatteryDropSnoozedTime = UserDefaultsValue<Date?>(key: "alertBatteryDropSnoozedTime", default: nil)
  473. static let alertBatteryDropSnoozeHours = UserDefaultsValue<Int>(key: "alertBatteryDropSnoozeHours", default: 1)
  474. static let alertRecBolusActive = UserDefaultsValue<Bool>(key: "alertRecBolusActive", default: false)
  475. static let alertRecBolusLevel = UserDefaultsValue<Double>(key: "alertRecBolusLevel", default: 1) //Unit[s]
  476. static let alertRecBolusSound = UserDefaultsValue<String>(key: "alertRecBolusSound", default: "Dhol_Shuffleloop")
  477. static let alertRecBolusRepeat = UserDefaultsValue<Bool>(key: "alertRecBolusRepeat", default: false)
  478. static let alertRecBolusIsSnoozed = UserDefaultsValue<Bool>(key: "alertRecBolusIsSnoozed", default: false)
  479. static let alertRecBolusSnooze = UserDefaultsValue<Int>(key: "alertRecBolusSnooze", default: 5)
  480. static let alertRecBolusSnoozedTime = UserDefaultsValue<Date?>(key: "alertRecBolusSnoozedTime", default: nil)
  481. static var deviceRecBolus: UserDefaultsValue<Double> = UserDefaultsValue(key: "deviceRecBolus", default: 0.0)
  482. //What version is the cache valid for
  483. static let cachedForVersion = UserDefaultsValue<String?>(key: "cachedForVersion", default: nil)
  484. //Caching of latest version
  485. static let latestVersion = UserDefaultsValue<String?>(key: "latestVersion", default: nil)
  486. static let latestVersionChecked = UserDefaultsValue<Date?>(key: "latestVersionChecked", default: nil)
  487. //Caching of blacklisted version
  488. static let currentVersionBlackListed = UserDefaultsValue<Bool>(key: "currentVersionBlackListed", default: false)
  489. // Tracking notifications to manage frequency
  490. static let lastBlacklistNotificationShown = UserDefaultsValue<Date?>(key: "lastBlacklistNotificationShown", default: nil)
  491. static let lastVersionUpdateNotificationShown = UserDefaultsValue<Date?>(key: "lastVersionUpdateNotificationShown", default: nil)
  492. // Tracking the last time the expiration notification was shown
  493. static let lastExpirationNotificationShown = UserDefaultsValue<Date?>(key: "lastExpirationNotificationShown", default: nil)
  494. }