diff --git a/LinkLiar.xcodeproj/project.pbxproj b/LinkLiar.xcodeproj/project.pbxproj index 7bffb4f..5bb25f5 100644 --- a/LinkLiar.xcodeproj/project.pbxproj +++ b/LinkLiar.xcodeproj/project.pbxproj @@ -421,9 +421,9 @@ children = ( C2456FB22B3AFB27007D7AEA /* WelcomeView.swift */, C24570242B41F996007D7AEA /* CommunityView.swift */, + C24570232B41F996007D7AEA /* FaqView.swift */, C2456FB42B3AFB8F007D7AEA /* PreferencesView.swift */, C2456FAA2B3AF888007D7AEA /* TroubleshootView.swift */, - C24570232B41F996007D7AEA /* FaqView.swift */, C24570222B41F996007D7AEA /* UninstallView.swift */, C2456FB82B3B003E007D7AEA /* VendorsView.swift */, C2456FAC2B3AF976007D7AEA /* FallbackPolicyView.swift */, diff --git a/LinkLiar/Views/Settings/Sections/CommunityView.swift b/LinkLiar/Views/Settings/Sections/CommunityView.swift index bd665ca..1ce3fe7 100644 --- a/LinkLiar/Views/Settings/Sections/CommunityView.swift +++ b/LinkLiar/Views/Settings/Sections/CommunityView.swift @@ -9,65 +9,82 @@ extension SettingsView { var body: some View { ScrollView { - Image(systemName: "figure.wave") - .resizable() - .aspectRatio(contentMode: .fill) - .frame(width: 25, height: 22) - .padding(.top, 20) - .padding(.bottom, 12) - Text("Discussions, Suggestions, Questions").font(.title3) + VStack(alignment: .center) { + Image(systemName: "bubble.left.and.bubble.right.fill") + .resizable() + .aspectRatio(contentMode: .fill) + .frame(width: 60, height: 60) + .padding(.bottom, 3) + Text("LinkLiar Community").bold() + }.padding() GroupBox { + VStack { + Image(systemName: "figure.wave") + .resizable() + .aspectRatio(contentMode: .fill) + .frame(width: 20) + Text("Say Hello!").italic() + }.padding(.top) + HStack { VStack(alignment: .leading) { - Text("If you're just wondering about something, would like to give feedback, or pitch an idea for improvement, ") + - Text("please go open ") - Link(Urls.githubDiscussions, destination: Urls.githubDiscussionsURL) - Text("and see if you can start a discussion. ") + - Text("While it can't be guaranteed that you'll get an immediate answer, ") + - Text(" you can be sure that it will be read within hours.") + Text("If you have questions, or ideas for improvement, start a discussion at") + HStack { + Spacer() + Link(Urls.githubDiscussionsURL.host! + Urls.githubDiscussionsURL.path, destination: Urls.githubDiscussionsURL) + Spacer() + }.padding(2) + Text("You may not get an immediate answer, but it will be read within hours.") } Spacer() - } + }.padding(5) }.padding(.bottom) - Image(systemName: "cloud.drizzle.fill") - .resizable() - .aspectRatio(contentMode: .fill) - .frame(width: 35, height: 30) - Text("Bugs, Issues, Problems").font(.title3) - GroupBox { + VStack { + Image(systemName: "cloud.drizzle.fill") + .resizable() + .aspectRatio(contentMode: .fill) + .frame(width: 30) + Text("Report problems").italic() + }.padding(.top) + HStack { VStack(alignment: .leading) { - Text("It can happen that LinkLiar doesn't work properly in certain cases. ") + - Text("If you believe that you encountered a reproducable error, please head over to ") - Link(Urls.githubIssues, destination: Urls.githubIssuesURL) - Text("and see if there already is an issue open for your problem. ") + - Text("If not, please feel free to open a new issue.") + Text("If you encountered a reproducable error, please look for issues at ") + HStack { + Spacer() + Link(Urls.githubIssuesURL.host! + Urls.githubIssuesURL.path, destination: Urls.githubIssuesURL) + Spacer() + }.padding(2) + Text("It can happen that LinkLiar doesn't work properly, so tell us about it. ") } - Spacer() - } + Spacer() + }.padding(5) }.padding(.bottom) - Image(systemName: "swift") - .resizable() - .aspectRatio(contentMode: .fill) - .frame(width: 34, height: 25) - .padding(.top, 12) - Text("Programming").font(.title3) - GroupBox { + VStack { + Image(systemName: "keyboard.fill") + .resizable() + .aspectRatio(contentMode: .fill) + .frame(width: 31) + Text("Learn programming").italic() + }.padding(.top) + HStack { VStack(alignment: .leading) { - Text("Maybe you want to improve your programming skills or just make sure that LinkLiar ") + - Text("is not some fishy malware. You can do so at ") - Link(Urls.githubRepo, destination: Urls.githubRepoURL) - Text("to check out the programming code. ") + - Text("You can fork the repository, make changes to the code, and open pull requests.") + Text("Fork the repository, make changes to code, and open pull requests at") + HStack { + Spacer() + Link(Urls.githubRepoURL.host! + Urls.githubRepoURL.path, destination: Urls.githubRepoURL) + Spacer() + }.padding(2) + Text("It's always hard to get started, so we aim for quality documentation.") } - Spacer() - } + Spacer() + }.padding(5) }.padding(.bottom) }.padding() @@ -77,5 +94,5 @@ extension SettingsView { #Preview { let state = LinkState() - return SettingsView.CommunityView().environment(state) + return SettingsView.CommunityView().environment(state).frame(width: 500) } diff --git a/LinkLiar/Views/Settings/Sections/FaqView.swift b/LinkLiar/Views/Settings/Sections/FaqView.swift index 5828015..05da0d9 100644 --- a/LinkLiar/Views/Settings/Sections/FaqView.swift +++ b/LinkLiar/Views/Settings/Sections/FaqView.swift @@ -8,8 +8,54 @@ extension SettingsView { @Environment(LinkState.self) private var state var body: some View { - VStack { - Text("Preferences...") + ScrollView { + VStack(alignment: .center) { + Image(systemName: "book.fill") + .resizable() + .aspectRatio(contentMode: .fill) + .frame(width: 60, height: 60) + .padding(.bottom, 3) + Text("Frequently Asked Questions").bold() + }.padding() + + GroupBox("LinkLiar does not provide anonymity.", content: { + HStack { + Text(""" + Even with a modified MAC address, the negotiation packets \ + between your network interface and an access point reveal what \ + operating system you use. Not to mention, that your traffic may be inspected to de-anonymize you. + """) + Spacer() + } + }).padding(.bottom) + + GroupBox("LinkLiar does not prevent MAC address leaks.", content: { + HStack { + Text(""" + You original hardware MAC address will be revealed when you cold boot your computer and Wi-Fi \ + is turned on. MAC address modifications do persist when sleeping and waking your computer, however. + """) + Spacer() + } + }).padding(.bottom) + + GroupBox("Changing your MAC address makes you loose your connection.", content: { + HStack { + Text(""" + If you change a MAC address while the interface is connected, you will loose connection. \ + The interface may attempt to reconnect, which normally succeeds within seconds (now using the new MAC address). + """) + Spacer() + } + }).padding(.bottom) + + GroupBox("Wi-Fi needs to be on for MAC modification.", content: { + HStack { + Text("When your Wi-Fi (aka Airport) is turned off, you cannot change its MAC address. You might need to turn it on first.") + Spacer() + } + }).padding(.bottom) + }.padding() } } @@ -17,5 +63,5 @@ extension SettingsView { #Preview { let state = LinkState() - return SettingsView.FaqView().environment(state) + return SettingsView.FaqView().environment(state).frame(width: 500) } diff --git a/LinkTools/Constants/Urls.swift b/LinkTools/Constants/Urls.swift index 270187b..12ffedf 100644 --- a/LinkTools/Constants/Urls.swift +++ b/LinkTools/Constants/Urls.swift @@ -5,7 +5,7 @@ import Foundation class Urls { static let githubRepo = "https://github.com/halo/LinkLiar" - static let githubRepoURL = URL(string: githubIssues)! + static let githubRepoURL = URL(string: githubRepo)! static let githubIssues = "\(githubRepo)/issues" static let githubIssuesURL = URL(string: githubIssues)!