// // ThemePicker.swift // Reflect (iOS) // // Created by Trey Tartt on 4/2/22. // import SwiftUI struct ThemePickerView: View { @Environment(\.colorScheme) var colorScheme @State private var selectedTheme: Theme = UserDefaultsStore.theme() private var textColor: Color { selectedTheme.currentTheme.labelColor } var body: some View { VStack { HStack(spacing: 0) { themeButton(for: .system) themeButton(for: .iFeel) themeButton(for: .dark) themeButton(for: .light) } .padding(.top) } .padding() .background(selectedTheme.currentTheme.secondaryBGColor) .fixedSize(horizontal: false, vertical: true) .cornerRadius(Constants.viewsCornerRaidus, corners: [.topLeft, .topRight, .bottomLeft, .bottomRight]) .onAppear { selectedTheme = UserDefaultsStore.theme() } } @ViewBuilder private func themeButton(for theme: Theme) -> some View { Button { selectTheme(theme) } label: { VStack { theme.currentTheme.preview .allowsHitTesting(false) .overlay( Circle() .stroke(Color(UIColor.systemGray), style: StrokeStyle(lineWidth: 2)) ) Text(theme.title) .foregroundColor(textColor) .font(.body) } .frame(maxWidth: .infinity) .contentShape(Rectangle()) } .buttonStyle(.plain) .background( RoundedRectangle(cornerRadius: 10, style: .continuous) .fill(selectedTheme == theme ? selectedTheme.currentTheme.bgColor : .clear) .padding(-5) ) .accessibilityIdentifier(AccessibilityID.Customize.themeButton(theme.title)) } private func selectTheme(_ theme: Theme) { // Save theme value GroupUserDefaults.groupDefaults.set(theme.rawValue, forKey: UserDefaultsStore.Keys.theme.rawValue) GroupUserDefaults.groupDefaults.synchronize() withAnimation(.easeInOut(duration: 0.2)) { selectedTheme = theme } AnalyticsManager.shared.track(.themeChanged(themeId: theme.rawValue)) } } struct ThemePickerView_Previews: PreviewProvider { static var previews: some View { ThemePickerView() } }