From 7ccbe36716bb45a171b629d984220b4555394850 Mon Sep 17 00:00:00 2001 From: Talon Brown Date: Tue, 20 May 2025 18:08:40 -0500 Subject: [PATCH] Pause all audio attachments if receiving an incoming call. (cherry picked from commit 664b4abda9b17caf45a56edc38a4a7b5c4134776) --- Signal/Calls/UserInterface/CallUIAdapter.swift | 3 +++ Signal/ConversationView/CVAudioPlayback.swift | 14 ++++++++++++++ SignalUI/AV/AudioPlayer.swift | 1 + 3 files changed, 18 insertions(+) diff --git a/Signal/Calls/UserInterface/CallUIAdapter.swift b/Signal/Calls/UserInterface/CallUIAdapter.swift index c23d419f8f7..7fbe7876b55 100644 --- a/Signal/Calls/UserInterface/CallUIAdapter.swift +++ b/Signal/Calls/UserInterface/CallUIAdapter.swift @@ -97,6 +97,9 @@ public class CallUIAdapter: NSObject { } Logger.info("remoteAddress: \(caller)") + // make sure we dont have any audio playing as that will bug audio when it interacts with the call service + AppEnvironment.shared.cvAudioPlayerRef.pauseAll() + // make sure we don't terminate audio session during call _ = SUIEnvironment.shared.audioSessionRef.startAudioActivity(call.commonState.audioActivity) diff --git a/Signal/ConversationView/CVAudioPlayback.swift b/Signal/ConversationView/CVAudioPlayback.swift index 9bffce74fee..df9b6f6ad12 100644 --- a/Signal/ConversationView/CVAudioPlayback.swift +++ b/Signal/ConversationView/CVAudioPlayback.swift @@ -248,6 +248,14 @@ public class CVAudioPlayer: NSObject { audioPlayback.stop() self.audioPlayback = nil } + + //pause all function + public func pauseAll() { + guard let audioPlayback = self.audioPlayback else { + return + } + audioPlayback.pause() + } } extension CVAudioPlayer: AudioPlayerDelegate { @@ -396,6 +404,12 @@ private class CVAudioPlayback: NSObject, AudioPlayerDelegate { deinit { stop() } + + fileprivate func pause() { + AssertIsOnMainThread() + + audioPlayer.pause() + } fileprivate func stop() { AssertIsOnMainThread() diff --git a/SignalUI/AV/AudioPlayer.swift b/SignalUI/AV/AudioPlayer.swift index d179fe1dfa3..cfa1e8b88dd 100644 --- a/SignalUI/AV/AudioPlayer.swift +++ b/SignalUI/AV/AudioPlayer.swift @@ -195,6 +195,7 @@ public class AudioPlayer: NSObject { MainActor.assumeIsolated { DependenciesBridge.shared.deviceSleepManager?.removeBlock(blockObject: sleepBlockObject) } + teardownRemoteCommandCenter() } public func setupAudioPlayer() {