Add dark mode support with appearance picker and fix hardcoded colors
Add user-facing appearance setting (System/Light/Dark) wired via preferredColorScheme at the app root. Replace hardcoded .black tints and foreground styles with .primary so toolbar buttons and text remain visible in dark mode. Remove profile picture from settings and SwiftSoup from acknowledgements. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
22
Nextcloud Cookbook iOS Client/Data/AppearanceMode.swift
Normal file
22
Nextcloud Cookbook iOS Client/Data/AppearanceMode.swift
Normal file
@@ -0,0 +1,22 @@
|
||||
//
|
||||
// AppearanceMode.swift
|
||||
// Nextcloud Cookbook iOS Client
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
enum AppearanceMode: String, CaseIterable {
|
||||
case system = "system"
|
||||
case light = "light"
|
||||
case dark = "dark"
|
||||
|
||||
func descriptor() -> String {
|
||||
switch self {
|
||||
case .system: return String(localized: "System")
|
||||
case .light: return String(localized: "Light")
|
||||
case .dark: return String(localized: "Dark")
|
||||
}
|
||||
}
|
||||
|
||||
static let allValues: [AppearanceMode] = AppearanceMode.allCases
|
||||
}
|
||||
@@ -144,7 +144,13 @@ class UserSettings: ObservableObject {
|
||||
UserDefaults.standard.set(mealPlanSyncEnabled, forKey: "mealPlanSyncEnabled")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Published var appearanceMode: String {
|
||||
didSet {
|
||||
UserDefaults.standard.set(appearanceMode, forKey: "appearanceMode")
|
||||
}
|
||||
}
|
||||
|
||||
init() {
|
||||
self.username = UserDefaults.standard.object(forKey: "username") as? String ?? ""
|
||||
self.token = UserDefaults.standard.object(forKey: "token") as? String ?? ""
|
||||
@@ -168,7 +174,8 @@ class UserSettings: ObservableObject {
|
||||
self.remindersListIdentifier = UserDefaults.standard.object(forKey: "remindersListIdentifier") as? String ?? ""
|
||||
self.grocerySyncEnabled = UserDefaults.standard.object(forKey: "grocerySyncEnabled") as? Bool ?? true
|
||||
self.mealPlanSyncEnabled = UserDefaults.standard.object(forKey: "mealPlanSyncEnabled") as? Bool ?? true
|
||||
|
||||
self.appearanceMode = UserDefaults.standard.object(forKey: "appearanceMode") as? String ?? AppearanceMode.system.rawValue
|
||||
|
||||
if authString == "" {
|
||||
if token != "" && username != "" {
|
||||
let loginString = "\(self.username):\(self.token)"
|
||||
|
||||
Reference in New Issue
Block a user