From f2cda7fcadaf71b0a1cbb98510ef63259a6dc7a6 Mon Sep 17 00:00:00 2001 From: Stuart Breckenridge Date: Wed, 30 Nov 2022 21:37:39 +0800 Subject: [PATCH] More settings work --- NetNewsWire.xcodeproj/project.pbxproj | 54 +++++--- .../ExtensionPointManager.swift | 2 +- .../AccountInspectorViewController.swift | 20 +++ .../ExtensionInspectorViewController.swift | 21 ++++ .../AccountsManagementView.swift | 119 ------------------ .../EnableExtensionPointViewController.swift | 19 +++ iOS/Settings/Settings.storyboard | 6 +- .../AccountsManagementView.swift | 106 ++++++++++++++++ .../ExtensionsManagementView.swift | 59 +++++++++ .../ColorPaletteSelectorView.swift | 0 .../Appearance}/DisplayAndBehaviorsView.swift | 0 .../General}/SettingsRows.swift | 54 +------- .../General}/SettingsView.swift | 2 +- .../General}/SettingsViewModel.swift | 1 - iOS/Settings/{ => Views/Help}/AboutView.swift | 0 .../Help}/SettingsHelpSheets.swift | 2 +- .../NewArticleNotificationsView.swift | 1 + 17 files changed, 275 insertions(+), 191 deletions(-) delete mode 100644 iOS/Settings/Account Management Views/AccountsManagementView.swift create mode 100644 iOS/Settings/Views/Account and Extensions/AccountsManagementView.swift create mode 100644 iOS/Settings/Views/Account and Extensions/ExtensionsManagementView.swift rename iOS/Settings/{Appearance Views => Views/Appearance}/ColorPaletteSelectorView.swift (100%) rename iOS/Settings/{Appearance Views => Views/Appearance}/DisplayAndBehaviorsView.swift (100%) rename iOS/Settings/{Settings View => Views/General}/SettingsRows.swift (85%) rename iOS/Settings/{Settings View => Views/General}/SettingsView.swift (99%) rename iOS/Settings/{Settings View => Views/General}/SettingsViewModel.swift (99%) rename iOS/Settings/{ => Views/Help}/AboutView.swift (100%) rename iOS/Settings/{Settings View => Views/Help}/SettingsHelpSheets.swift (90%) rename iOS/Settings/{New Article Notifications Views => Views/New Article Notifications}/NewArticleNotificationsView.swift (96%) diff --git a/NetNewsWire.xcodeproj/project.pbxproj b/NetNewsWire.xcodeproj/project.pbxproj index f729266ac..ee4d676ea 100644 --- a/NetNewsWire.xcodeproj/project.pbxproj +++ b/NetNewsWire.xcodeproj/project.pbxproj @@ -857,6 +857,7 @@ DF59F072292085B800ACD33D /* ColorPaletteSelectorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF59F071292085B800ACD33D /* ColorPaletteSelectorView.swift */; }; DF59F0742920DB5100ACD33D /* AccountsManagementView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF59F0732920DB5100ACD33D /* AccountsManagementView.swift */; }; DF5AD10128D6922200CA3BF7 /* SmartFeedSummaryWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1768144D2564BCE000D98635 /* SmartFeedSummaryWidget.swift */; }; + DF766FED29377FD9006FBBE2 /* ExtensionsManagementView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF766FEC29377FD9006FBBE2 /* ExtensionsManagementView.swift */; }; DF790D6228E990A900455FC7 /* AboutData.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF790D6128E990A900455FC7 /* AboutData.swift */; }; DFC14F0F28EA55BD00F6EE86 /* AboutWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFC14F0E28EA55BD00F6EE86 /* AboutWindowController.swift */; }; DFC14F1228EA5DC500F6EE86 /* AboutData.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF790D6128E990A900455FC7 /* AboutData.swift */; }; @@ -1612,6 +1613,7 @@ DF394EFF29357A180081EB6E /* NewArticleNotificationsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewArticleNotificationsView.swift; sourceTree = ""; }; DF59F071292085B800ACD33D /* ColorPaletteSelectorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ColorPaletteSelectorView.swift; sourceTree = ""; }; DF59F0732920DB5100ACD33D /* AccountsManagementView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountsManagementView.swift; sourceTree = ""; }; + DF766FEC29377FD9006FBBE2 /* ExtensionsManagementView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionsManagementView.swift; sourceTree = ""; }; DF790D6128E990A900455FC7 /* AboutData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutData.swift; sourceTree = ""; }; DFC14F0E28EA55BD00F6EE86 /* AboutWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutWindowController.swift; sourceTree = ""; }; DFC14F1428EB177000F6EE86 /* AboutNetNewsWireView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutNetNewsWireView.swift; sourceTree = ""; }; @@ -2014,7 +2016,7 @@ 5183CCEB227117C70010922C /* Settings */ = { isa = PBXGroup; children = ( - DFFC4E7328E95C01006B82AF /* AboutView.swift */, + DFD406F8291FB5D500C02962 /* Views */, 51A16992235E10D600EB091F /* AddAccountViewController.swift */, 519ED455244828C3007F8E94 /* AddExtensionPointViewController.swift */, 5137C2E926F63AE6009EFEDB /* ArticleThemeImporter.swift */, @@ -2022,10 +2024,6 @@ 516244E2241E19F000B61C47 /* ColorPaletteTableViewController.swift */, 519ED47924482AEB007F8E94 /* EnableExtensionPointViewController.swift */, 51A16990235E10D600EB091F /* Settings.storyboard */, - DFD406F8291FB5D500C02962 /* Settings View */, - DFD406FD291FDBD900C02962 /* Appearance Views */, - DF59F0752920E42000ACD33D /* Account Management Views */, - DF3630E92936038400326FB8 /* New Article Notifications Views */, 516A09382360A2AE00EAE89B /* SettingsComboTableViewCell.swift */, 516A091D23609A3600EAE89B /* SettingsComboTableViewCell.xib */, 516A093A2360A4A000EAE89B /* SettingsTableViewCell.xib */, @@ -2900,20 +2898,40 @@ path = Scriptability; sourceTree = ""; }; - DF3630E92936038400326FB8 /* New Article Notifications Views */ = { + DF3630E92936038400326FB8 /* New Article Notifications */ = { isa = PBXGroup; children = ( DF394EFF29357A180081EB6E /* NewArticleNotificationsView.swift */, ); - path = "New Article Notifications Views"; + path = "New Article Notifications"; sourceTree = ""; }; - DF59F0752920E42000ACD33D /* Account Management Views */ = { + DF59F0752920E42000ACD33D /* Account and Extensions */ = { isa = PBXGroup; children = ( DF59F0732920DB5100ACD33D /* AccountsManagementView.swift */, + DF766FEC29377FD9006FBBE2 /* ExtensionsManagementView.swift */, ); - path = "Account Management Views"; + path = "Account and Extensions"; + sourceTree = ""; + }; + DF766FEA2936337A006FBBE2 /* Help */ = { + isa = PBXGroup; + children = ( + DFFC4E7328E95C01006B82AF /* AboutView.swift */, + DFD406FB291FB63B00C02962 /* SettingsHelpSheets.swift */, + ); + path = Help; + sourceTree = ""; + }; + DF766FEB2936344D006FBBE2 /* General */ = { + isa = PBXGroup; + children = ( + DFD406F4291F79C900C02962 /* SettingsView.swift */, + DF3630EE293618A900326FB8 /* SettingsViewModel.swift */, + DFD406F9291FB5E400C02962 /* SettingsRows.swift */, + ); + path = General; sourceTree = ""; }; DFC14F0928EA51AB00F6EE86 /* About */ = { @@ -2926,24 +2944,25 @@ path = About; sourceTree = ""; }; - DFD406F8291FB5D500C02962 /* Settings View */ = { + DFD406F8291FB5D500C02962 /* Views */ = { isa = PBXGroup; children = ( - DFD406F4291F79C900C02962 /* SettingsView.swift */, - DF3630EE293618A900326FB8 /* SettingsViewModel.swift */, - DFD406F9291FB5E400C02962 /* SettingsRows.swift */, - DFD406FB291FB63B00C02962 /* SettingsHelpSheets.swift */, + DF766FEB2936344D006FBBE2 /* General */, + DFD406FD291FDBD900C02962 /* Appearance */, + DF59F0752920E42000ACD33D /* Account and Extensions */, + DF3630E92936038400326FB8 /* New Article Notifications */, + DF766FEA2936337A006FBBE2 /* Help */, ); - path = "Settings View"; + path = Views; sourceTree = ""; }; - DFD406FD291FDBD900C02962 /* Appearance Views */ = { + DFD406FD291FDBD900C02962 /* Appearance */ = { isa = PBXGroup; children = ( DFD406FE291FDC0C00C02962 /* DisplayAndBehaviorsView.swift */, DF59F071292085B800ACD33D /* ColorPaletteSelectorView.swift */, ); - path = "Appearance Views"; + path = Appearance; sourceTree = ""; }; /* End PBXGroup section */ @@ -4217,6 +4236,7 @@ 512AF9C2236ED52C0066F8BE /* ImageHeaderView.swift in Sources */, 512392C124E33A3C00F11704 /* RedditSelectTypeTableViewController.swift in Sources */, 515A5181243E90260089E588 /* ExtensionPointIdentifer.swift in Sources */, + DF766FED29377FD9006FBBE2 /* ExtensionsManagementView.swift in Sources */, 51C45290226509C100C03939 /* PseudoFeed.swift in Sources */, 512392C624E3451400F11704 /* TwitterSelectAccountTableViewController.swift in Sources */, 51C452A922650DC600C03939 /* ArticleRenderer.swift in Sources */, diff --git a/Shared/ExtensionPoints/ExtensionPointManager.swift b/Shared/ExtensionPoints/ExtensionPointManager.swift index bf8cb0402..bd8a173cb 100644 --- a/Shared/ExtensionPoints/ExtensionPointManager.swift +++ b/Shared/ExtensionPoints/ExtensionPointManager.swift @@ -38,7 +38,7 @@ final class ExtensionPointManager: FeedProviderManagerDelegate { let activeExtensionPointTypes = activeExtensionPoints.keys.compactMap({ ObjectIdentifier($0.extensionPointType) }) var available = [ExtensionPoint.Type]() for possibleExtensionPointType in possibleExtensionPointTypes { - if !(AppDefaults.shared.isDeveloperBuild && possibleExtensionPointType.isDeveloperBuildRestricted) { + if (AppDefaults.shared.isDeveloperBuild && possibleExtensionPointType.isDeveloperBuildRestricted) { if possibleExtensionPointType.isSinglton { if !activeExtensionPointTypes.contains(ObjectIdentifier(possibleExtensionPointType)) { available.append(possibleExtensionPointType) diff --git a/iOS/Inspector/AccountInspectorViewController.swift b/iOS/Inspector/AccountInspectorViewController.swift index bcb707f4b..747dfd139 100644 --- a/iOS/Inspector/AccountInspectorViewController.swift +++ b/iOS/Inspector/AccountInspectorViewController.swift @@ -9,6 +9,26 @@ import UIKit import SafariServices import Account +import SwiftUI + +struct AccountInspectorWrapper: UIViewControllerRepresentable { + + var account: Account + + func makeUIViewController(context: Context) -> AccountInspectorViewController { + let controller = UIStoryboard.inspector.instantiateViewController(withIdentifier: "AccountInspectorViewController") as! AccountInspectorViewController + controller.account = account + return controller + } + + func updateUIViewController(_ uiViewController: AccountInspectorViewController, context: Context) { + // + } + + typealias UIViewControllerType = AccountInspectorViewController + +} + class AccountInspectorViewController: UITableViewController { diff --git a/iOS/Inspector/ExtensionInspectorViewController.swift b/iOS/Inspector/ExtensionInspectorViewController.swift index 79c2cc43c..74b885890 100644 --- a/iOS/Inspector/ExtensionInspectorViewController.swift +++ b/iOS/Inspector/ExtensionInspectorViewController.swift @@ -7,6 +7,27 @@ // import UIKit +import SwiftUI + +struct ExtensionPointInspectorWrapper: UIViewControllerRepresentable { + + var extensionPoint: ExtensionPoint? + + func makeUIViewController(context: Context) -> ExtensionPointInspectorViewController { + let controller = UIStoryboard.inspector.instantiateViewController(withIdentifier: "ExtensionPointInspectorViewController") as! ExtensionPointInspectorViewController + controller.extensionPoint = extensionPoint + return controller + } + + func updateUIViewController(_ uiViewController: ExtensionPointInspectorViewController, context: Context) { + // + } + + typealias UIViewControllerType = ExtensionPointInspectorViewController + + +} + class ExtensionPointInspectorViewController: UITableViewController { diff --git a/iOS/Settings/Account Management Views/AccountsManagementView.swift b/iOS/Settings/Account Management Views/AccountsManagementView.swift deleted file mode 100644 index f46d12f49..000000000 --- a/iOS/Settings/Account Management Views/AccountsManagementView.swift +++ /dev/null @@ -1,119 +0,0 @@ -// -// AccountsManagementView.swift -// NetNewsWire-iOS -// -// Created by Stuart Breckenridge on 13/11/2022. -// Copyright © 2022 Ranchero Software. All rights reserved. -// - -import SwiftUI -import Account -import Combine - -struct AccountsManagementView: View { - - @State private var showAddAccountSheet: Bool = false - var cancellables = Set() - @State private var sortedAccounts = [Account]() - - var body: some View { - List { - ForEach(sortedAccounts, id: \.self) { account in - Section(header: Text("")) { - accountRow(account) - } - } - } - .navigationTitle(Text("Accounts")) - .navigationBarTitleDisplayMode(.inline) - .tint(Color(uiColor: AppAssets.primaryAccentColor)) - .toolbar { - ToolbarItem(placement: .navigationBarTrailing) { - Button { - // - } label: { - Image(systemName: "plus") - } - } - } - .onReceive(NotificationCenter.default.publisher(for: .AccountStateDidChange)) { _ in - sortedAccounts = AccountManager.shared.sortedAccounts - } - .onAppear { - sortedAccounts = AccountManager.shared.sortedAccounts - } - - } - - var addAccountButton: some View { - HStack { - Spacer() - Text("Add Account") - .padding(8) - .overlay(NavigationLink { AddAccountViewControllerRepresentable() } label: { EmptyView() }.opacity(0.0)) - .background(Color(uiColor: AppAssets.primaryAccentColor)) - .clipShape(RoundedRectangle(cornerRadius: 6)) - Spacer() - } - } - - func accountFooterText(_ account: Account) -> some View { - if account.type == .cloudKit { - return Text("iCloud Syncing Limitations & Solutions") - } else { - return Text("") - } - } - - func accountRow(_ account: Account) -> some View { - VStack(alignment: .leading) { - HStack { - Image(uiImage: account.smallIcon!.image) - .resizable() - .frame(width: 25, height: 25) - TextField(text: Binding(get: { account.nameForDisplay }, set: { account.name = $0 })) { - Text(account.nameForDisplay) - }.foregroundColor(.secondary) - Spacer() - Toggle(isOn: Binding( - get: { account.isActive }, - set: { account.isActive = $0 } - )) { - Text("") - } - } - if account.type != .onMyMac { - Divider() - .edgesIgnoringSafeArea(.all) - HStack { - Spacer() - Button { - // Remove account - } label: { - Text("Remove Account") - .foregroundColor(.red) - .bold() - } - - Spacer() - } - } - } - - } - - var inactiveFooterText: some View { - if AccountManager.shared.sortedAccounts.filter({ $0.isActive == false }).count == 0 { - return Text("There are no inactive accounts.") - } else { - return Text("") - } - } - -} - -struct AddAccountView_Previews: PreviewProvider { - static var previews: some View { - AccountsManagementView() - } -} diff --git a/iOS/Settings/EnableExtensionPointViewController.swift b/iOS/Settings/EnableExtensionPointViewController.swift index 64ecc1a72..3412dfaca 100644 --- a/iOS/Settings/EnableExtensionPointViewController.swift +++ b/iOS/Settings/EnableExtensionPointViewController.swift @@ -11,6 +11,25 @@ import AuthenticationServices import Account import OAuthSwift import Secrets +import SwiftUI + +struct EnableExtensionPointViewWrapper: UIViewControllerRepresentable { + + var extensionPoint: ExtensionPoint.Type? + + func makeUIViewController(context: Context) -> EnableExtensionPointViewController { + let controller = UIStoryboard.settings.instantiateViewController(withIdentifier: "EnableExtensionPointViewController") as! EnableExtensionPointViewController + controller.extensionPointType = extensionPoint + return controller + } + + func updateUIViewController(_ uiViewController: EnableExtensionPointViewController, context: Context) { + + } + + typealias UIViewControllerType = EnableExtensionPointViewController + +} class EnableExtensionPointViewController: UITableViewController { diff --git a/iOS/Settings/Settings.storyboard b/iOS/Settings/Settings.storyboard index ac14658e4..a8cf0758a 100644 --- a/iOS/Settings/Settings.storyboard +++ b/iOS/Settings/Settings.storyboard @@ -385,10 +385,10 @@ - + - +