Email and Share icons
Although at the time of writing, Email will crash on 15
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
//
|
||||
|
||||
import Combine
|
||||
import MessageUI
|
||||
import UIKit
|
||||
import UniformTypeIdentifiers
|
||||
|
||||
@@ -95,26 +96,8 @@ class BrowserViewController: UIViewController
|
||||
}), for: .touchUpInside)
|
||||
|
||||
// Share button
|
||||
toolbarController.shareButton.addAction(UIAction(handler: { [unowned self, toolbarController] _ in
|
||||
if let url = self.webView.url {
|
||||
let itemProvider = NSItemProvider(item: url as NSURL, typeIdentifier: UTType.url.identifier)
|
||||
let config = UIActivityItemsConfiguration(itemProviders: [ itemProvider ])
|
||||
config.metadataProvider = { metadataKey in
|
||||
switch metadataKey {
|
||||
case .title: return self.webView.title
|
||||
case .messageBody: return self.webView.title
|
||||
default: return nil
|
||||
}
|
||||
}
|
||||
|
||||
config.previewProvider = { index, intent, suggestedSize in
|
||||
NSItemProvider(item: self.tab.favicon, typeIdentifier: UTType.image.identifier)
|
||||
}
|
||||
|
||||
let activityController = UIActivityViewController(activityItemsConfiguration: config)
|
||||
activityController.popoverPresentationController?.sourceView = toolbarController.shareButton
|
||||
self.present(activityController, animated: true, completion: nil)
|
||||
}
|
||||
toolbarController.shareButton.addAction(UIAction(handler: { [unowned self] _ in
|
||||
showShareSheetForCurrentURL(fromViewController: nil)
|
||||
}), for: .touchUpInside)
|
||||
|
||||
// Script button
|
||||
@@ -289,6 +272,11 @@ class BrowserViewController: UIViewController
|
||||
documentControls.dismiss(animated: true, completion: nil)
|
||||
}, for: .touchUpInside)
|
||||
|
||||
// Email
|
||||
documentControls.emailView.addAction(UIAction { [unowned self] _ in
|
||||
composeEmailForCurrentURL(fromViewController: documentControls)
|
||||
}, for: .touchUpInside)
|
||||
|
||||
// Settings
|
||||
documentControls.settingsView.addAction(UIAction { [unowned self] _ in
|
||||
documentControls.dismiss(animated: false, completion: nil)
|
||||
@@ -321,6 +309,40 @@ class BrowserViewController: UIViewController
|
||||
self.view = browserView
|
||||
}
|
||||
|
||||
internal func showShareSheetForCurrentURL(fromViewController: UIViewController?) {
|
||||
guard let url = self.webView.url else { return }
|
||||
|
||||
let shareableURL = ShareableURL(
|
||||
url: url,
|
||||
title: webView.title ?? url.absoluteString,
|
||||
favicon: tab.favicon
|
||||
)
|
||||
|
||||
let activityController = UIActivityViewController(activityItems: [ shareableURL ], applicationActivities: nil)
|
||||
activityController.popoverPresentationController?.sourceView = toolbarController.shareButton
|
||||
|
||||
if let fromViewController = fromViewController {
|
||||
fromViewController.dismiss(animated: false, completion: nil)
|
||||
}
|
||||
|
||||
self.present(activityController, animated: true, completion: nil)
|
||||
}
|
||||
|
||||
internal func composeEmailForCurrentURL(fromViewController: UIViewController?) {
|
||||
guard let url = self.webView.url else { return }
|
||||
|
||||
let composeController = MFMailComposeViewController()
|
||||
composeController.setSubject(webView.title ?? url.absoluteString)
|
||||
composeController.setMessageBody(url.absoluteString, isHTML: false)
|
||||
composeController.mailComposeDelegate = self
|
||||
|
||||
if let fromViewController = fromViewController {
|
||||
fromViewController.dismiss(animated: false, completion: nil)
|
||||
}
|
||||
|
||||
present(composeController, animated: true, completion: nil)
|
||||
}
|
||||
|
||||
internal func showSettingsWindow() {
|
||||
#if targetEnvironment(macCatalyst)
|
||||
let userActivity = NSUserActivity(activityType: SessionActivityType.SettingsWindow.rawValue)
|
||||
@@ -570,3 +592,10 @@ extension BrowserViewController: URLBarDelegate
|
||||
changingFocusToAutocompleteController = false
|
||||
}
|
||||
}
|
||||
|
||||
extension BrowserViewController: MFMailComposeViewControllerDelegate
|
||||
{
|
||||
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
|
||||
controller.dismiss(animated: true, completion: nil)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user