Adds local add account view

Renames AddAccount view for clarity
This commit is contained in:
Stuart Breckenridge
2022-12-18 07:51:54 +08:00
parent 4ff0bc8f98
commit 8108f1ab0f
7 changed files with 131 additions and 21 deletions

View File

@@ -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 */,

View File

@@ -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\nDont 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\nDont 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\nDont have a The Old Reader account? [Sign Up Here](https://theoldreader.com)";

View File

@@ -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()
}
}

View 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()
}
}

View File

@@ -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()
}
}

View File

@@ -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()
}

View File

@@ -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 }) {