From 9fedf68b3f2c94a13975ef561d0079aaaf9a7d10 Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Thu, 9 Jan 2020 18:27:52 -0700 Subject: [PATCH] Add action to Share button to open in Safari. Issue #1573 --- NetNewsWire.xcodeproj/project.pbxproj | 12 ++++--- iOS/Article/OpenInSafariActivity.swift | 45 ++++++++++++++++++++++++++ iOS/Article/WebViewController.swift | 2 +- 3 files changed, 54 insertions(+), 5 deletions(-) create mode 100644 iOS/Article/OpenInSafariActivity.swift diff --git a/NetNewsWire.xcodeproj/project.pbxproj b/NetNewsWire.xcodeproj/project.pbxproj index dcacef335..baec952ba 100644 --- a/NetNewsWire.xcodeproj/project.pbxproj +++ b/NetNewsWire.xcodeproj/project.pbxproj @@ -37,6 +37,7 @@ 5127B23A222B4849006D641D /* DetailKeyboardShortcuts.plist in Resources */ = {isa = PBXBuildFile; fileRef = 5127B237222B4849006D641D /* DetailKeyboardShortcuts.plist */; }; 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 */; }; 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 */; }; @@ -1245,6 +1246,7 @@ 5127B237222B4849006D641D /* DetailKeyboardShortcuts.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = DetailKeyboardShortcuts.plist; sourceTree = ""; }; 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 = ""; }; 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; }; @@ -1951,14 +1953,15 @@ 51C4527D2265092C00C03939 /* Article */ = { isa = PBXGroup; children = ( - 51C4527E2265092C00C03939 /* ArticleViewController.swift */, - 51AB8AB223B7F4C6008F147D /* WebViewController.swift */, - 517630222336657E00E15FFF /* WebViewProvider.swift */, 51102164233A7D6C0007A5F7 /* ArticleExtractorButton.swift */, + 51C4527E2265092C00C03939 /* ArticleViewController.swift */, 51C266E9238C334800F53014 /* ContextMenuPreviewViewController.swift */, - 5142192923522B5500E07E2C /* ImageViewController.swift */, 514219362352510100E07E2C /* ImageScrollView.swift */, 518651D9235621840078E021 /* ImageTransition.swift */, + 5142192923522B5500E07E2C /* ImageViewController.swift */, + 512D554323C804DE0023FFFA /* OpenInSafariActivity.swift */, + 51AB8AB223B7F4C6008F147D /* WebViewController.swift */, + 517630222336657E00E15FFF /* WebViewProvider.swift */, ); path = Article; sourceTree = ""; @@ -3917,6 +3920,7 @@ 51C452AC22650FD200C03939 /* AppNotifications.swift in Sources */, 51EF0F7E2277A57D0050506E /* MasterTimelineAccessibilityCellLayout.swift in Sources */, 51A1699B235E10D700EB091F /* AccountInspectorViewController.swift in Sources */, + 512D554423C804DE0023FFFA /* OpenInSafariActivity.swift in Sources */, 51C452762265091600C03939 /* MasterTimelineViewController.swift in Sources */, 5108F6D823763094001ABC45 /* TickMarkSlider.swift in Sources */, 51C452882265093600C03939 /* AddWebFeedViewController.swift in Sources */, diff --git a/iOS/Article/OpenInSafariActivity.swift b/iOS/Article/OpenInSafariActivity.swift new file mode 100644 index 000000000..a1058601b --- /dev/null +++ b/iOS/Article/OpenInSafariActivity.swift @@ -0,0 +1,45 @@ +// +// OpenInSafariActivity.swift +// NetNewsWire-iOS +// +// Created by Maurice Parker on 1/9/20. +// Copyright © 2020 Ranchero Software. All rights reserved. +// + +import UIKit + +class OpenInSafariActivity: UIActivity { + + private var activityItems: [Any]? + + override var activityTitle: String? { + return NSLocalizedString("Open in Safari", comment: "Open in Safari") + } + + override var activityImage: UIImage? { + return UIImage(systemName: "safari", withConfiguration: UIImage.SymbolConfiguration(pointSize: 20, weight: .regular)) + } + + override var activityType: UIActivity.ActivityType? { + return UIActivity.ActivityType(rawValue: "com.rancharo.NetNewsWire-Evergreen.safari") + } + + override class var activityCategory: UIActivity.Category { + return .action + } + + override func canPerform(withActivityItems activityItems: [Any]) -> Bool { + return true + } + + override func prepare(withActivityItems activityItems: [Any]) { + self.activityItems = activityItems + } + + override func perform() { + guard let url = activityItems?.first as? URL else { return } + UIApplication.shared.open(url, options: [:], completionHandler: nil) + activityDidFinish(true) + } + +} diff --git a/iOS/Article/WebViewController.swift b/iOS/Article/WebViewController.swift index 378bd70b7..052506a16 100644 --- a/iOS/Article/WebViewController.swift +++ b/iOS/Article/WebViewController.swift @@ -284,7 +284,7 @@ class WebViewController: UIViewController { } let itemSource = ArticleActivityItemSource(url: url, subject: article!.title) - let activityViewController = UIActivityViewController(activityItems: [itemSource], applicationActivities: nil) + let activityViewController = UIActivityViewController(activityItems: [itemSource], applicationActivities: [OpenInSafariActivity()]) activityViewController.popoverPresentationController?.barButtonItem = popOverBarButtonItem present(activityViewController, animated: true) }