diff --git a/NetNewsWire.xcodeproj/project.pbxproj b/NetNewsWire.xcodeproj/project.pbxproj index dbc9bcd58..6bc186734 100644 --- a/NetNewsWire.xcodeproj/project.pbxproj +++ b/NetNewsWire.xcodeproj/project.pbxproj @@ -45,6 +45,7 @@ 512AF9C2236ED52C0066F8BE /* ImageHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 512AF9C1236ED52C0066F8BE /* ImageHeaderView.swift */; }; 512AF9DD236F05230066F8BE /* InteractiveLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 512AF9DC236F05230066F8BE /* InteractiveLabel.swift */; }; 512D554423C804DE0023FFFA /* OpenInSafariActivity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 512D554323C804DE0023FFFA /* OpenInSafariActivity.swift */; }; + 512DD4C92430086400C17B1F /* CloudKitAccountViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 512DD4C82430086400C17B1F /* CloudKitAccountViewController.swift */; }; 512E08E62268800D00BDCFDD /* FolderTreeControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849A97A11ED9F180007D329B /* FolderTreeControllerDelegate.swift */; }; 512E08E72268801200BDCFDD /* WebFeedTreeControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849A97611ED9EB96007D329B /* WebFeedTreeControllerDelegate.swift */; }; 512E09012268907400BDCFDD /* MasterFeedTableViewSectionHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 512E08F722688F7C00BDCFDD /* MasterFeedTableViewSectionHeader.swift */; }; @@ -1282,6 +1283,7 @@ 512AF9C1236ED52C0066F8BE /* ImageHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageHeaderView.swift; sourceTree = ""; }; 512AF9DC236F05230066F8BE /* InteractiveLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InteractiveLabel.swift; sourceTree = ""; }; 512D554323C804DE0023FFFA /* OpenInSafariActivity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenInSafariActivity.swift; sourceTree = ""; }; + 512DD4C82430086400C17B1F /* CloudKitAccountViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CloudKitAccountViewController.swift; sourceTree = ""; }; 512E08F722688F7C00BDCFDD /* MasterFeedTableViewSectionHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MasterFeedTableViewSectionHeader.swift; sourceTree = ""; }; 51314617235A797400387FDC /* NetNewsWire_iOSintentextension_target.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = NetNewsWire_iOSintentextension_target.xcconfig; sourceTree = ""; }; 51314637235A7BBE00387FDC /* NetNewsWire iOS Intents Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "NetNewsWire iOS Intents Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -1875,6 +1877,7 @@ children = ( 516A093F2361240900EAE89B /* Account.storyboard */, 51A1698F235E10D600EB091F /* LocalAccountViewController.swift */, + 512DD4C82430086400C17B1F /* CloudKitAccountViewController.swift */, 51A16996235E10D700EB091F /* FeedbinAccountViewController.swift */, 3B3A328B238B820900314204 /* FeedWranglerAccountViewController.swift */, 769F2D3643779DB02786278E /* NewsBlurAccountViewController.swift */, @@ -3926,6 +3929,7 @@ buildActionMask = 2147483647; files = ( 51E36E71239D6610006F47A5 /* AddWebFeedSelectFolderTableViewCell.swift in Sources */, + 512DD4C92430086400C17B1F /* CloudKitAccountViewController.swift in Sources */, 840D617F2029031C009BC708 /* AppDelegate.swift in Sources */, 51236339236915B100951F16 /* RoundedProgressView.swift in Sources */, 512E08E72268801200BDCFDD /* WebFeedTreeControllerDelegate.swift in Sources */, diff --git a/iOS/Account/Account.storyboard b/iOS/Account/Account.storyboard index 868dbba71..9de54a8dd 100644 --- a/iOS/Account/Account.storyboard +++ b/iOS/Account/Account.storyboard @@ -10,7 +10,7 @@ - + @@ -21,7 +21,7 @@ - + @@ -271,7 +271,7 @@ - + @@ -440,7 +440,7 @@ - + @@ -555,6 +555,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOS/Account/CloudKitAccountViewController.swift b/iOS/Account/CloudKitAccountViewController.swift new file mode 100644 index 000000000..e26135ffd --- /dev/null +++ b/iOS/Account/CloudKitAccountViewController.swift @@ -0,0 +1,47 @@ +// +// CloudKitAccountViewController.swift +// NetNewsWire-iOS +// +// Created by Maurice Parker on 3/28/20. +// Copyright © 2020 Ranchero Software. All rights reserved. +// + +import UIKit +import Account + +class CloudKitAccountViewController: UITableViewController { + + weak var delegate: AddAccountDismissDelegate? + + override func viewDidLoad() { + super.viewDidLoad() + + tableView.register(ImageHeaderView.self, forHeaderFooterViewReuseIdentifier: "SectionHeader") + } + + @IBAction func cancel(_ sender: Any) { + dismiss(animated: true, completion: nil) + delegate?.dismiss() + } + + @IBAction func add(_ sender: Any) { + _ = AccountManager.shared.createAccount(type: .cloudKit) + dismiss(animated: true, completion: nil) + delegate?.dismiss() + } + + override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { + return section == 0 ? ImageHeaderView.rowHeight : super.tableView(tableView, heightForHeaderInSection: section) + } + + override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { + if section == 0 { + let headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: "SectionHeader") as! ImageHeaderView + headerView.imageView.image = AppAssets.image(for: .cloudKit) + return headerView + } else { + return super.tableView(tableView, viewForHeaderInSection: section) + } + } + +} diff --git a/iOS/AppAssets.swift b/iOS/AppAssets.swift index 17473357b..58d600aef 100644 --- a/iOS/AppAssets.swift +++ b/iOS/AppAssets.swift @@ -19,6 +19,10 @@ struct AppAssets { return UIImage(named: "accountLocalPhone")! }() + static var accountCloudKitImage: UIImage = { + return UIImage(named: "accountCloudKit")! + }() + static var accountFeedbinImage: UIImage = { return UIImage(named: "accountFeedbin")! }() @@ -234,6 +238,8 @@ struct AppAssets { } else { return AppAssets.accountLocalPhoneImage } + case .cloudKit: + return AppAssets.accountCloudKitImage case .feedbin: return AppAssets.accountFeedbinImage case .feedly: @@ -244,8 +250,6 @@ struct AppAssets { return AppAssets.accountFreshRSSImage case .newsBlur: return AppAssets.accountNewsBlurImage - default: - return nil } } diff --git a/iOS/Resources/Assets.xcassets/accountCloudKit.imageset/Contents.json b/iOS/Resources/Assets.xcassets/accountCloudKit.imageset/Contents.json new file mode 100644 index 000000000..fc07d2975 --- /dev/null +++ b/iOS/Resources/Assets.xcassets/accountCloudKit.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "icloud.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "template" + } +} diff --git a/iOS/Resources/Assets.xcassets/accountCloudKit.imageset/icloud.pdf b/iOS/Resources/Assets.xcassets/accountCloudKit.imageset/icloud.pdf new file mode 100644 index 000000000..74406f4cb Binary files /dev/null and b/iOS/Resources/Assets.xcassets/accountCloudKit.imageset/icloud.pdf differ diff --git a/iOS/Settings/AddAccountViewController.swift b/iOS/Settings/AddAccountViewController.swift index 7b3b91318..e3d55dc1f 100644 --- a/iOS/Settings/AddAccountViewController.swift +++ b/iOS/Settings/AddAccountViewController.swift @@ -17,7 +17,7 @@ protocol AddAccountDismissDelegate: UIViewController { class AddAccountViewController: UITableViewController, AddAccountDismissDelegate { #if DEBUG - private var addableAccountTypes: [AccountType] = [.onMyMac, .feedbin, .feedly, .feedWrangler, .newsBlur] + private var addableAccountTypes: [AccountType] = [.onMyMac, .cloudKit, .feedbin, .feedly, .feedWrangler, .newsBlur] #else private var addableAccountTypes: [AccountType] = [.onMyMac, .feedbin, .feedly] #endif @@ -46,6 +46,9 @@ class AddAccountViewController: UITableViewController, AddAccountDismissDelegate case .onMyMac: cell.accountNameLabel?.text = Account.defaultLocalAccountName cell.accountImage?.image = AppAssets.image(for: .onMyMac) + case .cloudKit: + cell.accountNameLabel?.text = NSLocalizedString("CloudKit", comment: "CloudKit") + cell.accountImage?.image = AppAssets.accountCloudKitImage case .feedbin: cell.accountNameLabel?.text = NSLocalizedString("Feedbin", comment: "Feedbin") cell.accountImage?.image = AppAssets.accountFeedbinImage @@ -68,11 +71,17 @@ class AddAccountViewController: UITableViewController, AddAccountDismissDelegate override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { switch addableAccountTypes[indexPath.row] { case .onMyMac: - let navController = UIStoryboard.account.instantiateViewController(withIdentifier: "AddLocalAccountNavigationViewController") as! UINavigationController + let navController = UIStoryboard.account.instantiateViewController(withIdentifier: "LocalAccountNavigationViewController") as! UINavigationController navController.modalPresentationStyle = .currentContext let addViewController = navController.topViewController as! LocalAccountViewController addViewController.delegate = self present(navController, animated: true) + case .cloudKit: + let navController = UIStoryboard.account.instantiateViewController(withIdentifier: "CloudKitAccountNavigationViewController") as! UINavigationController + navController.modalPresentationStyle = .currentContext + let addViewController = navController.topViewController as! CloudKitAccountViewController + addViewController.delegate = self + present(navController, animated: true) case .feedbin: let navController = UIStoryboard.account.instantiateViewController(withIdentifier: "FeedbinAccountNavigationViewController") as! UINavigationController navController.modalPresentationStyle = .currentContext