فهرست منبع

Add: Silence alerts during phone calls

Jon Fawcett 4 سال پیش
والد
کامیت
be423f29b3

+ 21 - 2
LoopFollow/Controllers/Alarms.swift

@@ -14,6 +14,7 @@
 
 import Foundation
 import AVFoundation
+import CallKit
 
 extension MainViewController {
     
@@ -559,9 +560,12 @@ extension MainViewController {
     
     func triggerOneTimeAlarm(sound: String, overrideVolume: Bool, numLoops: Int, audio: Bool = true)
     {
+        var audioDuringCall = true
+        if !UserDefaultsRepository.alertAudioDuringPhone.value && isOnPhoneCall() { audioDuringCall = false }
+        
         guard let snoozer = self.tabBarController!.viewControllers?[2] as? SnoozeViewController else { return }
         snoozer.updateDisplayWhenTriggered(bgVal: bgUnits.toDisplayUnits(String(bgData[bgData.count - 1].sgv)), directionVal: latestDirectionString ?? "", deltaVal: bgUnits.toDisplayUnits(latestDeltaString) ?? "", minAgoVal: latestMinAgoString ?? "", alertLabelVal: AlarmSound.whichAlarm)
-        if audio && !UserDefaultsRepository.alertMuteAllIsMuted.value {
+        if audio && !UserDefaultsRepository.alertMuteAllIsMuted.value && audioDuringCall{
             AlarmSound.setSoundFile(str: sound)
             AlarmSound.play(overrideVolume: overrideVolume, numLoops: numLoops)
             startAlarmPlayingTimer()
@@ -570,6 +574,9 @@ extension MainViewController {
     
     func triggerAlarm(sound: String, snooozedBGReadingTime: TimeInterval?, overrideVolume: Bool, numLoops: Int, snoozeTime: Int = 0, snoozeIncrement: Int = 5, audio: Bool = true)
     {
+        var audioDuringCall = true
+        if !UserDefaultsRepository.alertAudioDuringPhone.value && isOnPhoneCall() { audioDuringCall = false }
+        
         guard let snoozer = self.tabBarController!.viewControllers?[2] as? SnoozeViewController else { return }
         snoozer.updateDisplayWhenTriggered(bgVal: bgUnits.toDisplayUnits(String(bgData[bgData.count - 1].sgv)), directionVal: latestDirectionString ?? "", deltaVal: bgUnits.toDisplayUnits(latestDeltaString) ?? "", minAgoVal: latestMinAgoString ?? "", alertLabelVal: AlarmSound.whichAlarm)
         snoozer.SnoozeButton.isHidden = false
@@ -588,7 +595,7 @@ extension MainViewController {
         if snooozedBGReadingTime != nil {
             UserDefaultsRepository.snoozedBGReadingTime.value = snooozedBGReadingTime
         }
-        if audio && !UserDefaultsRepository.alertMuteAllIsMuted.value {
+        if audio && !UserDefaultsRepository.alertMuteAllIsMuted.value && audioDuringCall {
             AlarmSound.setSoundFile(str: sound)
             AlarmSound.play(overrideVolume: overrideVolume, numLoops: numLoops)
         }
@@ -849,4 +856,16 @@ extension MainViewController {
            speechSynthesizer.speak(speechUtterance)
        }
     
+    func isOnPhoneCall() -> Bool {
+        /*
+         Returns true if the user is currently on a phone call
+         */
+        for call in CXCallObserver().calls {
+            if call.hasEnded == false {
+                return true
+            }
+        }
+        return false
+    }
+    
 }

+ 7 - 0
LoopFollow/ViewControllers/AlarmViewController.swift

@@ -3210,6 +3210,13 @@ class AlarmViewController: FormViewController {
                       guard let value = row.value else { return }
                       UserDefaultsRepository.forcedOutputVolume.value = Float(value)
               }
+        <<< SwitchRow("alertAudioDuringPhone"){ row in
+            row.title = "Audio During Calls"
+            row.value = UserDefaultsRepository.alertAudioDuringPhone.value
+        }.onChange { [weak self] row in
+                    guard let value = row.value else { return }
+                    UserDefaultsRepository.alertAudioDuringPhone.value = value
+            }
             <<< SwitchRow("alertIgnoreZero"){ row in
                 row.title = "Ignore Zero BG"
                 row.value = UserDefaultsRepository.alertIgnoreZero.value

+ 1 - 0
LoopFollow/repository/UserDefaults.swift

@@ -120,6 +120,7 @@ class UserDefaultsRepository {
     static let snoozedBGReadingTime = UserDefaultsValue<TimeInterval?>(key: "snoozedBGReadingTime", default: 0)
     
     static let alertIgnoreZero = UserDefaultsValue<Bool>(key: "alertIgnoreZero", default: true)
+    static let alertAudioDuringPhone = UserDefaultsValue<Bool>(key: "alertAudioDuringPhone", default: true)
     
     static let alertCageInsertTime = UserDefaultsValue<TimeInterval>(key: "alertCageInsertTime", default: 0)
     static let alertSageInsertTime = UserDefaultsValue<TimeInterval>(key: "alertSageInsertTime", default: 0)