diff --git a/Signal/src/call/CallAudioService.swift b/Signal/src/call/CallAudioService.swift index 0d53969bf..228e4552b 100644 --- a/Signal/src/call/CallAudioService.swift +++ b/Signal/src/call/CallAudioService.swift @@ -238,14 +238,11 @@ struct AudioSource: Hashable { Logger.verbose("\(TAG) in \(#function) new state: \(call.state)") + // Stop playing sounds while switching audio session so we don't + // get any blips across a temporary unintended route. + stopPlayingAnySounds() self.ensureProperAudioSession(call: call) - let session = AVAudioSession.sharedInstance() - Logger.verbose("\(TAG) in \(#function) session.category: \(session.category)") - Logger.verbose("\(TAG) in \(#function) session.categoryOptions: \(session.categoryOptions)") - Logger.verbose("\(TAG) in \(#function) session.preferredInput: \(session.preferredInput)") - Logger.verbose("\(TAG) in \(#function) session.availableInputs: \(session.availableInputs)") - switch call.state { case .idle: handleIdle(call: call) case .dialing: handleDialing(call: call) @@ -278,16 +275,12 @@ struct AudioSource: Hashable { private func handleAnswering(call: SignalCall) { Logger.debug("\(TAG) \(#function)") AssertIsOnMainThread() - - stopPlayingAnySounds() } private func handleRemoteRinging(call: SignalCall) { Logger.debug("\(TAG) \(#function)") AssertIsOnMainThread() - stopPlayingAnySounds() - // FIXME if you toggled speakerphone before this point, the outgoing ring does not play through speaker. Why? self.play(sound: Sound.outgoingRing) } @@ -296,23 +289,18 @@ struct AudioSource: Hashable { Logger.debug("\(TAG) in \(#function)") AssertIsOnMainThread() - stopPlayingAnySounds() startRinging(call: call) } private func handleConnected(call: SignalCall) { Logger.debug("\(TAG) \(#function)") AssertIsOnMainThread() - - stopPlayingAnySounds() } private func handleLocalFailure(call: SignalCall) { Logger.debug("\(TAG) \(#function)") AssertIsOnMainThread() - stopPlayingAnySounds() - play(sound: Sound.failure) } @@ -336,9 +324,8 @@ struct AudioSource: Hashable { Logger.debug("\(TAG) \(#function)") AssertIsOnMainThread() - stopPlayingAnySounds() - play(sound: Sound.busy) + // Let the busy sound play for 4 seconds. The full file is longer than necessary DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 4.0) { self.handleCallEnded(call: call) @@ -349,8 +336,6 @@ struct AudioSource: Hashable { Logger.debug("\(TAG) \(#function)") AssertIsOnMainThread() - stopPlayingAnySounds() - // Stop solo audio, revert to default. setAudioSession(category: AVAudioSessionCategoryAmbient) }