Files
MagicCounter/ios/MagicCounter/SettingsView.swift
2025-12-07 23:58:13 -07:00

105 lines
3.5 KiB
Swift

//
// SettingsView.swift
// MagicCounter
//
// Created by Atridad Lahiji on 2025-12-06.
//
import SwiftUI
struct SettingsView: View {
@AppStorage("accentColorName") private var accentColorName = "Blue"
@AppStorage("hapticFeedbackEnabled") private var hapticFeedbackEnabled = true
private let colors: [(name: String, color: Color)] = [
("Blue", .blue),
("Purple", .purple),
("Pink", .pink),
("Red", .red),
("Orange", .orange),
("Green", .green),
("Teal", .teal),
("Indigo", .indigo),
("Mint", .mint),
("Brown", .brown),
("Cyan", .cyan)
]
private var currentVersion: String {
Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "1.0"
}
private var buildNumber: String {
Bundle.main.infoDictionary?["CFBundleVersion"] as? String ?? "1"
}
private func foregroundColor(for colorName: String) -> Color {
switch colorName {
case "Mint", "Cyan", "Yellow":
return .black
default:
return .white
}
}
var body: some View {
NavigationStack {
Form {
Section("General") {
Toggle("Haptic Feedback", isOn: $hapticFeedbackEnabled)
}
Section("Appearance") {
VStack(alignment: .leading, spacing: 16) {
Text("ACCENT COLOR")
.font(.caption)
.foregroundStyle(.secondary)
LazyVGrid(columns: [GridItem(.adaptive(minimum: 44))], spacing: 12) {
ForEach(colors, id: \.name) { item in
Circle()
.fill(item.color)
.frame(width: 44, height: 44)
.overlay {
if accentColorName == item.name {
Image(systemName: "checkmark")
.font(.headline)
.foregroundStyle(foregroundColor(for: item.name))
}
}
.onTapGesture {
accentColorName = item.name
}
}
}
Divider()
Button("Reset to Default") {
accentColorName = "Blue"
}
.foregroundStyle(.red)
}
.padding(.vertical, 8)
}
Section("About") {
HStack {
Text("App Name")
Spacer()
Text("Magic Counter")
.foregroundStyle(.secondary)
}
HStack {
Text("Version")
Spacer()
Text("\(currentVersion) (\(buildNumber))")
.foregroundStyle(.secondary)
}
}
}
.navigationTitle("Settings")
}
}
}