From ecc20ad9e3ea18359feee129c12a948f244f48c0 Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Sat, 28 Mar 2020 17:51:14 -0500 Subject: [PATCH] Enabled adding a CloudKit account on iOS. --- NetNewsWire.xcodeproj/project.pbxproj | 4 + iOS/Account/Account.storyboard | 82 +++++++++++++++++- .../CloudKitAccountViewController.swift | 47 ++++++++++ iOS/AppAssets.swift | 8 +- .../accountCloudKit.imageset/Contents.json | 15 ++++ .../accountCloudKit.imageset/icloud.pdf | Bin 0 -> 4251 bytes iOS/Settings/AddAccountViewController.swift | 13 ++- 7 files changed, 161 insertions(+), 8 deletions(-) create mode 100644 iOS/Account/CloudKitAccountViewController.swift create mode 100644 iOS/Resources/Assets.xcassets/accountCloudKit.imageset/Contents.json create mode 100644 iOS/Resources/Assets.xcassets/accountCloudKit.imageset/icloud.pdf 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 0000000000000000000000000000000000000000..74406f4cbf5e9bdd80f425de4421e074993302ef GIT binary patch literal 4251 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 dtAYQ!