Merge branch 'mkirk/fix-unnecessary-session-changes'

pull/1/head
Michael Kirk 8 years ago
commit 914d2936a3

@ -145,7 +145,7 @@ struct AudioSource: Hashable {
ensureProperAudioSession(call: call) ensureProperAudioSession(call: call)
// It's importent to set preferred input *after* ensuring properAudioSession // It's importent to set preferred input *after* ensuring properAudioSession
// because some sources are only valid for certain categories. // because some sources are only valid for certain category/option combinations.
let session = AVAudioSession.sharedInstance() let session = AVAudioSession.sharedInstance()
do { do {
try session.setPreferredInput(audioSource?.portDescription) try session.setPreferredInput(audioSource?.portDescription)
@ -161,6 +161,8 @@ struct AudioSource: Hashable {
} }
private func ensureProperAudioSession(call: SignalCall?) { private func ensureProperAudioSession(call: SignalCall?) {
AssertIsOnMainThread()
guard let call = call else { guard let call = call else {
setAudioSession(category: AVAudioSessionCategoryPlayback, setAudioSession(category: AVAudioSessionCategoryPlayback,
mode: AVAudioSessionModeDefault) mode: AVAudioSessionModeDefault)
@ -178,16 +180,22 @@ struct AudioSource: Hashable {
setAudioSession(category: AVAudioSessionCategoryPlayAndRecord, setAudioSession(category: AVAudioSessionCategoryPlayAndRecord,
mode: AVAudioSessionModeVideoChat, mode: AVAudioSessionModeVideoChat,
options: options) options: options)
} else if call.isSpeakerphoneEnabled {
// Ensure no bluetooth if user has specified speakerphone
setAudioSession(category: AVAudioSessionCategoryPlayAndRecord,
mode: AVAudioSessionModeVoiceChat,
options: [.defaultToSpeaker])
} else { } else {
setAudioSession(category: AVAudioSessionCategoryPlayAndRecord, setAudioSession(category: AVAudioSessionCategoryPlayAndRecord,
mode: AVAudioSessionModeVoiceChat, mode: AVAudioSessionModeVoiceChat,
options: [.allowBluetooth]) options: [.allowBluetooth])
} }
let session = AVAudioSession.sharedInstance()
do {
if call.isSpeakerphoneEnabled {
try session.overrideOutputAudioPort(.speaker)
} else {
try session.overrideOutputAudioPort(.none)
}
} catch {
owsFail("\(TAG) failed overrideing output audio. isSpeakerPhoneEnabled: \(call.isSpeakerphoneEnabled)")
}
} }
// MARK: - Service action handlers // MARK: - Service action handlers

Loading…
Cancel
Save