Refactor(UserDefaults): Centralize AudioDeviceManager keys into UserDefaultsManager and fix linter error

This commit is contained in:
Beingpax 2025-06-04 17:39:03 +05:45
parent e51e57f3b1
commit 335c42e078
2 changed files with 33 additions and 15 deletions

View File

@ -27,10 +27,6 @@ class AudioDeviceManager: ObservableObject {
static let shared = AudioDeviceManager()
private static let audioInputModeKey = "audioInputMode"
private static let selectedAudioDeviceUIDKey = "selectedAudioDeviceUID"
private static let prioritizedDevicesKey = "prioritizedDevices"
init() {
setupFallbackDevice()
loadPrioritizedDevices()
@ -38,7 +34,7 @@ class AudioDeviceManager: ObservableObject {
self?.initializeSelectedDevice()
}
if let savedMode = UserDefaults.standard.string(forKey: AudioDeviceManager.audioInputModeKey),
if let savedMode = UserDefaults.standard.audioInputModeRawValue,
let mode = AudioInputMode(rawValue: savedMode) {
inputMode = mode
}
@ -68,7 +64,7 @@ class AudioDeviceManager: ObservableObject {
return
}
if let savedUID = UserDefaults.standard.string(forKey: AudioDeviceManager.selectedAudioDeviceUIDKey) {
if let savedUID = UserDefaults.standard.selectedAudioDeviceUID {
if let device = availableDevices.first(where: { $0.uid == savedUID }) {
selectedDeviceID = device.id
logger.info("Loaded saved device UID: \(savedUID), mapped to ID: \(device.id)")
@ -77,7 +73,7 @@ class AudioDeviceManager: ObservableObject {
}
} else {
logger.warning("Saved device UID \(savedUID) is no longer available")
UserDefaults.standard.removeObject(forKey: AudioDeviceManager.selectedAudioDeviceUIDKey)
UserDefaults.standard.removeObject(forKey: UserDefaults.Keys.selectedAudioDeviceUID)
fallbackToDefaultDevice()
}
} else {
@ -208,27 +204,28 @@ class AudioDeviceManager: ObservableObject {
if let name = getDeviceName(deviceID: id) {
logger.info("Selected device name: \(name)")
}
if let deviceToSelect = availableDevices.first(where: { $0.id == id }), let uid = deviceToSelect.uid {
if let deviceToSelect = availableDevices.first(where: { $0.id == id }) {
let uid = deviceToSelect.uid
DispatchQueue.main.async {
self.selectedDeviceID = id
UserDefaults.standard.set(uid, forKey: AudioDeviceManager.selectedAudioDeviceUIDKey)
UserDefaults.standard.selectedAudioDeviceUID = uid
self.logger.info("Device selection saved with UID: \(uid)")
self.notifyDeviceChange()
}
} else {
logger.error("Attempted to select unavailable device or device with no UID: \(id)")
logger.error("Attempted to select unavailable device: \(id)")
fallbackToDefaultDevice()
}
}
func selectInputMode(_ mode: AudioInputMode) {
inputMode = mode
UserDefaults.standard.set(mode.rawValue, forKey: AudioDeviceManager.audioInputModeKey)
UserDefaults.standard.audioInputModeRawValue = mode.rawValue
if mode == .systemDefault {
selectedDeviceID = nil
UserDefaults.standard.removeObject(forKey: AudioDeviceManager.selectedAudioDeviceUIDKey)
UserDefaults.standard.removeObject(forKey: UserDefaults.Keys.selectedAudioDeviceUID)
} else if selectedDeviceID == nil {
if inputMode == .custom {
if let firstDevice = availableDevices.first {
@ -260,7 +257,7 @@ class AudioDeviceManager: ObservableObject {
}
private func loadPrioritizedDevices() {
if let data = UserDefaults.standard.data(forKey: AudioDeviceManager.prioritizedDevicesKey),
if let data = UserDefaults.standard.prioritizedDevicesData,
let devices = try? JSONDecoder().decode([PrioritizedDevice].self, from: data) {
prioritizedDevices = devices
logger.info("Loaded \(devices.count) prioritized devices")
@ -269,7 +266,7 @@ class AudioDeviceManager: ObservableObject {
func savePrioritizedDevices() {
if let data = try? JSONEncoder().encode(prioritizedDevices) {
UserDefaults.standard.set(data, forKey: AudioDeviceManager.prioritizedDevicesKey)
UserDefaults.standard.prioritizedDevicesData = data
logger.info("Saved \(self.prioritizedDevices.count) prioritized devices")
}
}

View File

@ -5,6 +5,9 @@ extension UserDefaults {
static let aiProviderApiKey = "VoiceInkAIProviderKey"
static let licenseKey = "VoiceInkLicense"
static let trialStartDate = "VoiceInkTrialStartDate"
static let audioInputMode = "audioInputMode"
static let selectedAudioDeviceUID = "selectedAudioDeviceUID"
static let prioritizedDevices = "prioritizedDevices"
}
// MARK: - AI Provider API Key
@ -24,4 +27,22 @@ extension UserDefaults {
get { object(forKey: Keys.trialStartDate) as? Date }
set { setValue(newValue, forKey: Keys.trialStartDate) }
}
// MARK: - Audio Input Mode
var audioInputModeRawValue: String? {
get { string(forKey: Keys.audioInputMode) }
set { setValue(newValue, forKey: Keys.audioInputMode) }
}
// MARK: - Selected Audio Device UID
var selectedAudioDeviceUID: String? {
get { string(forKey: Keys.selectedAudioDeviceUID) }
set { setValue(newValue, forKey: Keys.selectedAudioDeviceUID) }
}
// MARK: - Prioritized Devices
var prioritizedDevicesData: Data? {
get { data(forKey: Keys.prioritizedDevices) }
set { setValue(newValue, forKey: Keys.prioritizedDevices) }
}
}