diff options
Diffstat (limited to 'Map/Data')
| -rw-r--r-- | Map/Data/UserPreferences.swift | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/Map/Data/UserPreferences.swift b/Map/Data/UserPreferences.swift index 01c4f37..761c5a8 100644 --- a/Map/Data/UserPreferences.swift +++ b/Map/Data/UserPreferences.swift @@ -16,6 +16,23 @@ import Foundation // MARK: - Enums +enum AppearanceStyle: String, CaseIterable, Codable { + case system = "system" + case light = "light" + case dark = "dark" + + var localizedName: String { + switch self { + case .system: + return String(localized: "preferences.appearance.style.system") + case .light: + return String(localized: "preferences.appearance.style.light") + case .dark: + return String(localized: "preferences.appearance.style.dark") + } + } +} + enum QuickLookPreviewStyle: String, CaseIterable, Codable { case map = "map" case highlightedText = "highlighted_text" @@ -35,6 +52,9 @@ enum QuickLookPreviewStyle: String, CaseIterable, Codable { // MARK: - JSON Export/Import Structures struct UserPreferencesJSON: Codable { + // MARK: - Appearance Preferences + var appearanceStyle: String? + // MARK: - Map Preferences var showMapBackground: Bool? var useCustomFont: Bool? @@ -66,6 +86,9 @@ struct UserPreferencesJSON: Codable { struct UserPreferences: Codable { + // MARK: - Appearance Preferences + var appearanceStyle: String + // MARK: - Map Preferences var showMapBackground: Bool var useCustomFont: Bool @@ -96,6 +119,8 @@ struct UserPreferences: Codable { // MARK: - Default Values struct Defaults { + static let appearanceStyle = AppearanceStyle.system.rawValue + static let showMapBackground = true static let useCustomFont = false static let customFontName = "Helvetica" @@ -141,6 +166,8 @@ struct UserPreferences: Codable { // MARK: - Initialization init() { + self.appearanceStyle = Defaults.appearanceStyle + self.showMapBackground = Defaults.showMapBackground self.useCustomFont = Defaults.useCustomFont self.customFontName = Defaults.customFontName @@ -171,6 +198,7 @@ struct UserPreferences: Codable { do { // Convert to JSON-friendly format let jsonPrefs = UserPreferencesJSON( + appearanceStyle: appearanceStyle, showMapBackground: showMapBackground, useCustomFont: useCustomFont, customFontName: customFontName, @@ -204,6 +232,9 @@ struct UserPreferences: Codable { // Convert from JSON format back to UserPreferences // Only update values that are present in the JSON (partial updates) + if let value = jsonPrefs.appearanceStyle { + self.appearanceStyle = value + } if let value = jsonPrefs.showMapBackground { self.showMapBackground = value } @@ -301,6 +332,9 @@ struct UserPreferences: Codable { let defaults = UserDefaults.standard let sharedDefaults = UserDefaults(suiteName: "group.systems.tranquil.Map") + // Appearance Preferences + defaults.set(appearanceStyle, forKey: "appearanceStyle") + // Map Preferences defaults.set(showMapBackground, forKey: "showMapBackground") defaults.set(useCustomFont, forKey: "useCustomFont") @@ -337,6 +371,10 @@ struct UserPreferences: Codable { var preferences = UserPreferences() + // Appearance Preferences + preferences.appearanceStyle = + defaults.object(forKey: "appearanceStyle") as? String ?? Defaults.appearanceStyle + // Map Preferences preferences.showMapBackground = defaults.object(forKey: "showMapBackground") as? Bool ?? Defaults.showMapBackground |