Set default Bluetooth device when available in MeetingWaitingRoom

This commit is contained in:
Benoit Martins 2024-07-10 14:12:59 +02:00
parent 8d425c40e6
commit 65a98c6030
2 changed files with 27 additions and 28 deletions

View file

@ -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 {

View file

@ -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 {