customize text color
This commit is contained in:
@@ -52,6 +52,7 @@
|
|||||||
1C361F1727C046D800E832FC /* MonthDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C361F1627C046D800E832FC /* MonthDetailView.swift */; };
|
1C361F1727C046D800E832FC /* MonthDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C361F1627C046D800E832FC /* MonthDetailView.swift */; };
|
||||||
1C414BF127D3CAB300BC1720 /* OnboardingData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C5F4975279C84090092F1B4 /* OnboardingData.swift */; };
|
1C414BF127D3CAB300BC1720 /* OnboardingData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C5F4975279C84090092F1B4 /* OnboardingData.swift */; };
|
||||||
1C414BF527D3CB2200BC1720 /* OnboardingDay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CA03774279A294800D26164 /* OnboardingDay.swift */; };
|
1C414BF527D3CB2200BC1720 /* OnboardingDay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CA03774279A294800D26164 /* OnboardingDay.swift */; };
|
||||||
|
1C414C0F27D51FB500BC1720 /* EntryListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C414C0E27D51FB500BC1720 /* EntryListView.swift */; };
|
||||||
1C4FF3BB27BEDDF000BE8F34 /* ShowBasedOnVoteLogics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C4FF3BA27BEDDF000BE8F34 /* ShowBasedOnVoteLogics.swift */; };
|
1C4FF3BB27BEDDF000BE8F34 /* ShowBasedOnVoteLogics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C4FF3BA27BEDDF000BE8F34 /* ShowBasedOnVoteLogics.swift */; };
|
||||||
1C4FF3BC27BEDF6600BE8F34 /* ShowBasedOnVoteLogics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C4FF3BA27BEDDF000BE8F34 /* ShowBasedOnVoteLogics.swift */; };
|
1C4FF3BC27BEDF6600BE8F34 /* ShowBasedOnVoteLogics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C4FF3BA27BEDDF000BE8F34 /* ShowBasedOnVoteLogics.swift */; };
|
||||||
1C4FF3BE27BEDF9100BE8F34 /* PersistenceHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C4FF3BD27BEDF9100BE8F34 /* PersistenceHelper.swift */; };
|
1C4FF3BE27BEDF9100BE8F34 /* PersistenceHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C4FF3BD27BEDF9100BE8F34 /* PersistenceHelper.swift */; };
|
||||||
@@ -196,6 +197,7 @@
|
|||||||
1C361F0B27C0356B00E832FC /* MainTabView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainTabView.swift; sourceTree = "<group>"; };
|
1C361F0B27C0356B00E832FC /* MainTabView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainTabView.swift; sourceTree = "<group>"; };
|
||||||
1C361F1327C03C8600E832FC /* OnboardingDataDataManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingDataDataManager.swift; sourceTree = "<group>"; };
|
1C361F1327C03C8600E832FC /* OnboardingDataDataManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingDataDataManager.swift; sourceTree = "<group>"; };
|
||||||
1C361F1627C046D800E832FC /* MonthDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MonthDetailView.swift; sourceTree = "<group>"; };
|
1C361F1627C046D800E832FC /* MonthDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MonthDetailView.swift; sourceTree = "<group>"; };
|
||||||
|
1C414C0E27D51FB500BC1720 /* EntryListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EntryListView.swift; sourceTree = "<group>"; };
|
||||||
1C4FF3BA27BEDDF000BE8F34 /* ShowBasedOnVoteLogics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShowBasedOnVoteLogics.swift; sourceTree = "<group>"; };
|
1C4FF3BA27BEDDF000BE8F34 /* ShowBasedOnVoteLogics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShowBasedOnVoteLogics.swift; sourceTree = "<group>"; };
|
||||||
1C4FF3BD27BEDF9100BE8F34 /* PersistenceHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PersistenceHelper.swift; sourceTree = "<group>"; };
|
1C4FF3BD27BEDF9100BE8F34 /* PersistenceHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PersistenceHelper.swift; sourceTree = "<group>"; };
|
||||||
1C4FF3BF27BEE06900BE8F34 /* PersistenceGET.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PersistenceGET.swift; sourceTree = "<group>"; };
|
1C4FF3BF27BEE06900BE8F34 /* PersistenceGET.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PersistenceGET.swift; sourceTree = "<group>"; };
|
||||||
@@ -456,6 +458,7 @@
|
|||||||
1C358FB427B0ADF3002C83A6 /* SharingTemplates */,
|
1C358FB427B0ADF3002C83A6 /* SharingTemplates */,
|
||||||
1CAD602B27A5C1C800C520BD /* SmallRollUpHeaderView.swift */,
|
1CAD602B27A5C1C800C520BD /* SmallRollUpHeaderView.swift */,
|
||||||
1CAD603D27A6ECCD00C520BD /* SwitchableView.swift */,
|
1CAD603D27A6ECCD00C520BD /* SwitchableView.swift */,
|
||||||
|
1C414C0E27D51FB500BC1720 /* EntryListView.swift */,
|
||||||
);
|
);
|
||||||
path = Views;
|
path = Views;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -809,6 +812,7 @@
|
|||||||
1CD90B63278C7EBA001C4FEA /* Mood.swift in Sources */,
|
1CD90B63278C7EBA001C4FEA /* Mood.swift in Sources */,
|
||||||
1C358FBE27B4D1F2002C83A6 /* CurrentStreakTemplate.swift in Sources */,
|
1C358FBE27B4D1F2002C83A6 /* CurrentStreakTemplate.swift in Sources */,
|
||||||
1C4FF3C727BEE09E00BE8F34 /* PersistenceADD.swift in Sources */,
|
1C4FF3C727BEE09E00BE8F34 /* PersistenceADD.swift in Sources */,
|
||||||
|
1C414C0F27D51FB500BC1720 /* EntryListView.swift in Sources */,
|
||||||
1C4FF3BB27BEDDF000BE8F34 /* ShowBasedOnVoteLogics.swift in Sources */,
|
1C4FF3BB27BEDDF000BE8F34 /* ShowBasedOnVoteLogics.swift in Sources */,
|
||||||
1CAD603527A5C1C800C520BD /* SettingsView.swift in Sources */,
|
1CAD603527A5C1C800C520BD /* SettingsView.swift in Sources */,
|
||||||
1CD90B53278C7E7A001C4FEA /* FeelsWidget.intentdefinition in Sources */,
|
1CD90B53278C7E7A001C4FEA /* FeelsWidget.intentdefinition in Sources */,
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import SwiftUI
|
|||||||
|
|
||||||
class AppDelegate: NSObject, UIApplicationDelegate {
|
class AppDelegate: NSObject, UIApplicationDelegate {
|
||||||
private let savedOnboardingData = UserDefaultsStore.getOnboarding()
|
private let savedOnboardingData = UserDefaultsStore.getOnboarding()
|
||||||
|
@AppStorage(UserDefaultsStore.Keys.textColor.rawValue, store: GroupUserDefaults.groupDefaults) private var textColor: Color = .black
|
||||||
|
|
||||||
func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
|
func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
|
||||||
// PersistenceController.shared.clearDB()
|
// PersistenceController.shared.clearDB()
|
||||||
@@ -22,7 +23,7 @@ class AppDelegate: NSObject, UIApplicationDelegate {
|
|||||||
UNUserNotificationCenter.current().delegate = self
|
UNUserNotificationCenter.current().delegate = self
|
||||||
|
|
||||||
let theme = UserDefaultsStore.theme()
|
let theme = UserDefaultsStore.theme()
|
||||||
UIPageControl.appearance().currentPageIndicatorTintColor = UIColor(theme.currentTheme.labelColor)
|
UIPageControl.appearance().currentPageIndicatorTintColor = UIColor(textColor)
|
||||||
UIPageControl.appearance().pageIndicatorTintColor = UIColor.systemGray
|
UIPageControl.appearance().pageIndicatorTintColor = UIColor.systemGray
|
||||||
|
|
||||||
let appearance = UITabBarAppearance()
|
let appearance = UITabBarAppearance()
|
||||||
|
|||||||
@@ -98,3 +98,24 @@ extension String {
|
|||||||
return (r, g, b, a)
|
return (r, g, b, a)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extension Color: RawRepresentable {
|
||||||
|
// TODO: Sort out alpha
|
||||||
|
public init?(rawValue: Int) {
|
||||||
|
let red = Double((rawValue & 0xFF0000) >> 16) / 0xFF
|
||||||
|
let green = Double((rawValue & 0x00FF00) >> 8) / 0xFF
|
||||||
|
let blue = Double(rawValue & 0x0000FF) / 0xFF
|
||||||
|
self = Color(red: red, green: green, blue: blue)
|
||||||
|
}
|
||||||
|
|
||||||
|
public var rawValue: Int {
|
||||||
|
let red = Int(coreImageColor.red * 255 + 0.5)
|
||||||
|
let green = Int(coreImageColor.green * 255 + 0.5)
|
||||||
|
let blue = Int(coreImageColor.blue * 255 + 0.5)
|
||||||
|
return (red << 16) | (green << 8) | blue
|
||||||
|
}
|
||||||
|
|
||||||
|
private var coreImageColor: CIColor {
|
||||||
|
return CIColor(color: UIColor(self))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ class UserDefaultsStore {
|
|||||||
case customWidget
|
case customWidget
|
||||||
case customMoodTint
|
case customMoodTint
|
||||||
case customMoodTintUpdateNumber
|
case customMoodTintUpdateNumber
|
||||||
|
case textColor
|
||||||
|
|
||||||
case contentViewCurrentSelectedHeaderViewBackDays
|
case contentViewCurrentSelectedHeaderViewBackDays
|
||||||
case contentViewHeaderTag
|
case contentViewHeaderTag
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import CoreData
|
|||||||
struct AddMoodHeaderView: View {
|
struct AddMoodHeaderView: View {
|
||||||
@AppStorage(UserDefaultsStore.Keys.theme.rawValue, store: GroupUserDefaults.groupDefaults) private var theme: Theme = .system
|
@AppStorage(UserDefaultsStore.Keys.theme.rawValue, store: GroupUserDefaults.groupDefaults) private var theme: Theme = .system
|
||||||
@AppStorage(UserDefaultsStore.Keys.moodTint.rawValue, store: GroupUserDefaults.groupDefaults) private var moodTint: MoodTints = .Default
|
@AppStorage(UserDefaultsStore.Keys.moodTint.rawValue, store: GroupUserDefaults.groupDefaults) private var moodTint: MoodTints = .Default
|
||||||
|
@AppStorage(UserDefaultsStore.Keys.textColor.rawValue, store: GroupUserDefaults.groupDefaults) private var textColor: Color = .black
|
||||||
|
|
||||||
@State var onboardingData = OnboardingDataDataManager.shared.savedOnboardingData
|
@State var onboardingData = OnboardingDataDataManager.shared.savedOnboardingData
|
||||||
|
|
||||||
@@ -29,7 +30,7 @@ struct AddMoodHeaderView: View {
|
|||||||
VStack {
|
VStack {
|
||||||
Text(ShowBasedOnVoteLogics.getVotingTitle(onboardingData: onboardingData))
|
Text(ShowBasedOnVoteLogics.getVotingTitle(onboardingData: onboardingData))
|
||||||
.font(.title)
|
.font(.title)
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
.padding()
|
.padding()
|
||||||
HStack{
|
HStack{
|
||||||
ForEach(Mood.allValues) { mood in
|
ForEach(Mood.allValues) { mood in
|
||||||
|
|||||||
@@ -10,7 +10,8 @@ import SwiftUI
|
|||||||
struct CreateWidgetView: View {
|
struct CreateWidgetView: View {
|
||||||
@AppStorage(UserDefaultsStore.Keys.theme.rawValue, store: GroupUserDefaults.groupDefaults) private var theme: Theme = .system
|
@AppStorage(UserDefaultsStore.Keys.theme.rawValue, store: GroupUserDefaults.groupDefaults) private var theme: Theme = .system
|
||||||
@Environment(\.dismiss) var dismiss
|
@Environment(\.dismiss) var dismiss
|
||||||
|
@AppStorage(UserDefaultsStore.Keys.textColor.rawValue, store: GroupUserDefaults.groupDefaults) private var textColor: Color = .black
|
||||||
|
|
||||||
@StateObject private var customWidget: CustomWidgetModel
|
@StateObject private var customWidget: CustomWidgetModel
|
||||||
|
|
||||||
@State private var mouth: CustomWidgetMouthOptions = CustomWidgetMouthOptions.defaultOption
|
@State private var mouth: CustomWidgetMouthOptions = CustomWidgetMouthOptions.defaultOption
|
||||||
@@ -115,7 +116,7 @@ struct CreateWidgetView: View {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
}
|
}
|
||||||
Spacer()
|
Spacer()
|
||||||
VStack(alignment: .center) {
|
VStack(alignment: .center) {
|
||||||
@@ -128,7 +129,7 @@ struct CreateWidgetView: View {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
}
|
}
|
||||||
Spacer()
|
Spacer()
|
||||||
VStack(alignment: .center) {
|
VStack(alignment: .center) {
|
||||||
@@ -141,7 +142,7 @@ struct CreateWidgetView: View {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
}
|
}
|
||||||
Spacer()
|
Spacer()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,10 @@ struct CustomizeView: View {
|
|||||||
|
|
||||||
@AppStorage(UserDefaultsStore.Keys.customMoodTintUpdateNumber.rawValue, store: GroupUserDefaults.groupDefaults) private var customMoodTintUpdateNumber: Int = 0
|
@AppStorage(UserDefaultsStore.Keys.customMoodTintUpdateNumber.rawValue, store: GroupUserDefaults.groupDefaults) private var customMoodTintUpdateNumber: Int = 0
|
||||||
|
|
||||||
|
@AppStorage(UserDefaultsStore.Keys.textColor.rawValue, store: GroupUserDefaults.groupDefaults) private var textColor: Color = .black
|
||||||
|
|
||||||
|
@State private var sampleListEntry = PersistenceController.shared.randomEntries(count: 1).first!
|
||||||
|
|
||||||
@StateObject private var customMoodTint = UserDefaultsStore.getCustomMoodTint()
|
@StateObject private var customMoodTint = UserDefaultsStore.getCustomMoodTint()
|
||||||
|
|
||||||
class StupidAssCustomWidgetObservableObject: ObservableObject {
|
class StupidAssCustomWidgetObservableObject: ObservableObject {
|
||||||
@@ -43,8 +47,14 @@ struct CustomizeView: View {
|
|||||||
createCustomWidget
|
createCustomWidget
|
||||||
changeIcon
|
changeIcon
|
||||||
themePicker
|
themePicker
|
||||||
|
Divider()
|
||||||
|
sampleEntryView
|
||||||
pickMoodImagePack
|
pickMoodImagePack
|
||||||
pickMoodTintPack
|
Group {
|
||||||
|
pickMoodTintPack
|
||||||
|
pickTextColor
|
||||||
|
}
|
||||||
|
Divider()
|
||||||
pickPeronsalityPack
|
pickPeronsalityPack
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -316,6 +326,48 @@ struct CustomizeView: View {
|
|||||||
.cornerRadius(10, corners: [.topLeft, .topRight, .bottomLeft, .bottomRight])
|
.cornerRadius(10, corners: [.topLeft, .topRight, .bottomLeft, .bottomRight])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private var pickTextColor: some View {
|
||||||
|
ZStack {
|
||||||
|
theme.currentTheme.secondaryBGColor
|
||||||
|
ColorPicker(String(localized: "customize_view_view_text_color"), selection: $textColor)
|
||||||
|
.padding()
|
||||||
|
.foregroundColor(textColor)
|
||||||
|
}
|
||||||
|
.fixedSize(horizontal: false, vertical: true)
|
||||||
|
.cornerRadius(10, corners: [.topLeft, .topRight, .bottomLeft, .bottomRight])
|
||||||
|
}
|
||||||
|
|
||||||
|
private var sampleEntryView: some View {
|
||||||
|
ZStack {
|
||||||
|
theme.currentTheme.secondaryBGColor
|
||||||
|
|
||||||
|
VStack {
|
||||||
|
HStack {
|
||||||
|
Spacer()
|
||||||
|
Image(systemName: "arrow.triangle.2.circlepath.circle")
|
||||||
|
.resizable()
|
||||||
|
.frame(width: 20, height: 20, alignment: .trailing)
|
||||||
|
.foregroundColor(Color(UIColor.systemGray))
|
||||||
|
.onTapGesture {
|
||||||
|
sampleListEntry = PersistenceController.shared.randomEntries(count: 1).first!
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Spacer()
|
||||||
|
}.padding()
|
||||||
|
|
||||||
|
VStack(alignment:.leading) {
|
||||||
|
Text(String(localized: "customize_view_view_example_row"))
|
||||||
|
.padding([.leading, .top])
|
||||||
|
.foregroundColor(textColor)
|
||||||
|
Divider()
|
||||||
|
EntryListView(entry: sampleListEntry)
|
||||||
|
.padding()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.fixedSize(horizontal: false, vertical: true)
|
||||||
|
.cornerRadius(10, corners: [.topLeft, .topRight, .bottomLeft, .bottomRight])
|
||||||
|
}
|
||||||
|
|
||||||
private func saveCustomMoodTint() {
|
private func saveCustomMoodTint() {
|
||||||
UserDefaultsStore.saveCustomMoodTint(customTint: customMoodTint)
|
UserDefaultsStore.saveCustomMoodTint(customTint: customMoodTint)
|
||||||
moodTint = .Custom
|
moodTint = .Custom
|
||||||
@@ -330,7 +382,7 @@ struct CustomizeView: View {
|
|||||||
VStack(spacing: 10) {
|
VStack(spacing: 10) {
|
||||||
Text(String(aPack.title()))
|
Text(String(aPack.title()))
|
||||||
.font(.body)
|
.font(.body)
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
|
|
||||||
Text(aPack.randomPushNotificationStrings().title)
|
Text(aPack.randomPushNotificationStrings().title)
|
||||||
.font(.body)
|
.font(.body)
|
||||||
@@ -364,3 +416,14 @@ struct CustomizeView: View {
|
|||||||
.cornerRadius(10, corners: [.topLeft, .topRight, .bottomLeft, .bottomRight])
|
.cornerRadius(10, corners: [.topLeft, .topRight, .bottomLeft, .bottomRight])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct CustomizeView_Previews: PreviewProvider {
|
||||||
|
static var previews: some View {
|
||||||
|
Group {
|
||||||
|
CustomizeView()
|
||||||
|
|
||||||
|
CustomizeView()
|
||||||
|
.preferredColorScheme(.dark)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -9,7 +9,8 @@ import SwiftUI
|
|||||||
|
|
||||||
struct EmptyHomeView: View {
|
struct EmptyHomeView: View {
|
||||||
@AppStorage(UserDefaultsStore.Keys.theme.rawValue, store: GroupUserDefaults.groupDefaults) private var theme: Theme = .system
|
@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 = .black
|
||||||
|
|
||||||
let viewModel: HomeViewViewModel
|
let viewModel: HomeViewViewModel
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
@@ -19,12 +20,12 @@ struct EmptyHomeView: View {
|
|||||||
VStack {
|
VStack {
|
||||||
Text(String(localized: "content_view_empty_title"))
|
Text(String(localized: "content_view_empty_title"))
|
||||||
.font(.title)
|
.font(.title)
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
.padding()
|
.padding()
|
||||||
|
|
||||||
Text(String(localized: "content_view_empty_title"))
|
Text(String(localized: "content_view_empty_title"))
|
||||||
.font(.body)
|
.font(.body)
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
.padding()
|
.padding()
|
||||||
AddMoodHeaderView(addItemHeaderClosure: { (mood, date) in
|
AddMoodHeaderView(addItemHeaderClosure: { (mood, date) in
|
||||||
withAnimation {
|
withAnimation {
|
||||||
|
|||||||
56
Shared/views/EntryListView.swift
Normal file
56
Shared/views/EntryListView.swift
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
//
|
||||||
|
// EntryListView.swift
|
||||||
|
// Feels (iOS)
|
||||||
|
//
|
||||||
|
// Created by Trey Tartt on 3/6/22.
|
||||||
|
//
|
||||||
|
|
||||||
|
import SwiftUI
|
||||||
|
|
||||||
|
struct EntryListView: View {
|
||||||
|
@AppStorage(UserDefaultsStore.Keys.moodImages.rawValue, store: GroupUserDefaults.groupDefaults) private var imagePack: MoodImages = .FontAwesome
|
||||||
|
@AppStorage(UserDefaultsStore.Keys.moodTint.rawValue, store: GroupUserDefaults.groupDefaults) private var moodTint: MoodTints = .Default
|
||||||
|
@AppStorage(UserDefaultsStore.Keys.textColor.rawValue, store: GroupUserDefaults.groupDefaults) private var textColor: Color = .black
|
||||||
|
|
||||||
|
public let entry: MoodEntry
|
||||||
|
|
||||||
|
var body: some View {
|
||||||
|
HStack {
|
||||||
|
imagePack.icon(forMood: entry.mood)
|
||||||
|
.resizable()
|
||||||
|
.aspectRatio(contentMode: .fit)
|
||||||
|
.frame(width: 40, height: 40, alignment: .center)
|
||||||
|
.foregroundColor(moodTint.color(forMood: entry.mood))
|
||||||
|
.padding(.leading, 5)
|
||||||
|
|
||||||
|
VStack {
|
||||||
|
HStack {
|
||||||
|
Text(Random.weekdayName(fromDate:entry.forDate!))
|
||||||
|
.font(.title3)
|
||||||
|
.foregroundColor(textColor)
|
||||||
|
Text(" - ")
|
||||||
|
.padding([.leading, .trailing], -10)
|
||||||
|
.foregroundColor(textColor)
|
||||||
|
Text(Random.dayFormat(fromDate:entry.forDate!))
|
||||||
|
.font(.title3)
|
||||||
|
.foregroundColor(textColor)
|
||||||
|
Spacer()
|
||||||
|
}
|
||||||
|
.multilineTextAlignment(.leading)
|
||||||
|
|
||||||
|
Text(entry.moodValue == Mood.missing.rawValue ? String(localized: "mood_value_missing_tap_to_add") : "\(entry.moodString)")
|
||||||
|
.font(.body)
|
||||||
|
.foregroundColor(Color(UIColor.systemGray))
|
||||||
|
.frame(maxWidth: .infinity, alignment: .leading)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct EntryListView_Previews: PreviewProvider {
|
||||||
|
static let fakeData = PersistenceController.shared.randomEntries(count: 1).first!
|
||||||
|
|
||||||
|
static var previews: some View {
|
||||||
|
EntryListView(entry: EntryListView_Previews.fakeData)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -22,6 +22,7 @@ struct FilterView: View {
|
|||||||
|
|
||||||
@AppStorage(UserDefaultsStore.Keys.theme.rawValue, store: GroupUserDefaults.groupDefaults) private var theme: Theme = .system
|
@AppStorage(UserDefaultsStore.Keys.theme.rawValue, store: GroupUserDefaults.groupDefaults) private var theme: Theme = .system
|
||||||
@AppStorage(UserDefaultsStore.Keys.moodTint.rawValue, store: GroupUserDefaults.groupDefaults) private var moodTint: MoodTints = .Default
|
@AppStorage(UserDefaultsStore.Keys.moodTint.rawValue, store: GroupUserDefaults.groupDefaults) private var moodTint: MoodTints = .Default
|
||||||
|
@AppStorage(UserDefaultsStore.Keys.textColor.rawValue, store: GroupUserDefaults.groupDefaults) private var textColor: Color = .black
|
||||||
|
|
||||||
@StateObject private var viewModel = FilterViewModel()
|
@StateObject private var viewModel = FilterViewModel()
|
||||||
//[
|
//[
|
||||||
@@ -55,7 +56,7 @@ struct FilterView: View {
|
|||||||
|
|
||||||
Text(String(localized: "filter_view_total") + ": \(self.viewModel.numberOfRatings)")
|
Text(String(localized: "filter_view_total") + ": \(self.viewModel.numberOfRatings)")
|
||||||
.font(.title2)
|
.font(.title2)
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
|
|
||||||
if showFilter {
|
if showFilter {
|
||||||
filterView
|
filterView
|
||||||
@@ -82,7 +83,7 @@ struct FilterView: View {
|
|||||||
Text(showFilter ? String(localized: "filter_view_hide_filters") : String(localized: "filter_view_show_filters"))
|
Text(showFilter ? String(localized: "filter_view_hide_filters") : String(localized: "filter_view_show_filters"))
|
||||||
.frame(maxWidth: .infinity)
|
.frame(maxWidth: .infinity)
|
||||||
.frame(height: 44)
|
.frame(height: 44)
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
.background(theme.currentTheme.secondaryBGColor)
|
.background(theme.currentTheme.secondaryBGColor)
|
||||||
.cornerRadius(10)
|
.cornerRadius(10)
|
||||||
}).frame(maxWidth: .infinity)
|
}).frame(maxWidth: .infinity)
|
||||||
@@ -91,7 +92,8 @@ struct FilterView: View {
|
|||||||
struct StatsSubView: View {
|
struct StatsSubView: View {
|
||||||
@AppStorage(UserDefaultsStore.Keys.moodTint.rawValue, store: GroupUserDefaults.groupDefaults) private var moodTint: MoodTints = .Default
|
@AppStorage(UserDefaultsStore.Keys.moodTint.rawValue, store: GroupUserDefaults.groupDefaults) private var moodTint: MoodTints = .Default
|
||||||
@AppStorage(UserDefaultsStore.Keys.theme.rawValue, store: GroupUserDefaults.groupDefaults) private var theme: Theme = .system
|
@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 = .black
|
||||||
|
|
||||||
let data: [MoodEntry]
|
let data: [MoodEntry]
|
||||||
let mood: Mood
|
let mood: Mood
|
||||||
|
|
||||||
@@ -100,7 +102,7 @@ struct FilterView: View {
|
|||||||
Text(String(Stats.getCountFor(moodType: mood,
|
Text(String(Stats.getCountFor(moodType: mood,
|
||||||
inData: data)))
|
inData: data)))
|
||||||
.font(.title)
|
.font(.title)
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
Text(mood.strValue)
|
Text(mood.strValue)
|
||||||
.foregroundColor(moodTint.color(forMood: mood))
|
.foregroundColor(moodTint.color(forMood: mood))
|
||||||
}
|
}
|
||||||
@@ -139,8 +141,8 @@ struct FilterView: View {
|
|||||||
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 44, maxHeight: 44)
|
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 44, maxHeight: 44)
|
||||||
.cornerRadius(10)
|
.cornerRadius(10)
|
||||||
.padding([.leading, .trailing])
|
.padding([.leading, .trailing])
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
.accentColor(theme.currentTheme.labelColor)
|
.accentColor(textColor)
|
||||||
|
|
||||||
ZStack {
|
ZStack {
|
||||||
theme.currentTheme.secondaryBGColor
|
theme.currentTheme.secondaryBGColor
|
||||||
@@ -156,8 +158,8 @@ struct FilterView: View {
|
|||||||
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 44, maxHeight: 44)
|
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 44, maxHeight: 44)
|
||||||
.cornerRadius(10)
|
.cornerRadius(10)
|
||||||
.padding([.leading, .trailing])
|
.padding([.leading, .trailing])
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
.accentColor(theme.currentTheme.labelColor)
|
.accentColor(textColor)
|
||||||
|
|
||||||
ZStack {
|
ZStack {
|
||||||
theme.currentTheme.secondaryBGColor
|
theme.currentTheme.secondaryBGColor
|
||||||
@@ -196,7 +198,7 @@ struct FilterView: View {
|
|||||||
ForEach(months, id: \.self.0) { item in
|
ForEach(months, id: \.self.0) { item in
|
||||||
Text(item.1)
|
Text(item.1)
|
||||||
.textCase(.uppercase)
|
.textCase(.uppercase)
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
}
|
}
|
||||||
}.padding([.leading, .trailing, .top])
|
}.padding([.leading, .trailing, .top])
|
||||||
}
|
}
|
||||||
@@ -213,7 +215,7 @@ struct FilterView: View {
|
|||||||
let yearData = self.viewModel.data[yearKey]!
|
let yearData = self.viewModel.data[yearKey]!
|
||||||
Text(String(yearKey))
|
Text(String(yearKey))
|
||||||
.font(.title)
|
.font(.title)
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
yearGridView(yearData: yearData, columns: columns)
|
yearGridView(yearData: yearData, columns: columns)
|
||||||
.background(
|
.background(
|
||||||
theme.currentTheme.secondaryBGColor
|
theme.currentTheme.secondaryBGColor
|
||||||
|
|||||||
@@ -12,11 +12,13 @@ struct HeaderStatsView : UIViewRepresentable {
|
|||||||
//Bar chart accepts data as array of BarChartDataEntry objects
|
//Bar chart accepts data as array of BarChartDataEntry objects
|
||||||
var entries : [BarChartDataEntry]
|
var entries : [BarChartDataEntry]
|
||||||
var moodTints: [Color]
|
var moodTints: [Color]
|
||||||
|
var textColor: Color
|
||||||
|
|
||||||
var tmpHolderToMakeViewDiffefrent: Color
|
var tmpHolderToMakeViewDiffefrent: Color
|
||||||
|
|
||||||
init(fakeData: Bool, backDays: Int, moodTint: [Color]) {
|
init(fakeData: Bool, backDays: Int, moodTint: [Color], textColor: Color) {
|
||||||
self.moodTints = moodTint
|
self.moodTints = moodTint
|
||||||
|
self.textColor = textColor
|
||||||
guard moodTints.count == 5 else {
|
guard moodTints.count == 5 else {
|
||||||
fatalError("mood tint count dont match")
|
fatalError("mood tint count dont match")
|
||||||
}
|
}
|
||||||
@@ -105,8 +107,8 @@ struct HeaderStatsView : UIViewRepresentable {
|
|||||||
|
|
||||||
// change bars color to green
|
// change bars color to green
|
||||||
dataSet.colors = moodTints.map({ NSUIColor( $0 ) })
|
dataSet.colors = moodTints.map({ NSUIColor( $0 ) })
|
||||||
dataSet.secondaryTextColor = UIColor.systemGray
|
dataSet.secondaryTextColor = UIColor(textColor)
|
||||||
dataSet.valueColors = [.white]
|
dataSet.valueColors = [UIColor(textColor)]
|
||||||
dataSet.highlightAlpha = 0.0
|
dataSet.highlightAlpha = 0.0
|
||||||
dataSet.roundedCornerValue = 10
|
dataSet.roundedCornerValue = 10
|
||||||
|
|
||||||
@@ -128,6 +130,6 @@ struct HeaderStatsView : UIViewRepresentable {
|
|||||||
|
|
||||||
struct HeaderStatsView_Previews: PreviewProvider {
|
struct HeaderStatsView_Previews: PreviewProvider {
|
||||||
static var previews: some View {
|
static var previews: some View {
|
||||||
HeaderStatsView(fakeData: true, backDays: 30, moodTint: [Color.green, Color.blue, Color.yellow, Color.red, Color.orange]).frame(minHeight: 85, maxHeight: 90)
|
HeaderStatsView(fakeData: true, backDays: 30, moodTint: [Color.green, Color.blue, Color.yellow, Color.red, Color.orange], textColor: .white).frame(minHeight: 85, maxHeight: 90)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ struct HomeView: View {
|
|||||||
|
|
||||||
@AppStorage(UserDefaultsStore.Keys.moodImages.rawValue, store: GroupUserDefaults.groupDefaults) private var imagePack: MoodImages = .FontAwesome
|
@AppStorage(UserDefaultsStore.Keys.moodImages.rawValue, store: GroupUserDefaults.groupDefaults) private var imagePack: MoodImages = .FontAwesome
|
||||||
@AppStorage(UserDefaultsStore.Keys.moodTint.rawValue, store: GroupUserDefaults.groupDefaults) private var moodTint: MoodTints = .Default
|
@AppStorage(UserDefaultsStore.Keys.moodTint.rawValue, store: GroupUserDefaults.groupDefaults) private var moodTint: MoodTints = .Default
|
||||||
|
@AppStorage(UserDefaultsStore.Keys.textColor.rawValue, store: GroupUserDefaults.groupDefaults) private var textColor: Color = .black
|
||||||
|
|
||||||
// store a value that gets changed when user updates custom colors to update the view since the moodTint doesn't change
|
// store a value that gets changed when user updates custom colors to update the view since the moodTint doesn't change
|
||||||
@AppStorage(UserDefaultsStore.Keys.customMoodTintUpdateNumber.rawValue, store: GroupUserDefaults.groupDefaults) private var customMoodTintUpdateNumber: Int = 0
|
@AppStorage(UserDefaultsStore.Keys.customMoodTintUpdateNumber.rawValue, store: GroupUserDefaults.groupDefaults) private var customMoodTintUpdateNumber: Int = 0
|
||||||
@@ -280,7 +281,7 @@ extension HomeView {
|
|||||||
private func SectionHeaderView(month: Int, year: Int) -> some View {
|
private func SectionHeaderView(month: Int, year: Int) -> some View {
|
||||||
Text("\(Random.monthName(fromMonthInt: month)) \(String(year))")
|
Text("\(Random.monthName(fromMonthInt: month)) \(String(year))")
|
||||||
.font(.title)
|
.font(.title)
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
.frame(maxWidth: .infinity, alignment: .leading)
|
.frame(maxWidth: .infinity, alignment: .leading)
|
||||||
.padding()
|
.padding()
|
||||||
.background(
|
.background(
|
||||||
@@ -294,7 +295,7 @@ extension HomeView {
|
|||||||
ForEach(entries.sorted(by: {
|
ForEach(entries.sorted(by: {
|
||||||
return $0.forDate! > $1.forDate!
|
return $0.forDate! > $1.forDate!
|
||||||
}), id: \.self) { entry in
|
}), id: \.self) { entry in
|
||||||
entryListView(entry: entry)
|
EntryListView(entry: entry)
|
||||||
.contentShape(Rectangle())
|
.contentShape(Rectangle())
|
||||||
.onTapGesture(perform: {
|
.onTapGesture(perform: {
|
||||||
selectedEntry = entry
|
selectedEntry = entry
|
||||||
@@ -303,38 +304,6 @@ extension HomeView {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private func entryListView(entry: MoodEntry) -> some View {
|
|
||||||
HStack {
|
|
||||||
imagePack.icon(forMood: entry.mood)
|
|
||||||
.resizable()
|
|
||||||
.aspectRatio(contentMode: .fit)
|
|
||||||
.frame(width: 40, height: 40, alignment: .center)
|
|
||||||
.foregroundColor(moodTint.color(forMood: entry.mood))
|
|
||||||
.padding(.leading, 5)
|
|
||||||
|
|
||||||
VStack {
|
|
||||||
HStack {
|
|
||||||
Text(Random.weekdayName(fromDate:entry.forDate!))
|
|
||||||
.font(.title3)
|
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
|
||||||
Text(" - ")
|
|
||||||
.padding([.leading, .trailing], -10)
|
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
|
||||||
Text(Random.dayFormat(fromDate:entry.forDate!))
|
|
||||||
.font(.title3)
|
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
|
||||||
Spacer()
|
|
||||||
}
|
|
||||||
.multilineTextAlignment(.leading)
|
|
||||||
|
|
||||||
Text(entry.moodValue == Mood.missing.rawValue ? String(localized: "mood_value_missing_tap_to_add") : "\(entry.moodString)")
|
|
||||||
.font(.body)
|
|
||||||
.foregroundColor(Color(UIColor.systemGray))
|
|
||||||
.frame(maxWidth: .infinity, alignment: .leading)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct ViewOffsetKey: PreferenceKey {
|
struct ViewOffsetKey: PreferenceKey {
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ struct MonthDetailView: View {
|
|||||||
@AppStorage(UserDefaultsStore.Keys.theme.rawValue, store: GroupUserDefaults.groupDefaults) private var theme: Theme = .system
|
@AppStorage(UserDefaultsStore.Keys.theme.rawValue, store: GroupUserDefaults.groupDefaults) private var theme: Theme = .system
|
||||||
@AppStorage(UserDefaultsStore.Keys.deleteEnable.rawValue, store: GroupUserDefaults.groupDefaults) private var deleteEnabled = true
|
@AppStorage(UserDefaultsStore.Keys.deleteEnable.rawValue, store: GroupUserDefaults.groupDefaults) private var deleteEnabled = true
|
||||||
@AppStorage(UserDefaultsStore.Keys.moodTint.rawValue, store: GroupUserDefaults.groupDefaults) private var moodTint: MoodTints = .Default
|
@AppStorage(UserDefaultsStore.Keys.moodTint.rawValue, store: GroupUserDefaults.groupDefaults) private var moodTint: MoodTints = .Default
|
||||||
|
@AppStorage(UserDefaultsStore.Keys.textColor.rawValue, store: GroupUserDefaults.groupDefaults) private var textColor: Color = .black
|
||||||
|
|
||||||
@State private var showingSheet = false
|
@State private var showingSheet = false
|
||||||
@State private var selectedEntry: MoodEntry?
|
@State private var selectedEntry: MoodEntry?
|
||||||
@@ -36,7 +37,7 @@ struct MonthDetailView: View {
|
|||||||
VStack {
|
VStack {
|
||||||
Text("\(Random.monthName(fromMonthInt: monthInt)) \(String(yearInt))")
|
Text("\(Random.monthName(fromMonthInt: monthInt)) \(String(yearInt))")
|
||||||
.font(.title)
|
.font(.title)
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
.frame(maxWidth: .infinity, alignment: .leading)
|
.frame(maxWidth: .infinity, alignment: .leading)
|
||||||
.padding()
|
.padding()
|
||||||
.background(
|
.background(
|
||||||
@@ -112,7 +113,7 @@ struct MonthDetailView: View {
|
|||||||
Text(entry.forDate!,
|
Text(entry.forDate!,
|
||||||
format: Date.FormatStyle().day())
|
format: Date.FormatStyle().day())
|
||||||
.font(.title3)
|
.font(.title3)
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
}
|
}
|
||||||
|
|
||||||
if entry.mood == .placeholder {
|
if entry.mood == .placeholder {
|
||||||
|
|||||||
@@ -13,7 +13,8 @@ struct MonthView: View {
|
|||||||
@AppStorage(UserDefaultsStore.Keys.theme.rawValue, store: GroupUserDefaults.groupDefaults) private var theme: Theme = .system
|
@AppStorage(UserDefaultsStore.Keys.theme.rawValue, store: GroupUserDefaults.groupDefaults) private var theme: Theme = .system
|
||||||
|
|
||||||
@AppStorage(UserDefaultsStore.Keys.moodTint.rawValue, store: GroupUserDefaults.groupDefaults) private var moodTint: MoodTints = .Default
|
@AppStorage(UserDefaultsStore.Keys.moodTint.rawValue, store: GroupUserDefaults.groupDefaults) private var moodTint: MoodTints = .Default
|
||||||
|
@AppStorage(UserDefaultsStore.Keys.textColor.rawValue, store: GroupUserDefaults.groupDefaults) private var textColor: Color = .black
|
||||||
|
|
||||||
// store a value that gets changed when user updates custom colors to update the view since the moodTint doesn't change
|
// store a value that gets changed when user updates custom colors to update the view since the moodTint doesn't change
|
||||||
@AppStorage(UserDefaultsStore.Keys.customMoodTintUpdateNumber.rawValue, store: GroupUserDefaults.groupDefaults) private var customMoodTintUpdateNumber: Int = 0
|
@AppStorage(UserDefaultsStore.Keys.customMoodTintUpdateNumber.rawValue, store: GroupUserDefaults.groupDefaults) private var customMoodTintUpdateNumber: Int = 0
|
||||||
|
|
||||||
@@ -127,7 +128,7 @@ extension MonthView {
|
|||||||
ZStack {
|
ZStack {
|
||||||
Text("\(Random.monthName(fromMonthInt: month)) \(String(year))")
|
Text("\(Random.monthName(fromMonthInt: month)) \(String(year))")
|
||||||
.font(.body)
|
.font(.body)
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
.frame(maxWidth: .infinity, alignment: .leading)
|
.frame(maxWidth: .infinity, alignment: .leading)
|
||||||
Text(String(customMoodTintUpdateNumber))
|
Text(String(customMoodTintUpdateNumber))
|
||||||
.hidden()
|
.hidden()
|
||||||
|
|||||||
@@ -20,7 +20,8 @@ struct SettingsView: View {
|
|||||||
@AppStorage(UserDefaultsStore.Keys.useCloudKit.rawValue, store: GroupUserDefaults.groupDefaults) private var useCloudKit = false
|
@AppStorage(UserDefaultsStore.Keys.useCloudKit.rawValue, store: GroupUserDefaults.groupDefaults) private var useCloudKit = false
|
||||||
@AppStorage(UserDefaultsStore.Keys.deleteEnable.rawValue, store: GroupUserDefaults.groupDefaults) private var deleteEnabled = true
|
@AppStorage(UserDefaultsStore.Keys.deleteEnable.rawValue, store: GroupUserDefaults.groupDefaults) private var deleteEnabled = true
|
||||||
@AppStorage(UserDefaultsStore.Keys.theme.rawValue, store: GroupUserDefaults.groupDefaults) private var theme: Theme = .system
|
@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 = .black
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
ScrollView {
|
ScrollView {
|
||||||
VStack {
|
VStack {
|
||||||
@@ -86,13 +87,13 @@ struct SettingsView: View {
|
|||||||
}
|
}
|
||||||
}, label: {
|
}, label: {
|
||||||
Text(String(localized: "settings_view_special_thanks_to_title"))
|
Text(String(localized: "settings_view_special_thanks_to_title"))
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
})
|
})
|
||||||
.padding()
|
.padding()
|
||||||
|
|
||||||
if showSpecialThanks {
|
if showSpecialThanks {
|
||||||
Text(String(localized: "settings_view_special_thanks_to_body"))
|
Text(String(localized: "settings_view_special_thanks_to_body"))
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
.padding()
|
.padding()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -108,7 +109,7 @@ struct SettingsView: View {
|
|||||||
PersistenceController.shared.populateTestData()
|
PersistenceController.shared.populateTestData()
|
||||||
}, label: {
|
}, label: {
|
||||||
Text("Add test data")
|
Text("Add test data")
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
})
|
})
|
||||||
.padding()
|
.padding()
|
||||||
}
|
}
|
||||||
@@ -123,7 +124,7 @@ struct SettingsView: View {
|
|||||||
PersistenceController.shared.clearDB()
|
PersistenceController.shared.clearDB()
|
||||||
}, label: {
|
}, label: {
|
||||||
Text("Clear DB")
|
Text("Clear DB")
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
})
|
})
|
||||||
.padding()
|
.padding()
|
||||||
}
|
}
|
||||||
@@ -141,12 +142,12 @@ struct SettingsView: View {
|
|||||||
}
|
}
|
||||||
}, label: {
|
}, label: {
|
||||||
Text(String(localized: "settings_view_why_bg_mode_title"))
|
Text(String(localized: "settings_view_why_bg_mode_title"))
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
})
|
})
|
||||||
.padding()
|
.padding()
|
||||||
if showWhyBGMode {
|
if showWhyBGMode {
|
||||||
Text(String(localized: "settings_view_why_bg_mode_body"))
|
Text(String(localized: "settings_view_why_bg_mode_body"))
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
.padding()
|
.padding()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -166,7 +167,7 @@ struct SettingsView: View {
|
|||||||
showOnboarding.toggle()
|
showOnboarding.toggle()
|
||||||
}, label: {
|
}, label: {
|
||||||
Text(String(localized: "settings_view_show_onboarding"))
|
Text(String(localized: "settings_view_show_onboarding"))
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
})
|
})
|
||||||
.padding()
|
.padding()
|
||||||
}
|
}
|
||||||
@@ -180,11 +181,11 @@ struct SettingsView: View {
|
|||||||
VStack {
|
VStack {
|
||||||
Toggle(isOn: $useCloudKit, label: {
|
Toggle(isOn: $useCloudKit, label: {
|
||||||
Text(String(localized: "settings_use_cloudkit_title"))
|
Text(String(localized: "settings_use_cloudkit_title"))
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
})
|
})
|
||||||
.padding()
|
.padding()
|
||||||
Text(String(localized: "settings_use_cloudkit_body"))
|
Text(String(localized: "settings_use_cloudkit_body"))
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
}
|
}
|
||||||
.padding(.bottom)
|
.padding(.bottom)
|
||||||
}
|
}
|
||||||
@@ -199,7 +200,7 @@ struct SettingsView: View {
|
|||||||
Image(systemName: syncMonitor.syncStateSummary.symbolName)
|
Image(systemName: syncMonitor.syncStateSummary.symbolName)
|
||||||
.foregroundColor(syncMonitor.syncStateSummary.symbolColor)
|
.foregroundColor(syncMonitor.syncStateSummary.symbolColor)
|
||||||
Text( syncMonitor.syncStateSummary.isBroken ? "cloudkit is broken" : "cloudkit is good")
|
Text( syncMonitor.syncStateSummary.isBroken ? "cloudkit is broken" : "cloudkit is good")
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
}
|
}
|
||||||
.padding()
|
.padding()
|
||||||
}
|
}
|
||||||
@@ -213,7 +214,7 @@ struct SettingsView: View {
|
|||||||
VStack {
|
VStack {
|
||||||
Toggle(String(localized: "settings_use_delete_enable"),
|
Toggle(String(localized: "settings_use_delete_enable"),
|
||||||
isOn: $deleteEnabled)
|
isOn: $deleteEnabled)
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
.padding()
|
.padding()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -344,7 +345,7 @@ struct SettingsView: View {
|
|||||||
|
|
||||||
}, label: {
|
}, label: {
|
||||||
Text("Create random icons")
|
Text("Create random icons")
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
})
|
})
|
||||||
.padding()
|
.padding()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,8 @@ struct WrappedSharable: Hashable, Equatable {
|
|||||||
|
|
||||||
struct SharingListView: View {
|
struct SharingListView: View {
|
||||||
@AppStorage(UserDefaultsStore.Keys.theme.rawValue, store: GroupUserDefaults.groupDefaults) private var theme: Theme = .system
|
@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 = .black
|
||||||
|
|
||||||
class StupidAssObservableObject: ObservableObject {
|
class StupidAssObservableObject: ObservableObject {
|
||||||
@Published var fuckingWrappedShrable: WrappedSharable? = nil
|
@Published var fuckingWrappedShrable: WrappedSharable? = nil
|
||||||
@Published var showFuckingSheet = false
|
@Published var showFuckingSheet = false
|
||||||
@@ -111,7 +112,7 @@ struct SharingListView: View {
|
|||||||
Spacer()
|
Spacer()
|
||||||
Text(item.description)
|
Text(item.description)
|
||||||
.font(.title)
|
.font(.title)
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
.fontWeight(.bold)
|
.fontWeight(.bold)
|
||||||
.frame(minWidth: 0, maxWidth: .infinity)
|
.frame(minWidth: 0, maxWidth: .infinity)
|
||||||
.frame(height: 44)
|
.frame(height: 44)
|
||||||
|
|||||||
@@ -20,7 +20,8 @@ struct AllMoodsTotalTemplate: View, SharingTemplate {
|
|||||||
@Environment(\.presentationMode) var presentationMode
|
@Environment(\.presentationMode) var presentationMode
|
||||||
@AppStorage(UserDefaultsStore.Keys.moodTint.rawValue, store: GroupUserDefaults.groupDefaults) private var moodTint: MoodTints = .Default
|
@AppStorage(UserDefaultsStore.Keys.moodTint.rawValue, store: GroupUserDefaults.groupDefaults) private var moodTint: MoodTints = .Default
|
||||||
@AppStorage(UserDefaultsStore.Keys.theme.rawValue, store: GroupUserDefaults.groupDefaults) private var theme: Theme = .system
|
@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 = .black
|
||||||
|
|
||||||
@StateObject private var shareImage = StupidAssShareObservableObject()
|
@StateObject private var shareImage = StupidAssShareObservableObject()
|
||||||
private var entries = [MoodMetrics]()
|
private var entries = [MoodMetrics]()
|
||||||
init(isPreview: Bool, startDate: Date, endDate: Date, fakeData: Bool) {
|
init(isPreview: Bool, startDate: Date, endDate: Date, fakeData: Bool) {
|
||||||
@@ -126,7 +127,7 @@ struct AllMoodsTotalTemplate: View, SharingTemplate {
|
|||||||
VStack {
|
VStack {
|
||||||
Text(String(format: String(localized: "share_view_all_moods_total_template_title"), totalEntryCount))
|
Text(String(format: String(localized: "share_view_all_moods_total_template_title"), totalEntryCount))
|
||||||
.font(.title)
|
.font(.title)
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
.frame(maxWidth: .infinity, alignment: .center)
|
.frame(maxWidth: .infinity, alignment: .center)
|
||||||
.padding()
|
.padding()
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,8 @@ struct CurrentStreakTemplate: View, SharingTemplate {
|
|||||||
@Environment(\.presentationMode) var presentationMode
|
@Environment(\.presentationMode) var presentationMode
|
||||||
@AppStorage(UserDefaultsStore.Keys.moodTint.rawValue, store: GroupUserDefaults.groupDefaults) private var moodTint: MoodTints = .Default
|
@AppStorage(UserDefaultsStore.Keys.moodTint.rawValue, store: GroupUserDefaults.groupDefaults) private var moodTint: MoodTints = .Default
|
||||||
@AppStorage(UserDefaultsStore.Keys.theme.rawValue, store: GroupUserDefaults.groupDefaults) private var theme: Theme = .system
|
@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 = .black
|
||||||
|
|
||||||
let columns = [
|
let columns = [
|
||||||
GridItem(.flexible(minimum: 5, maximum: .infinity), alignment: .center),
|
GridItem(.flexible(minimum: 5, maximum: .infinity), alignment: .center),
|
||||||
GridItem(.flexible(minimum: 5, maximum: .infinity), alignment: .center),
|
GridItem(.flexible(minimum: 5, maximum: .infinity), alignment: .center),
|
||||||
@@ -76,7 +77,7 @@ struct CurrentStreakTemplate: View, SharingTemplate {
|
|||||||
VStack {
|
VStack {
|
||||||
Text(String(format: String(localized: "share_view_current_streak_template_title")))
|
Text(String(format: String(localized: "share_view_current_streak_template_title")))
|
||||||
.font(.title)
|
.font(.title)
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
.frame(maxWidth: .infinity, alignment: .center)
|
.frame(maxWidth: .infinity, alignment: .center)
|
||||||
.padding(.top)
|
.padding(.top)
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,8 @@ struct LongestStreakTemplate: View, SharingTemplate {
|
|||||||
@Environment(\.presentationMode) var presentationMode
|
@Environment(\.presentationMode) var presentationMode
|
||||||
@AppStorage(UserDefaultsStore.Keys.moodTint.rawValue, store: GroupUserDefaults.groupDefaults) private var moodTint: MoodTints = .Default
|
@AppStorage(UserDefaultsStore.Keys.moodTint.rawValue, store: GroupUserDefaults.groupDefaults) private var moodTint: MoodTints = .Default
|
||||||
@AppStorage(UserDefaultsStore.Keys.theme.rawValue, store: GroupUserDefaults.groupDefaults) private var theme: Theme = .system
|
@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 = .black
|
||||||
|
|
||||||
let columns = [
|
let columns = [
|
||||||
GridItem(.flexible(minimum: 5, maximum: .infinity), alignment: .center),
|
GridItem(.flexible(minimum: 5, maximum: .infinity), alignment: .center),
|
||||||
GridItem(.flexible(minimum: 5, maximum: .infinity), alignment: .center),
|
GridItem(.flexible(minimum: 5, maximum: .infinity), alignment: .center),
|
||||||
@@ -115,7 +116,7 @@ struct LongestStreakTemplate: View, SharingTemplate {
|
|||||||
VStack {
|
VStack {
|
||||||
Text(String(format: String(localized: "share_view_longest_streak_template_title"), self.selectedMood.strValue))
|
Text(String(format: String(localized: "share_view_longest_streak_template_title"), self.selectedMood.strValue))
|
||||||
.font(.title)
|
.font(.title)
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
.frame(maxWidth: .infinity, alignment: .center)
|
.frame(maxWidth: .infinity, alignment: .center)
|
||||||
.padding()
|
.padding()
|
||||||
|
|
||||||
@@ -127,19 +128,19 @@ struct LongestStreakTemplate: View, SharingTemplate {
|
|||||||
VStack {
|
VStack {
|
||||||
Text(self.moodEntries.first?.forDate ?? Date(), formatter: itemFormatter)
|
Text(self.moodEntries.first?.forDate ?? Date(), formatter: itemFormatter)
|
||||||
.font(.title)
|
.font(.title)
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
.frame(maxWidth: .infinity, alignment: .center)
|
.frame(maxWidth: .infinity, alignment: .center)
|
||||||
.padding(.top, 1)
|
.padding(.top, 1)
|
||||||
|
|
||||||
Text("-")
|
Text("-")
|
||||||
.font(.title)
|
.font(.title)
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
.frame(maxWidth: .infinity, alignment: .center)
|
.frame(maxWidth: .infinity, alignment: .center)
|
||||||
.padding(.top, 1)
|
.padding(.top, 1)
|
||||||
|
|
||||||
Text(self.moodEntries.last?.forDate ?? Date(), formatter: itemFormatter)
|
Text(self.moodEntries.last?.forDate ?? Date(), formatter: itemFormatter)
|
||||||
.font(.title)
|
.font(.title)
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
.frame(maxWidth: .infinity, alignment: .center)
|
.frame(maxWidth: .infinity, alignment: .center)
|
||||||
.padding(.top, 1)
|
.padding(.top, 1)
|
||||||
}
|
}
|
||||||
@@ -168,7 +169,7 @@ struct LongestStreakTemplate: View, SharingTemplate {
|
|||||||
}, label: {
|
}, label: {
|
||||||
Text("Pick Mood")
|
Text("Pick Mood")
|
||||||
.font(.title)
|
.font(.title)
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
.padding()
|
.padding()
|
||||||
})
|
})
|
||||||
.frame(maxWidth: .infinity, alignment: .center)
|
.frame(maxWidth: .infinity, alignment: .center)
|
||||||
|
|||||||
@@ -25,7 +25,8 @@ struct MonthTotalTemplate: View, SharingTemplate {
|
|||||||
@Environment(\.presentationMode) var presentationMode
|
@Environment(\.presentationMode) var presentationMode
|
||||||
@AppStorage(UserDefaultsStore.Keys.moodTint.rawValue, store: GroupUserDefaults.groupDefaults) private var moodTint: MoodTints = .Default
|
@AppStorage(UserDefaultsStore.Keys.moodTint.rawValue, store: GroupUserDefaults.groupDefaults) private var moodTint: MoodTints = .Default
|
||||||
@AppStorage(UserDefaultsStore.Keys.theme.rawValue, store: GroupUserDefaults.groupDefaults) private var theme: Theme = .system
|
@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 = .black
|
||||||
|
|
||||||
private var moodMetrics = [MoodMetrics]()
|
private var moodMetrics = [MoodMetrics]()
|
||||||
private var moodEntries = [MoodEntry]()
|
private var moodEntries = [MoodEntry]()
|
||||||
|
|
||||||
@@ -104,7 +105,7 @@ struct MonthTotalTemplate: View, SharingTemplate {
|
|||||||
VStack {
|
VStack {
|
||||||
Text(String(format: String(localized: "share_view_month_moods_total_template_title"), Random.monthName(fromMonthInt: month), moodEntries.count))
|
Text(String(format: String(localized: "share_view_month_moods_total_template_title"), Random.monthName(fromMonthInt: month), moodEntries.count))
|
||||||
.font(.title)
|
.font(.title)
|
||||||
.foregroundColor(theme.currentTheme.labelColor)
|
.foregroundColor(textColor)
|
||||||
.frame(maxWidth: .infinity, alignment: .center)
|
.frame(maxWidth: .infinity, alignment: .center)
|
||||||
.padding()
|
.padding()
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,8 @@ struct SwitchableView: View {
|
|||||||
|
|
||||||
@AppStorage(UserDefaultsStore.Keys.theme.rawValue, store: GroupUserDefaults.groupDefaults) private var theme: Theme = .system
|
@AppStorage(UserDefaultsStore.Keys.theme.rawValue, store: GroupUserDefaults.groupDefaults) private var theme: Theme = .system
|
||||||
@AppStorage(UserDefaultsStore.Keys.moodTint.rawValue, store: GroupUserDefaults.groupDefaults) private var moodTint: MoodTints = .Default
|
@AppStorage(UserDefaultsStore.Keys.moodTint.rawValue, store: GroupUserDefaults.groupDefaults) private var moodTint: MoodTints = .Default
|
||||||
|
@AppStorage(UserDefaultsStore.Keys.textColor.rawValue, store: GroupUserDefaults.groupDefaults) private var textColor: Color = .white
|
||||||
|
|
||||||
// store a value that gets changed when user updates custom colors to update the view since the moodTint doesn't change
|
// store a value that gets changed when user updates custom colors to update the view since the moodTint doesn't change
|
||||||
@AppStorage(UserDefaultsStore.Keys.customMoodTintUpdateNumber.rawValue, store: GroupUserDefaults.groupDefaults) private var customMoodTintUpdateNumber: Int = 0
|
@AppStorage(UserDefaultsStore.Keys.customMoodTintUpdateNumber.rawValue, store: GroupUserDefaults.groupDefaults) private var customMoodTintUpdateNumber: Int = 0
|
||||||
|
|
||||||
@@ -52,7 +53,7 @@ struct SwitchableView: View {
|
|||||||
moodTint.color(forMood: .average),
|
moodTint.color(forMood: .average),
|
||||||
moodTint.color(forMood: .bad),
|
moodTint.color(forMood: .bad),
|
||||||
moodTint.color(forMood: .horrible)
|
moodTint.color(forMood: .horrible)
|
||||||
])
|
], textColor: textColor)
|
||||||
.padding([.leading, .trailing], -15)
|
.padding([.leading, .trailing], -15)
|
||||||
.padding([.top, .bottom], 8)
|
.padding([.top, .bottom], 8)
|
||||||
.allowsHitTesting(false)
|
.allowsHitTesting(false)
|
||||||
|
|||||||
@@ -76,6 +76,8 @@
|
|||||||
"customize_view_custom_widget_title" = "Custom Widgets";
|
"customize_view_custom_widget_title" = "Custom Widgets";
|
||||||
"customize_view_background_title" = "Pick a theme";
|
"customize_view_background_title" = "Pick a theme";
|
||||||
"customize_view_view_change_icon" = "Change App Icon";
|
"customize_view_view_change_icon" = "Change App Icon";
|
||||||
|
"customize_view_view_text_color" = "Text Color";
|
||||||
|
"customize_view_view_example_row" = "Example row";
|
||||||
|
|
||||||
"create_widget_view_left_eye" = "Left Eye";
|
"create_widget_view_left_eye" = "Left Eye";
|
||||||
"create_widget_view_right_eye" = "Right Eye";
|
"create_widget_view_right_eye" = "Right Eye";
|
||||||
|
|||||||
Reference in New Issue
Block a user