diff --git a/iOS/Article/ArticleViewController.swift b/iOS/Article/ArticleViewController.swift index 2454a1f64..7d95975d4 100644 --- a/iOS/Article/ArticleViewController.swift +++ b/iOS/Article/ArticleViewController.swift @@ -349,13 +349,36 @@ extension ArticleViewController: WKUIDelegate { extension ArticleViewController: WKScriptMessageHandler { func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { - if message.name == MessageName.imageWasClicked, let link = message.body as? String, let url = URL(string: link) { - let imageVC = UIStoryboard.main.instantiateController(ofType: ImageViewController.self) - imageVC.url = url - imageVC.modalPresentationStyle = .fullScreen - present(imageVC, animated: true) + if message.name == MessageName.imageWasClicked, + let body = message.body as? String, + let data = body.data(using: .utf8), + let clickMessage = try? JSONDecoder().decode(ImageClickMessage.self, from: data), + let range = clickMessage.imageURL.range(of: ";base64,") { + + let base64Image = String(clickMessage.imageURL.suffix(from: range.upperBound)) + if let imageData = Data(base64Encoded: base64Image), let image = UIImage(data: imageData) { + let imageVC = UIStoryboard.main.instantiateController(ofType: ImageViewController.self) + imageVC.image = image + imageVC.modalPresentationStyle = .fullScreen + present(imageVC, animated: true) + } } } + +} + +// MARK: JSON +private struct TemplateData: Codable { + let style: String + let body: String +} + +private struct ImageClickMessage: Codable { + let x: Float + let y: Float + let width: Float + let height: Float + let imageURL: String } // MARK: Private @@ -369,8 +392,3 @@ private extension ArticleViewController { } } - -private struct TemplateData: Codable { - let style: String - let body: String -} diff --git a/iOS/Article/ArticleViewControllerWebViewProvider.swift b/iOS/Article/ArticleViewControllerWebViewProvider.swift index f221110a1..3209dc0aa 100644 --- a/iOS/Article/ArticleViewControllerWebViewProvider.swift +++ b/iOS/Article/ArticleViewControllerWebViewProvider.swift @@ -69,6 +69,7 @@ class ArticleViewControllerWebViewProvider: NSObject, WKNavigationDelegate { let configuration = WKWebViewConfiguration() configuration.preferences = preferences + configuration.setValue(true, forKey: "allowUniversalAccessFromFileURLs") configuration.allowsInlineMediaPlayback = true configuration.mediaTypesRequiringUserActionForPlayback = .video diff --git a/iOS/Article/ImageViewController.swift b/iOS/Article/ImageViewController.swift index ed171ecfe..50047ed20 100644 --- a/iOS/Article/ImageViewController.swift +++ b/iOS/Article/ImageViewController.swift @@ -11,55 +11,29 @@ import UIKit class ImageViewController: UIViewController { @IBOutlet weak var shareButton: UIButton! - @IBOutlet weak var activityIndicatorView: UIActivityIndicatorView! @IBOutlet weak var imageScrollView: ImageScrollView! - private var dataTask: URLSessionDataTask? = nil - private var image: UIImage? - var url: URL! + var image: UIImage! override func viewDidLoad() { super.viewDidLoad() - activityIndicatorView.isHidden = false - activityIndicatorView.startAnimating() - imageScrollView.setup() imageScrollView.imageScrollViewDelegate = self imageScrollView.imageContentMode = .aspectFit imageScrollView.initialOffset = .center - - dataTask = URLSession.shared.dataTask(with: url) { [weak self] data, response, error in - guard let self = self else { return } - - if let data = data, let image = UIImage(data: data) { - - self.image = image - - DispatchQueue.main.async { - self.shareButton.isEnabled = true - self.activityIndicatorView.isHidden = true - self.activityIndicatorView.stopAnimating() - self.imageScrollView.display(image: image) - } - - } - - } - - dataTask!.resume() + imageScrollView.display(image: image) } @IBAction func share(_ sender: Any) { guard let image = image else { return } - let activityViewController = UIActivityViewController(activityItems: [url!, image], applicationActivities: nil) + let activityViewController = UIActivityViewController(activityItems: [image], applicationActivities: nil) activityViewController.popoverPresentationController?.sourceView = shareButton activityViewController.popoverPresentationController?.sourceRect = shareButton.bounds present(activityViewController, animated: true) } @IBAction func done(_ sender: Any) { - dataTask?.cancel() dismiss(animated: true) } diff --git a/iOS/Base.lproj/Main.storyboard b/iOS/Base.lproj/Main.storyboard index c046ff4b0..05a579442 100644 --- a/iOS/Base.lproj/Main.storyboard +++ b/iOS/Base.lproj/Main.storyboard @@ -237,19 +237,10 @@ - - - - - - - - - -