diff --git a/VoiceInk/Services/AudioDeviceManager.swift b/VoiceInk/Services/AudioDeviceManager.swift index bbae4a3..f003984 100644 --- a/VoiceInk/Services/AudioDeviceManager.swift +++ b/VoiceInk/Services/AudioDeviceManager.swift @@ -223,6 +223,22 @@ class AudioDeviceManager: ObservableObject { fallbackToDefaultDevice() } } + + func selectDeviceAndSwitchToCustomMode(id: AudioDeviceID) { + if let deviceToSelect = availableDevices.first(where: { $0.id == id }) { + let uid = deviceToSelect.uid + DispatchQueue.main.async { + self.inputMode = .custom + self.selectedDeviceID = id + UserDefaults.standard.audioInputModeRawValue = AudioInputMode.custom.rawValue + UserDefaults.standard.selectedAudioDeviceUID = uid + self.notifyDeviceChange() + } + } else { + logger.error("Attempted to select unavailable device: \(id)") + fallbackToDefaultDevice() + } + } func selectInputMode(_ mode: AudioInputMode) { inputMode = mode diff --git a/VoiceInk/Views/MenuBarView.swift b/VoiceInk/Views/MenuBarView.swift index 43e5c61..61f826f 100644 --- a/VoiceInk/Views/MenuBarView.swift +++ b/VoiceInk/Views/MenuBarView.swift @@ -10,7 +10,7 @@ struct MenuBarView: View { @EnvironmentObject var aiService: AIService @ObservedObject var audioDeviceManager = AudioDeviceManager.shared @State private var launchAtLoginEnabled = LaunchAtLogin.isEnabled - @State private var menuRefreshTrigger = false // Added to force menu updates + @State private var menuRefreshTrigger = false @State private var isHovered = false var body: some View { @@ -129,9 +129,7 @@ struct MenuBarView: View { Menu { ForEach(audioDeviceManager.availableDevices, id: \.id) { device in Button { - // Switch to Custom mode and select this device - audioDeviceManager.inputMode = .custom - audioDeviceManager.selectDevice(id: device.id) + audioDeviceManager.selectDeviceAndSwitchToCustomMode(id: device.id) } label: { HStack { Text(device.name)