mirror of
https://github.com/Ranchero-Software/NetNewsWire
synced 2025-08-12 06:26:36 +00:00
Adds local add account view
Renames AddAccount view for clarity
This commit is contained in:
@@ -864,12 +864,13 @@
|
||||
DFB3498A294B45AC00BC81AD /* ExtensionInspectorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFB34989294B45AC00BC81AD /* ExtensionInspectorView.swift */; };
|
||||
DFB3498C294B4CA700BC81AD /* WebFeedInspectorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFB3498B294B4CA700BC81AD /* WebFeedInspectorView.swift */; };
|
||||
DFB34993294C0B7400BC81AD /* Account.strings in Resources */ = {isa = PBXBuildFile; fileRef = DFB34992294C0B7400BC81AD /* Account.strings */; };
|
||||
DFB34994294C0E3900BC81AD /* ReaderAPIAccountView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFB34990294C0B2200BC81AD /* ReaderAPIAccountView.swift */; };
|
||||
DFB34994294C0E3900BC81AD /* ReaderAPIAddAccountView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFB34990294C0B2200BC81AD /* ReaderAPIAddAccountView.swift */; };
|
||||
DFB34996294C4DCB00BC81AD /* LocalizedNetNewsWireError.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFB34995294C4DCB00BC81AD /* LocalizedNetNewsWireError.swift */; };
|
||||
DFB34997294C4DCB00BC81AD /* LocalizedNetNewsWireError.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFB34995294C4DCB00BC81AD /* LocalizedNetNewsWireError.swift */; };
|
||||
DFB34999294C4F1D00BC81AD /* Errors.strings in Resources */ = {isa = PBXBuildFile; fileRef = DFB34998294C4F1D00BC81AD /* Errors.strings */; };
|
||||
DFB3499A294C4F1D00BC81AD /* Errors.strings in Resources */ = {isa = PBXBuildFile; fileRef = DFB34998294C4F1D00BC81AD /* Errors.strings */; };
|
||||
DFB3499E294C5D5000BC81AD /* iCloudAccountView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFB3499D294C5D5000BC81AD /* iCloudAccountView.swift */; };
|
||||
DFB3499E294C5D5000BC81AD /* CloudKitAddAccountView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFB3499D294C5D5000BC81AD /* CloudKitAddAccountView.swift */; };
|
||||
DFB349A0294E87B700BC81AD /* LocalAddAccountView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFB3499F294E87B700BC81AD /* LocalAddAccountView.swift */; };
|
||||
DFC14F0F28EA55BD00F6EE86 /* AboutWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFC14F0E28EA55BD00F6EE86 /* AboutWindowController.swift */; };
|
||||
DFC14F1228EA5DC500F6EE86 /* AboutData.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF790D6128E990A900455FC7 /* AboutData.swift */; };
|
||||
DFC14F1328EA677C00F6EE86 /* Bundle-Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51F85BF42273625800C787DC /* Bundle-Extensions.swift */; };
|
||||
@@ -1626,11 +1627,12 @@
|
||||
DFB34987294B447F00BC81AD /* InjectedNavigationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InjectedNavigationView.swift; sourceTree = "<group>"; };
|
||||
DFB34989294B45AC00BC81AD /* ExtensionInspectorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionInspectorView.swift; sourceTree = "<group>"; };
|
||||
DFB3498B294B4CA700BC81AD /* WebFeedInspectorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebFeedInspectorView.swift; sourceTree = "<group>"; };
|
||||
DFB34990294C0B2200BC81AD /* ReaderAPIAccountView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReaderAPIAccountView.swift; sourceTree = "<group>"; };
|
||||
DFB34990294C0B2200BC81AD /* ReaderAPIAddAccountView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReaderAPIAddAccountView.swift; sourceTree = "<group>"; };
|
||||
DFB34992294C0B7400BC81AD /* Account.strings */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; path = Account.strings; sourceTree = "<group>"; };
|
||||
DFB34995294C4DCB00BC81AD /* LocalizedNetNewsWireError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalizedNetNewsWireError.swift; sourceTree = "<group>"; };
|
||||
DFB34998294C4F1D00BC81AD /* Errors.strings */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; path = Errors.strings; sourceTree = "<group>"; };
|
||||
DFB3499D294C5D5000BC81AD /* iCloudAccountView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iCloudAccountView.swift; sourceTree = "<group>"; };
|
||||
DFB3499D294C5D5000BC81AD /* CloudKitAddAccountView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CloudKitAddAccountView.swift; sourceTree = "<group>"; };
|
||||
DFB3499F294E87B700BC81AD /* LocalAddAccountView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalAddAccountView.swift; sourceTree = "<group>"; };
|
||||
DFC14F0E28EA55BD00F6EE86 /* AboutWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutWindowController.swift; sourceTree = "<group>"; };
|
||||
DFC14F1428EB177000F6EE86 /* AboutNetNewsWireView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutNetNewsWireView.swift; sourceTree = "<group>"; };
|
||||
DFC14F1628EB17A800F6EE86 /* CreditsNetNewsWireView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreditsNetNewsWireView.swift; sourceTree = "<group>"; };
|
||||
@@ -3003,8 +3005,9 @@
|
||||
DFB3498F294C0B0D00BC81AD /* Views */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
DFB34990294C0B2200BC81AD /* ReaderAPIAccountView.swift */,
|
||||
DFB3499D294C5D5000BC81AD /* iCloudAccountView.swift */,
|
||||
DFB3499F294E87B700BC81AD /* LocalAddAccountView.swift */,
|
||||
DFB3499D294C5D5000BC81AD /* CloudKitAddAccountView.swift */,
|
||||
DFB34990294C0B2200BC81AD /* ReaderAPIAddAccountView.swift */,
|
||||
);
|
||||
path = Views;
|
||||
sourceTree = "<group>";
|
||||
@@ -4251,8 +4254,9 @@
|
||||
5126EE97226CB48A00C22AFC /* SceneCoordinator.swift in Sources */,
|
||||
84CAFCB022BC8C35007694F0 /* FetchRequestOperation.swift in Sources */,
|
||||
DFD406FA291FB5E400C02962 /* SettingsRows.swift in Sources */,
|
||||
DFB3499E294C5D5000BC81AD /* iCloudAccountView.swift in Sources */,
|
||||
DFB3499E294C5D5000BC81AD /* CloudKitAddAccountView.swift in Sources */,
|
||||
DFB3498C294B4CA700BC81AD /* WebFeedInspectorView.swift in Sources */,
|
||||
DFB349A0294E87B700BC81AD /* LocalAddAccountView.swift in Sources */,
|
||||
5193CD5A245E44A90092735E /* RedditFeedProvider-Extensions.swift in Sources */,
|
||||
51EF0F77227716200050506E /* FaviconGenerator.swift in Sources */,
|
||||
51938DF3231AFC660055A1A0 /* SearchTimelineFeedDelegate.swift in Sources */,
|
||||
@@ -4331,7 +4335,7 @@
|
||||
51EF0F7E2277A57D0050506E /* MasterTimelineAccessibilityCellLayout.swift in Sources */,
|
||||
512D554423C804DE0023FFFA /* OpenInSafariActivity.swift in Sources */,
|
||||
DF47CDB2294803AB00FCD57E /* AddExtensionListView.swift in Sources */,
|
||||
DFB34994294C0E3900BC81AD /* ReaderAPIAccountView.swift in Sources */,
|
||||
DFB34994294C0E3900BC81AD /* ReaderAPIAddAccountView.swift in Sources */,
|
||||
512392C224E33A3C00F11704 /* RedditEnterDetailTableViewController.swift in Sources */,
|
||||
51C452762265091600C03939 /* MasterTimelineViewController.swift in Sources */,
|
||||
5195C1DC2720BD3000888867 /* MasterFeedRowIdentifier.swift in Sources */,
|
||||
|
||||
@@ -7,10 +7,14 @@
|
||||
*/
|
||||
|
||||
/* Account Names */
|
||||
"ACCOUNT_NAME" = "Name";
|
||||
"CLOUDKIT" = "iCloud";
|
||||
"LOCAL_ACCOUNT_NAME_PHONE" = "On My iPhone";
|
||||
"LOCAL_ACCOUNT_NAME_PAD" = "On My iPad";
|
||||
|
||||
|
||||
/* Explainers */
|
||||
"LOCAL_FOOTER_EXPLAINER" = "Local accounts do not sync your feeds across devices";
|
||||
"BAZQUX_FOOTER_EXPLAINER" = "Sign in to your BazQux account and sync your feeds across your devices. Your username and password will be encrypted and stored in Keychain.\n\nDon’t have a BazQux account? [Sign Up Here](https://bazqux.com)";
|
||||
"INOREADER_FOOTER_EXPLAINER" = "Sign in to your InoReader account and sync your feeds across your devices. Your username and password will be encrypted and stored in Keychain.\n\nDon’t have an InoReader account? [Sign Up Here](https://www.inoreader.com)";
|
||||
"OLDREADER_FOOTER_EXPLAINER" = "Sign in to your The Old Reader account and sync your feeds across your devices. Your username and password will be encrypted and stored in Keychain.\n\nDon’t have a The Old Reader account? [Sign Up Here](https://theoldreader.com)";
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
//
|
||||
// iCloudAccountView.swift
|
||||
// CloudKitAddAccountView.swift
|
||||
// NetNewsWire-iOS
|
||||
//
|
||||
// Created by Stuart Breckenridge on 16/12/2022.
|
||||
@@ -9,7 +9,7 @@
|
||||
import SwiftUI
|
||||
import Account
|
||||
|
||||
struct iCloudAccountView: View {
|
||||
struct CloudKitAddAccountView: View {
|
||||
|
||||
@Environment(\.dismiss) private var dismiss
|
||||
@State private var addAccountError: (LocalizedError?, Bool) = (nil, false)
|
||||
@@ -18,13 +18,16 @@ struct iCloudAccountView: View {
|
||||
NavigationView {
|
||||
Form {
|
||||
Section(header: cloudKitHeader) {}
|
||||
Section {
|
||||
createCloudKitAccount
|
||||
}
|
||||
Section { createCloudKitAccount }
|
||||
Section(footer: cloudKitExplainer) {}
|
||||
}
|
||||
.navigationTitle(Text("CLOUDKIT", tableName: "Account"))
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .navigationBarLeading) {
|
||||
Button(action: { dismiss() }, label: { Text("CANCEL_BUTTON_TITLE", tableName: "Buttons") })
|
||||
}
|
||||
}
|
||||
.alert(Text("ERROR_TITLE", tableName: "Errors"), isPresented: $addAccountError.1) {
|
||||
Button(action: {}, label: { Text("DISMISS_BUTTON_TITLE", tableName: "Buttons") })
|
||||
} message: {
|
||||
@@ -78,6 +81,6 @@ struct iCloudAccountView: View {
|
||||
|
||||
struct iCloudAccountView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
iCloudAccountView()
|
||||
CloudKitAddAccountView()
|
||||
}
|
||||
}
|
||||
96
iOS/Account/Views/LocalAddAccountView.swift
Normal file
96
iOS/Account/Views/LocalAddAccountView.swift
Normal file
@@ -0,0 +1,96 @@
|
||||
//
|
||||
// LocalAddAccountView.swift
|
||||
// NetNewsWire-iOS
|
||||
//
|
||||
// Created by Stuart Breckenridge on 18/12/2022.
|
||||
// Copyright © 2022 Ranchero Software. All rights reserved.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
import Account
|
||||
|
||||
struct LocalAddAccountView: View {
|
||||
|
||||
@Environment(\.dismiss) var dismiss
|
||||
@State private var accountName: String = ""
|
||||
|
||||
var body: some View {
|
||||
NavigationView {
|
||||
Form {
|
||||
Section(header: accountHeaderView) {}
|
||||
Section { accountNameSection }
|
||||
Section { addAccountButton }
|
||||
Section(footer: accountFooterView) {}
|
||||
}
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .navigationBarLeading) {
|
||||
Button(action: { dismiss() }, label: { Text("CANCEL_BUTTON_TITLE", tableName: "Buttons") })
|
||||
}
|
||||
}
|
||||
.navigationTitle(deviceAccountName())
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
.onReceive(NotificationCenter.default.publisher(for: .UserDidAddAccount)) { _ in
|
||||
dismiss()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var accountNameSection: some View {
|
||||
TextField("Name",
|
||||
text: $accountName,
|
||||
prompt: Text("ACCOUNT_NAME", tableName: "Account"))
|
||||
}
|
||||
|
||||
var addAccountButton: some View {
|
||||
Button {
|
||||
let account = AccountManager.shared.createAccount(type: .onMyMac)
|
||||
if accountName.trimmingWhitespace.count > 0 { account.name = accountName }
|
||||
} label: {
|
||||
HStack {
|
||||
Spacer()
|
||||
Text("ADD_ACCOUNT_BUTTON_TITLE", tableName: "Buttons")
|
||||
Spacer()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var accountHeaderView: some View {
|
||||
HStack {
|
||||
Spacer()
|
||||
Image(uiImage: accountImage())
|
||||
.resizable()
|
||||
.aspectRatio(contentMode: .fit)
|
||||
.frame(width: 48, height: 48)
|
||||
Spacer()
|
||||
}
|
||||
}
|
||||
|
||||
var accountFooterView: some View {
|
||||
HStack {
|
||||
Spacer()
|
||||
Text("LOCAL_FOOTER_EXPLAINER", tableName: "Account")
|
||||
.multilineTextAlignment(.center)
|
||||
Spacer()
|
||||
}
|
||||
}
|
||||
|
||||
private func accountImage() -> UIImage {
|
||||
if UIDevice.current.userInterfaceIdiom == .pad {
|
||||
return AppAssets.accountLocalPadImage
|
||||
}
|
||||
return AppAssets.accountLocalPhoneImage
|
||||
}
|
||||
|
||||
private func deviceAccountName() -> Text {
|
||||
if UIDevice.current.userInterfaceIdiom == .pad {
|
||||
return Text("LOCAL_ACCOUNT_NAME_PAD", tableName: "Account")
|
||||
}
|
||||
return Text("LOCAL_ACCOUNT_NAME_PHONE", tableName: "Account")
|
||||
}
|
||||
}
|
||||
|
||||
struct LocalAddAccountView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
LocalAddAccountView()
|
||||
}
|
||||
}
|
||||
@@ -13,7 +13,7 @@ import RSWeb
|
||||
import SafariServices
|
||||
import RSCore
|
||||
|
||||
struct ReaderAPIAccountView: View {
|
||||
struct ReaderAPIAddAccountView: View {
|
||||
|
||||
@Environment(\.dismiss) var dismiss
|
||||
|
||||
@@ -249,6 +249,6 @@ struct ReaderAPIAccountView: View {
|
||||
|
||||
struct ReaderAPIAccountView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
ReaderAPIAccountView()
|
||||
ReaderAPIAddAccountView()
|
||||
}
|
||||
}
|
||||
@@ -44,7 +44,11 @@ struct AccountInspectorView: View {
|
||||
.sheet(isPresented: $showAccountCredentialsSheet) {
|
||||
switch account.type {
|
||||
case .theOldReader, .bazQux, .inoreader, .freshRSS:
|
||||
ReaderAPIAccountView(accountType: account.type, account: account)
|
||||
ReaderAPIAddAccountView(accountType: account.type, account: account)
|
||||
case .feedbin:
|
||||
Text("FEEDBIN")
|
||||
case .newsBlur:
|
||||
Text("NEWSBLUR")
|
||||
default:
|
||||
EmptyView()
|
||||
}
|
||||
|
||||
@@ -87,11 +87,11 @@ struct AddAccountListView: View {
|
||||
.sheet(isPresented: $viewModel.showAddAccountSheet.0) {
|
||||
switch viewModel.showAddAccountSheet.accountType {
|
||||
case .onMyMac:
|
||||
Text("ON MY MAC")
|
||||
LocalAddAccountView()
|
||||
case .cloudKit:
|
||||
iCloudAccountView()
|
||||
CloudKitAddAccountView()
|
||||
case .freshRSS, .inoreader, .bazQux, .theOldReader:
|
||||
ReaderAPIAccountView(accountType: viewModel.showAddAccountSheet.accountType, account: nil)
|
||||
ReaderAPIAddAccountView(accountType: viewModel.showAddAccountSheet.accountType, account: nil)
|
||||
default:
|
||||
Text(viewModel.showAddAccountSheet.accountType.localizedAccountName())
|
||||
}
|
||||
@@ -200,7 +200,6 @@ struct AddAccountListView: View {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private func interactionDisabled(for accountType: AccountType) -> Bool {
|
||||
if accountType == .cloudKit {
|
||||
if AccountManager.shared.accounts.contains(where: { $0.type == .cloudKit }) {
|
||||
|
||||
Reference in New Issue
Block a user