Просмотр исходного кода

Added dedicated speak settings

Jonas Björkert 2 лет назад
Родитель
Сommit
8cd3346f4a

+ 3 - 3
LoopFollow/Controllers/Alarms.swift

@@ -868,9 +868,9 @@ extension MainViewController {
         }
         
         let always = UserDefaultsRepository.speakBGAlways.value
-        let lowThreshold = UserDefaultsRepository.alertLowBG.value
-        let highThreshold = UserDefaultsRepository.alertHighBG.value
-        let fastDropDelta = UserDefaultsRepository.alertFastDropDelta.value
+        let lowThreshold = UserDefaultsRepository.speakLowBGLimit.value
+        let fastDropDelta = UserDefaultsRepository.speakFastDropDelta.value
+        let highThreshold = UserDefaultsRepository.speakHighBGLimit.value
         let speakLowBG = UserDefaultsRepository.speakLowBG.value
         let speakProactiveLowBG = UserDefaultsRepository.speakProactiveLowBG.value
         let speakHighBG = UserDefaultsRepository.speakHighBG.value

+ 62 - 0
LoopFollow/ViewControllers/GeneralSettingsViewController.swift

@@ -183,6 +183,47 @@ class GeneralSettingsViewController: FormViewController {
            self?.handleLowProactiveLowToggle(row: row, opposingRowTag: "speakLowBG")
        }
        
+       <<< StepperRow("speakLowBGLimit") { row in
+           row.title = "Low BG Limit"
+           row.cell.stepper.stepValue = 1
+           row.cell.stepper.minimumValue = 40
+           row.cell.stepper.maximumValue = 108
+           row.value = Double(UserDefaultsRepository.speakLowBGLimit.value)
+           row.displayValueFor = { value in
+               guard let value = value else { return nil }
+               return bgUnits.toDisplayUnits(String(value))
+           }
+           // Visibility depends on either 'speakLowBG' or 'speakProactiveLowBG' being true
+           row.hidden = Condition.function(["speakLowBG", "speakProactiveLowBG"], { form in
+               let speakLowBGRow: SwitchRow! = form.rowBy(tag: "speakLowBG")
+               let speakProactiveLowBGRow: SwitchRow! = form.rowBy(tag: "speakProactiveLowBG")
+               return !(speakLowBGRow.value ?? false) && !(speakProactiveLowBGRow.value ?? false)
+           })
+       }.onChange { [weak self] row in
+           guard let value = row.value else { return }
+           UserDefaultsRepository.speakLowBGLimit.value = Float(value)
+       }
+
+       <<< StepperRow("speakFastDropDelta") { row in
+           row.title = "Fast Drop Delta"
+           row.cell.stepper.stepValue = 1
+           row.cell.stepper.minimumValue = 3
+           row.cell.stepper.maximumValue = 20
+           row.value = Double(UserDefaultsRepository.speakFastDropDelta.value)
+           row.displayValueFor = { value in
+               guard let value = value else { return nil }
+               return bgUnits.toDisplayUnits(String(value))
+           }
+           // Visibility depends on 'speakProactiveLowBG' being true
+           row.hidden = Condition.function(["speakProactiveLowBG"], { form in
+               let speakProactiveLowBGRow: SwitchRow! = form.rowBy(tag: "speakProactiveLowBG")
+               return !(speakProactiveLowBGRow.value ?? false)
+           })
+       }.onChange { [weak self] row in
+           guard let value = row.value else { return }
+           UserDefaultsRepository.speakFastDropDelta.value = Float(value)
+       }
+       
        <<< SwitchRow("speakHighBG") { row in
            row.title = "High"
            row.value = UserDefaultsRepository.speakHighBG.value
@@ -191,6 +232,27 @@ class GeneralSettingsViewController: FormViewController {
            UserDefaultsRepository.speakHighBG.value = value
        }
        
+       <<< StepperRow("speakHighBGLimit") { row in
+           row.title = "High BG Limit"
+           row.cell.stepper.stepValue = 1
+           row.cell.stepper.minimumValue = 140
+           row.cell.stepper.maximumValue = 300
+           row.value = Double(UserDefaultsRepository.speakHighBGLimit.value)
+           row.displayValueFor = { value in
+               guard let value = value else { return nil }
+               return bgUnits.toDisplayUnits(String(value))
+           }
+           // Visibility depends on 'speakHighBG' or 'speakProactiveLowBG' being true
+           row.hidden = Condition.function(["speakHighBG", "speakProactiveLowBG"], { form in
+               let speakHighBGRow: SwitchRow! = form.rowBy(tag: "speakHighBG")
+               let speakProactiveLowBGRow: SwitchRow! = form.rowBy(tag: "speakProactiveLowBG")
+               return !(speakHighBGRow.value ?? false) && !(speakProactiveLowBGRow.value ?? false)
+           })
+       }.onChange { [weak self] row in
+           guard let value = row.value else { return }
+           UserDefaultsRepository.speakHighBGLimit.value = Float(value)
+       }
+
        +++ ButtonRow() {
           $0.title = "DONE"
        }.onCellSelection { (row, arg)  in

+ 3 - 1
LoopFollow/repository/UserDefaults.swift

@@ -79,8 +79,10 @@ class UserDefaultsRepository {
     static let speakBGAlways = UserDefaultsValue<Bool>(key: "speakBGAlways", default: true)
     static let speakLowBG = UserDefaultsValue<Bool>(key: "speakLowBG", default: false)
     static let speakProactiveLowBG = UserDefaultsValue<Bool>(key: "speakProactiveLowBG", default: false)
+    static let speakFastDropDelta = UserDefaultsValue<Float>(key: "speakFastDropDelta", default: 10.0)
+    static let speakLowBGLimit = UserDefaultsValue<Float>(key: "speakLowBGLimit", default: 72.0)
+    static let speakHighBGLimit = UserDefaultsValue<Float>(key: "speakHighBGLimit", default: 180.0)
     static let speakHighBG = UserDefaultsValue<Bool>(key: "speakHighBG", default: false)
-    static let speakOverrideSystemVolume = UserDefaultsValue<Bool>(key: "speakOverrideSystemVolume", default: false)
     static let showDisplayName = UserDefaultsValue<Bool>(key: "showDisplayName", default: false)
     static let backgroundRefreshFrequency = UserDefaultsValue<Double>(key: "backgroundRefreshFrequency", default: 1)
     static let backgroundRefresh = UserDefaultsValue<Bool>(key: "backgroundRefresh", default: true)