diff --git a/Linphone/UI/Call/MeetingWaitingRoomFragment.swift b/Linphone/UI/Call/MeetingWaitingRoomFragment.swift index 521bc5434..33e93806c 100644 --- a/Linphone/UI/Call/MeetingWaitingRoomFragment.swift +++ b/Linphone/UI/Call/MeetingWaitingRoomFragment.swift @@ -50,11 +50,12 @@ struct MeetingWaitingRoomFragment: View { } .onAppear { meetingWaitingRoomViewModel.enableAVAudioSession() - - do { - try AVAudioSession.sharedInstance().overrideOutputAudioPort(.speaker) - } catch _ { - + if AVAudioSession.sharedInstance().currentRoute.outputs.filter({ $0.portType.rawValue.contains("Bluetooth") }).isEmpty { + do { + try AVAudioSession.sharedInstance().overrideOutputAudioPort(.speaker) + } catch _ { + + } } } .onDisappear { @@ -70,10 +71,12 @@ struct MeetingWaitingRoomFragment: View { .onAppear { meetingWaitingRoomViewModel.enableAVAudioSession() - do { - try AVAudioSession.sharedInstance().overrideOutputAudioPort(.speaker) - } catch _ { - + if AVAudioSession.sharedInstance().currentRoute.outputs.filter({ $0.portType.rawValue.contains("Bluetooth") }).isEmpty { + do { + try AVAudioSession.sharedInstance().overrideOutputAudioPort(.speaker) + } catch _ { + + } } } .onDisappear { @@ -314,9 +317,9 @@ struct MeetingWaitingRoomFragment: View { .resizable() .foregroundStyle(.white) .frame(width: 32, height: 32) - .onAppear(perform: meetingWaitingRoomViewModel.getAudioRouteImage) + .onAppear(perform: getAudioRouteImage) .onReceive(pub) { _ in - self.meetingWaitingRoomViewModel.getAudioRouteImage() + self.getAudioRouteImage() } } } @@ -550,6 +553,19 @@ struct MeetingWaitingRoomFragment: View { .background(Color.gray600) .frame(maxHeight: .infinity) } + + func getAudioRouteImage() { + if !AVAudioSession.sharedInstance().currentRoute.outputs.filter({ $0.portType.rawValue == "Speaker" }).isEmpty { + meetingWaitingRoomViewModel.imageAudioRoute = "speaker-high" + options = 2 + } else if !AVAudioSession.sharedInstance().currentRoute.outputs.filter({ $0.portType.rawValue.contains("Bluetooth") }).isEmpty { + meetingWaitingRoomViewModel.imageAudioRoute = "bluetooth" + options = 3 + } else { + meetingWaitingRoomViewModel.imageAudioRoute = meetingWaitingRoomViewModel.isHeadPhoneAvailable() ? "headset" : "speaker-slash" + options = 1 + } + } } #Preview { diff --git a/Linphone/UI/Call/ViewModel/MeetingWaitingRoomViewModel.swift b/Linphone/UI/Call/ViewModel/MeetingWaitingRoomViewModel.swift index 72cf45f22..ee07b19a0 100644 --- a/Linphone/UI/Call/ViewModel/MeetingWaitingRoomViewModel.swift +++ b/Linphone/UI/Call/ViewModel/MeetingWaitingRoomViewModel.swift @@ -217,23 +217,6 @@ class MeetingWaitingRoomViewModel: ObservableObject { } } - func getAudioRouteImage() { - print("AVAudioSessionAVAudioSession getAudioRouteImage \(imageAudioRoute)") - imageAudioRoute = AVAudioSession.sharedInstance().currentRoute.outputs.filter({ $0.portType.rawValue == "Speaker" }).isEmpty - ? ( - AVAudioSession.sharedInstance().currentRoute.outputs.filter({ $0.portType.rawValue.contains("Bluetooth") }).isEmpty - ? ( - isHeadPhoneAvailable() - ? "headset" - : "speaker-slash" - ) - : "bluetooth" - ) - : "speaker-high" - - print("AVAudioSessionAVAudioSession getAudioRouteImage \(imageAudioRoute)") - } - func isHeadPhoneAvailable() -> Bool { guard let availableInputs = AVAudioSession.sharedInstance().availableInputs else {return false} for inputDevice in availableInputs {