85 lines
3.0 KiB
Swift
85 lines
3.0 KiB
Swift
//
|
|
// ThemePicker.swift
|
|
// Feels (iOS)
|
|
//
|
|
// Created by Trey Tartt on 4/2/22.
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
struct ThemePickerView: View {
|
|
@Environment(\.colorScheme) var colorScheme
|
|
|
|
@AppStorage(UserDefaultsStore.Keys.theme.rawValue, store: GroupUserDefaults.groupDefaults) private var theme: Theme = .system
|
|
@AppStorage(UserDefaultsStore.Keys.textColor.rawValue, store: GroupUserDefaults.groupDefaults) private var textColor: Color = DefaultTextColor.textColor
|
|
|
|
var body: some View {
|
|
ZStack {
|
|
theme.currentTheme.secondaryBGColor
|
|
VStack {
|
|
HStack {
|
|
Spacer()
|
|
ForEach(Theme.allCases, id:\.rawValue) { aTheme in
|
|
Button(action: {
|
|
theme = aTheme
|
|
changeTextColor(forTheme: aTheme)
|
|
EventLogger.log(event: "change_theme_id", withData: ["id": aTheme.rawValue])
|
|
}, label: {
|
|
VStack {
|
|
aTheme.currentTheme.preview
|
|
.overlay(
|
|
Circle()
|
|
.stroke(Color(UIColor.systemGray), style: StrokeStyle(lineWidth: 2))
|
|
)
|
|
Text(aTheme.title)
|
|
.foregroundColor(textColor)
|
|
.font(.body)
|
|
}
|
|
})
|
|
.contentShape(Rectangle())
|
|
.background(
|
|
RoundedRectangle(cornerRadius: 10, style: .continuous)
|
|
.fill(theme == aTheme ? theme.currentTheme.bgColor : .clear)
|
|
.padding(-5)
|
|
|
|
)
|
|
Spacer()
|
|
}
|
|
}
|
|
.padding(.top)
|
|
}
|
|
.padding()
|
|
}
|
|
.fixedSize(horizontal: false, vertical: true)
|
|
.cornerRadius(Constants.viewsCornerRaidus, corners: [.topLeft, .topRight, .bottomLeft, .bottomRight])
|
|
}
|
|
|
|
private func changeTextColor(forTheme theme: Theme) {
|
|
if [Theme.iFeel, Theme.system].contains(theme) {
|
|
let currentSystemScheme = UITraitCollection.current.userInterfaceStyle
|
|
switch currentSystemScheme {
|
|
case .unspecified:
|
|
textColor = .black
|
|
case .light:
|
|
textColor = .black
|
|
case .dark:
|
|
textColor = .white
|
|
@unknown default:
|
|
textColor = .black
|
|
}
|
|
}
|
|
if theme == Theme.dark {
|
|
textColor = .white
|
|
}
|
|
if theme == Theme.light {
|
|
textColor = .black
|
|
}
|
|
}
|
|
}
|
|
|
|
struct ThemePickerView_Previews: PreviewProvider {
|
|
static var previews: some View {
|
|
ThemePickerView()
|
|
}
|
|
}
|