SnoozeViewController.swift 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. //
  2. // SecondViewController.swift
  3. // LoopFollow
  4. //
  5. // Created by Jon Fawcett on 6/1/20.
  6. // Copyright © 2020 Jon Fawcett. All rights reserved.
  7. //
  8. import UIKit
  9. import UserNotifications
  10. class SnoozeViewController: UIViewController, UNUserNotificationCenterDelegate {
  11. var appStateController: AppStateController?
  12. var snoozeTabItem: UITabBarItem = UITabBarItem()
  13. var mainTabItem: UITabBarItem = UITabBarItem()
  14. @IBOutlet weak var SnoozeButton: UIButton!
  15. @IBOutlet weak var BGLabel: UILabel!
  16. @IBOutlet weak var DirectionLabel: UILabel!
  17. @IBOutlet weak var DeltaLabel: UILabel!
  18. @IBOutlet weak var MinAgoLabel: UILabel!
  19. @IBOutlet weak var AlertLabel: UILabel!
  20. @IBAction func SnoozeButton(_ sender: Any) {
  21. AlarmSound.stop()
  22. guard let mainVC = self.tabBarController!.viewControllers?[0] as? MainViewController else { return }
  23. mainVC.startCheckAlarmTimer(time: mainVC.checkAlarmInterval)
  24. let tabBarControllerItems = self.tabBarController?.tabBar.items
  25. if let arrayOfTabBarItems = tabBarControllerItems as! AnyObject as? NSArray{
  26. snoozeTabItem = arrayOfTabBarItems[2] as! UITabBarItem
  27. }
  28. setSnoozeTime()
  29. // tabBarController?.selectedIndex = 0
  30. AlertLabel.isHidden = true
  31. SnoozeButton.isHidden = true
  32. //snoozeTabItem.isEnabled = false;
  33. }
  34. func updateDisplayWhenTriggered(bgVal: String, directionVal: String, deltaVal: String, minAgoVal: String, alertLabelVal: String){
  35. loadViewIfNeeded()
  36. BGLabel.text = bgVal
  37. DirectionLabel.text = directionVal
  38. DeltaLabel.text = deltaVal
  39. MinAgoLabel.text = minAgoVal
  40. AlertLabel.text = alertLabelVal
  41. sendNotification(self, bgVal: bgVal, directionVal: directionVal, deltaVal: deltaVal, minAgoVal: minAgoVal, alertLabelVal: alertLabelVal)
  42. }
  43. func sendNotification(_ sender: Any, bgVal: String, directionVal: String, deltaVal: String, minAgoVal: String, alertLabelVal: String) {
  44. UNUserNotificationCenter.current().delegate = self
  45. let content = UNMutableNotificationContent()
  46. content.title = alertLabelVal
  47. content.subtitle += bgVal + " "
  48. content.subtitle += directionVal + " "
  49. content.subtitle += deltaVal
  50. content.categoryIdentifier = "category"
  51. let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 1, repeats: false)
  52. let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger)
  53. UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)
  54. let action = UNNotificationAction(identifier: "snooze", title: "Snooze", options: [])
  55. let category = UNNotificationCategory(identifier: "category", actions: [action], intentIdentifiers: [], options: [])
  56. UNUserNotificationCenter.current().setNotificationCategories([category])
  57. }
  58. func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
  59. if response.actionIdentifier == "snooze" {
  60. SnoozeButton(self)
  61. }
  62. }
  63. func setSnoozeTime()
  64. {
  65. if AlarmSound.whichAlarm == "Temporary Alert" {
  66. UserDefaultsRepository.alertTemporaryActive.value = false
  67. guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
  68. alarms.reloadIsSnoozed(key: "alertTemporaryActive", value: false)
  69. } else if AlarmSound.whichAlarm == "Urgent Low Alert" {
  70. UserDefaultsRepository.alertUrgentLowIsSnoozed.value = true
  71. UserDefaultsRepository.alertUrgentLowSnoozedTime.value = Date().addingTimeInterval(TimeInterval(UserDefaultsRepository.alertUrgentLowSnooze.value * 60))
  72. guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
  73. alarms.reloadIsSnoozed(key: "alertUrgentLowIsSnoozed", value: true)
  74. alarms.reloadSnoozeTime(key: "alertUrgentLowSnoozedTime", setNil: false, value: Date().addingTimeInterval(TimeInterval(UserDefaultsRepository.alertUrgentLowSnooze.value * 60)))
  75. } else if AlarmSound.whichAlarm == "Low Alert" {
  76. UserDefaultsRepository.alertLowIsSnoozed.value = true
  77. UserDefaultsRepository.alertLowSnoozedTime.value = Date().addingTimeInterval(TimeInterval(UserDefaultsRepository.alertLowSnooze.value * 60))
  78. guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
  79. alarms.reloadIsSnoozed(key: "alertLowIsSnoozed", value: true)
  80. alarms.reloadSnoozeTime(key: "alertLowSnoozedTime", setNil: false, value: Date().addingTimeInterval(TimeInterval(UserDefaultsRepository.alertLowSnooze.value * 60)))
  81. } else if AlarmSound.whichAlarm == "High Alert" {
  82. UserDefaultsRepository.alertHighIsSnoozed.value = true
  83. UserDefaultsRepository.alertHighSnoozedTime.value = Date().addingTimeInterval(TimeInterval(UserDefaultsRepository.alertHighSnooze.value * 60))
  84. guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
  85. alarms.reloadIsSnoozed(key: "alertHighIsSnoozed", value: true)
  86. alarms.reloadSnoozeTime(key: "alertHighSnoozedTime", setNil: false, value: Date().addingTimeInterval(TimeInterval(UserDefaultsRepository.alertHighSnooze.value * 60)))
  87. } else if AlarmSound.whichAlarm == "Urgent High Alert" {
  88. UserDefaultsRepository.alertUrgentHighIsSnoozed.value = true
  89. UserDefaultsRepository.alertUrgentHighSnoozedTime.value = Date().addingTimeInterval(TimeInterval(UserDefaultsRepository.alertUrgentHighSnooze.value * 60))
  90. guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
  91. alarms.reloadIsSnoozed(key: "alertUrgentHighIsSnoozed", value: true)
  92. alarms.reloadSnoozeTime(key: "alertUrgentHighSnoozedTime", setNil: false, value: Date().addingTimeInterval(TimeInterval(UserDefaultsRepository.alertUrgentHighSnooze.value * 60)))
  93. } else if AlarmSound.whichAlarm == "Fast Drop Alert" {
  94. UserDefaultsRepository.alertFastDropIsSnoozed.value = true
  95. UserDefaultsRepository.alertFastDropSnoozedTime.value = Date().addingTimeInterval(TimeInterval(UserDefaultsRepository.alertFastDropSnooze.value * 60))
  96. guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
  97. alarms.reloadIsSnoozed(key: "alertFastDropIsSnoozed", value: true)
  98. alarms.reloadSnoozeTime(key: "alertFastDropSnoozedTime", setNil: false, value: Date().addingTimeInterval(TimeInterval(UserDefaultsRepository.alertFastDropSnooze.value * 60)))
  99. } else if AlarmSound.whichAlarm == "Fast Rise Alert" {
  100. UserDefaultsRepository.alertFastRiseIsSnoozed.value = true
  101. UserDefaultsRepository.alertFastRiseSnoozedTime.value = Date().addingTimeInterval(TimeInterval(UserDefaultsRepository.alertFastRiseSnooze.value * 60))
  102. guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
  103. alarms.reloadIsSnoozed(key: "alertFastRiseIsSnoozed", value: true)
  104. alarms.reloadSnoozeTime(key: "alertFastRiseSnoozedTime", setNil: false, value: Date().addingTimeInterval(TimeInterval(UserDefaultsRepository.alertFastRiseSnooze.value * 60)))
  105. } else if AlarmSound.whichAlarm == "Missed Reading Alert" {
  106. UserDefaultsRepository.alertMissedReadingIsSnoozed.value = true
  107. UserDefaultsRepository.alertMissedReadingSnoozedTime.value = Date().addingTimeInterval(TimeInterval(UserDefaultsRepository.alertMissedReadingSnooze.value * 60))
  108. guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
  109. alarms.reloadIsSnoozed(key: "alertMissedReadingIsSnoozed", value: true)
  110. alarms.reloadSnoozeTime(key: "alertMissedReadingSnoozedTime", setNil: false, value: Date().addingTimeInterval(TimeInterval(UserDefaultsRepository.alertMissedReadingSnooze.value * 60)))
  111. } else if AlarmSound.whichAlarm == "Sensor Change Alert" {
  112. UserDefaultsRepository.alertSAGEIsSnoozed.value = true
  113. UserDefaultsRepository.alertSAGESnoozedTime.value = Date().addingTimeInterval(TimeInterval(UserDefaultsRepository.alertSAGESnooze.value * 60 * 60))
  114. guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
  115. alarms.reloadIsSnoozed(key: "alertSAGEIsSnoozed", value: true)
  116. alarms.reloadSnoozeTime(key: "alertSAGESnoozedTime", setNil: false, value: Date().addingTimeInterval(TimeInterval(UserDefaultsRepository.alertSAGESnooze.value * 60 * 60)))
  117. } else if AlarmSound.whichAlarm == "Pump Change Alert" {
  118. UserDefaultsRepository.alertCAGEIsSnoozed.value = true
  119. UserDefaultsRepository.alertCAGESnoozedTime.value = Date().addingTimeInterval(TimeInterval(UserDefaultsRepository.alertCAGESnooze.value * 60 * 60))
  120. guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
  121. alarms.reloadIsSnoozed(key: "alertCAGEIsSnoozed", value: true)
  122. alarms.reloadSnoozeTime(key: "alertCAGESnoozedTime", setNil: false, value: Date().addingTimeInterval(TimeInterval(UserDefaultsRepository.alertCAGESnooze.value * 60 * 60)))
  123. } else if AlarmSound.whichAlarm == "Not Looping Alert" {
  124. UserDefaultsRepository.alertNotLoopingIsSnoozed.value = true
  125. UserDefaultsRepository.alertNotLoopingSnoozedTime.value = Date().addingTimeInterval(TimeInterval(UserDefaultsRepository.alertNotLoopingSnooze.value * 60))
  126. guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
  127. alarms.reloadIsSnoozed(key: "alertNotLoopingIsSnoozed", value: true)
  128. alarms.reloadSnoozeTime(key: "alertNotLoopingSnoozedTime", setNil: false, value: Date().addingTimeInterval(TimeInterval(UserDefaultsRepository.alertNotLoopingSnooze.value * 60)))
  129. }
  130. else if AlarmSound.whichAlarm == "Missed Bolus Alert" {
  131. UserDefaultsRepository.alertMissedBolusIsSnoozed.value = true
  132. UserDefaultsRepository.alertMissedBolusSnoozedTime.value = Date().addingTimeInterval(TimeInterval(UserDefaultsRepository.alertMissedBolusSnooze.value * 60))
  133. guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
  134. alarms.reloadIsSnoozed(key: "alertMissedBolusIsSnoozed", value: true)
  135. alarms.reloadSnoozeTime(key: "alertMissedBolusSnoozedTime", setNil: false, value: Date().addingTimeInterval(TimeInterval(UserDefaultsRepository.alertMissedBolusSnooze.value * 60)))
  136. }
  137. }
  138. func setQuietHours(snoozeTime: Date)
  139. {
  140. if UserDefaultsRepository.alertMissedBolusQuiet.value {
  141. UserDefaultsRepository.alertMissedBolusIsSnoozed.value = true
  142. UserDefaultsRepository.alertMissedBolusSnoozedTime.value = snoozeTime
  143. guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
  144. alarms.reloadIsSnoozed(key: "alertMissedBolusIsSnoozed", value: true)
  145. alarms.reloadSnoozeTime(key: "alertMissedBolusSnoozedTime", setNil: false, value: snoozeTime)
  146. }
  147. if UserDefaultsRepository.alertOverrideStartQuiet.value {
  148. UserDefaultsRepository.alertOverrideStartIsSnoozed.value = true
  149. UserDefaultsRepository.alertOverrideStartSnoozedTime.value = snoozeTime
  150. guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
  151. alarms.reloadIsSnoozed(key: "alertOverrideStartIsSnoozed", value: true)
  152. alarms.reloadSnoozeTime(key: "alertOverrideStartSnoozedTime", setNil: false, value: snoozeTime)
  153. }
  154. if UserDefaultsRepository.alertOverrideEndQuiet.value {
  155. UserDefaultsRepository.alertOverrideEndIsSnoozed.value = true
  156. UserDefaultsRepository.alertOverrideEndSnoozedTime.value = snoozeTime
  157. guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
  158. alarms.reloadIsSnoozed(key: "alertOverrideEndIsSnoozed", value: true)
  159. alarms.reloadSnoozeTime(key: "alertOverrideEndSnoozedTime", setNil: false, value: snoozeTime)
  160. }
  161. if UserDefaultsRepository.alertCAGEQuiet.value {
  162. UserDefaultsRepository.alertCAGEIsSnoozed.value = true
  163. UserDefaultsRepository.alertCAGESnoozedTime.value = snoozeTime
  164. guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
  165. alarms.reloadIsSnoozed(key: "alertCAGEIsSnoozed", value: true)
  166. alarms.reloadSnoozeTime(key: "alertCAGESnoozedTime", setNil: false, value: snoozeTime)
  167. }
  168. if UserDefaultsRepository.alertSAGEQuiet.value {
  169. UserDefaultsRepository.alertSAGEIsSnoozed.value = true
  170. UserDefaultsRepository.alertSAGESnoozedTime.value = snoozeTime
  171. guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
  172. alarms.reloadIsSnoozed(key: "alertSAGEIsSnoozed", value: true)
  173. alarms.reloadSnoozeTime(key: "alertSAGESnoozedTime", setNil: false, value: snoozeTime)
  174. }
  175. }
  176. override func viewDidLoad() {
  177. super.viewDidLoad()
  178. if UserDefaultsRepository.forceDarkMode.value {
  179. overrideUserInterfaceStyle = .dark
  180. }
  181. SnoozeButton.layer.cornerRadius = 5
  182. SnoozeButton.contentEdgeInsets = UIEdgeInsets(top: 10,left: 10,bottom: 10,right: 10)
  183. }
  184. }