diff --git a/damus.xcodeproj/project.pbxproj b/damus.xcodeproj/project.pbxproj index c2399f19..afb06c81 100644 --- a/damus.xcodeproj/project.pbxproj +++ b/damus.xcodeproj/project.pbxproj @@ -293,6 +293,7 @@ 501F8C5A29FF70F5001AFC1D /* ProfileDatabase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 501F8C5929FF70F5001AFC1D /* ProfileDatabase.swift */; }; 501F8C802A0220E1001AFC1D /* KeychainStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 501F8C7F2A0220E1001AFC1D /* KeychainStorage.swift */; }; 501F8C822A0224EB001AFC1D /* KeychainStorageTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 501F8C812A0224EB001AFC1D /* KeychainStorageTests.swift */; }; + 5053ACA72A56DF3B00851AE3 /* DeveloperSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5053ACA62A56DF3B00851AE3 /* DeveloperSettingsView.swift */; }; 50A50A8D29A09E1C00C01BE7 /* RequestTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50A50A8C29A09E1C00C01BE7 /* RequestTests.swift */; }; 50B5685329F97CB400A23243 /* CredentialHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50B5685229F97CB400A23243 /* CredentialHandler.swift */; }; 50DA11262A16A23F00236234 /* Launch.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 50DA11252A16A23F00236234 /* Launch.storyboard */; }; @@ -762,6 +763,7 @@ 501F8C5929FF70F5001AFC1D /* ProfileDatabase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileDatabase.swift; sourceTree = ""; }; 501F8C7F2A0220E1001AFC1D /* KeychainStorage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeychainStorage.swift; sourceTree = ""; }; 501F8C812A0224EB001AFC1D /* KeychainStorageTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeychainStorageTests.swift; sourceTree = ""; }; + 5053ACA62A56DF3B00851AE3 /* DeveloperSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeveloperSettingsView.swift; sourceTree = ""; }; 50A50A8C29A09E1C00C01BE7 /* RequestTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestTests.swift; sourceTree = ""; }; 50B5685229F97CB400A23243 /* CredentialHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CredentialHandler.swift; sourceTree = ""; }; 50DA11252A16A23F00236234 /* Launch.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Launch.storyboard; sourceTree = ""; }; @@ -1012,6 +1014,7 @@ 4C1A9A2429DDDF2600516EAC /* ZapSettingsView.swift */, 4C1A9A2629DDE31900516EAC /* TranslationSettingsView.swift */, E4FA1C022A24BB7F00482697 /* SearchSettingsView.swift */, + 5053ACA62A56DF3B00851AE3 /* DeveloperSettingsView.swift */, ); path = Settings; sourceTree = ""; @@ -1906,6 +1909,7 @@ 4C363A8828236948006E126D /* BlocksView.swift in Sources */, 4C06670628FCB08600038D2A /* ImageCarousel.swift in Sources */, 3A23838E2A297DD200E5AA2E /* ZapButtonModel.swift in Sources */, + 5053ACA72A56DF3B00851AE3 /* DeveloperSettingsView.swift in Sources */, F79C7FAD29D5E9620000F946 /* EditProfilePictureControl.swift in Sources */, 4C9F18E229AA9B6C008C55EC /* CustomizeZapView.swift in Sources */, 4C2859602A12A2BE004746F7 /* SupporterBadge.swift in Sources */, diff --git a/damus/Models/UserSettingsStore.swift b/damus/Models/UserSettingsStore.swift index 820ec7c4..c57ec8a8 100644 --- a/damus/Models/UserSettingsStore.swift +++ b/damus/Models/UserSettingsStore.swift @@ -157,6 +157,9 @@ class UserSettingsStore: ObservableObject { @Setting(key: "donation_percent", default_value: 0) var donation_percent: Int + + @Setting(key: "developer_mode", default_value: false) + var developer_mode: Bool // Helper for inverse of disable_animation. // disable_animation was introduced as a setting first, but it's more natural for the settings UI to show the inverse. diff --git a/damus/Util/Router.swift b/damus/Util/Router.swift index 66d0fa7b..d471c379 100644 --- a/damus/Util/Router.swift +++ b/damus/Util/Router.swift @@ -28,6 +28,7 @@ enum Route: Hashable { case ZapSettings(settings: UserSettingsStore) case TranslationSettings(settings: UserSettingsStore) case SearchSettings(settings: UserSettingsStore) + case DeveloperSettings(settings: UserSettingsStore) case Thread(thread: ThreadModel) case Reposts(reposts: RepostsModel) case Reactions(reactions: ReactionsModel) @@ -82,6 +83,8 @@ enum Route: Hashable { TranslationSettingsView(settings: settings) case .SearchSettings(let settings): SearchSettingsView(settings: settings) + case .DeveloperSettings(let settings): + DeveloperSettingsView(settings: settings) case .Thread(let thread): ThreadView(state: damusState, thread: thread) case .Reposts(let reposts): @@ -230,6 +233,8 @@ enum Route: Hashable { hasher.combine("translationSettings") case .SearchSettings(_): hasher.combine("searchSettings") + case .DeveloperSettings: + hasher.combine("developerSettings") case .Thread(let threadModel): hasher.combine("thread") hasher.combine(threadModel.event.id) diff --git a/damus/Views/ConfigView.swift b/damus/Views/ConfigView.swift index 90fcdf74..4c673bbe 100644 --- a/damus/Views/ConfigView.swift +++ b/damus/Views/ConfigView.swift @@ -59,6 +59,10 @@ struct ConfigView: View { NavigationLink(value: Route.TranslationSettings(settings: settings)) { IconLabel(NSLocalizedString("Translation", comment: "Section header for text and appearance settings"), img_name: "globe", color: .green) } + + NavigationLink(value: Route.DeveloperSettings(settings: settings)) { + IconLabel(NSLocalizedString("Developer", comment: "Section header for developer settings"), img_name: "magic-stick2.fill", color: .black) + } } Section(NSLocalizedString("Sign Out", comment: "Section title for signing out")) { diff --git a/damus/Views/Settings/DeveloperSettingsView.swift b/damus/Views/Settings/DeveloperSettingsView.swift new file mode 100644 index 00000000..175d4222 --- /dev/null +++ b/damus/Views/Settings/DeveloperSettingsView.swift @@ -0,0 +1,23 @@ +// +// DeveloperSettingsView.swift +// damus +// +// Created by Bryan Montz on 7/6/23. +// + +import Foundation +import SwiftUI + +struct DeveloperSettingsView: View { + @ObservedObject var settings: UserSettingsStore + + var body: some View { + Form { + Section { + Toggle(NSLocalizedString("Developer Mode", comment: "Setting to enable developer mode"), isOn: $settings.developer_mode) + .toggleStyle(.switch) + } + } + .navigationTitle(NSLocalizedString("Developer", comment: "Navigation title for developer settings")) + } +}