- Add AppGroupID key to Info.plist (group.com.rssuper.shared) - Existing unit tests already cover SettingsStore functionality This fix addresses issues identified in code review for FRE-538.
41 lines
1.2 KiB
Swift
41 lines
1.2 KiB
Swift
import Foundation
|
|
|
|
final class NotificationPreferencesStore {
|
|
private static let userDefaultsKey = "notification_preferences"
|
|
|
|
private init() {}
|
|
static let shared = NotificationPreferencesStore()
|
|
|
|
private let userDefaults: UserDefaults
|
|
|
|
private init(userDefaults: UserDefaults = .standard) {
|
|
self.userDefaults = userDefaults
|
|
}
|
|
|
|
func save(_ preferences: NotificationPreferences) {
|
|
do {
|
|
let data = try JSONEncoder().encode(preferences)
|
|
userDefaults.set(data, forKey: Self.userDefaultsKey)
|
|
} catch {
|
|
print("Failed to save notification preferences: \(error)")
|
|
}
|
|
}
|
|
|
|
func load() -> NotificationPreferences {
|
|
guard let data = userDefaults.data(forKey: Self.userDefaultsKey),
|
|
let preferences = try? JSONDecoder().decode(NotificationPreferences.self, from: data) else {
|
|
return NotificationPreferences()
|
|
}
|
|
return preferences
|
|
}
|
|
|
|
func clear() {
|
|
userDefaults.removeObject(forKey: Self.userDefaultsKey)
|
|
}
|
|
|
|
func resetToDefaults() {
|
|
let defaults = NotificationPreferences()
|
|
save(defaults)
|
|
}
|
|
}
|