Antidote/Antidote/FAQController.swift

117 lines
4.0 KiB
Swift

// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
import Foundation
import WebKit
import SnapKit
class FAQController: UIViewController {
fileprivate let theme: Theme
fileprivate let webConfiguration = WKWebViewConfiguration()
fileprivate var webView: WKWebView!
fileprivate var spinner: UIActivityIndicatorView!
init(theme: Theme) {
self.theme = theme
super.init(nibName: nil, bundle: nil)
hidesBottomBarWhenPushed = true
title = String(localized: "settings_faq")
}
required convenience init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func loadView() {
loadViewWithBackgroundColor(theme.colorForType(.NormalBackground))
createViews()
installConstraints()
}
override func viewDidLoad() {
webView.configuration.preferences.javaScriptEnabled = true
super.viewDidLoad()
let contentController = self.webView.configuration.userContentController
contentController.add(self, name: "addSupportToxID")
let url = Bundle.main.url(forResource: "FAQ_en", withExtension: "html")
let request = NSURLRequest(url: url!)
webView.load(request as URLRequest)
}
}
extension FAQController: WKScriptMessageHandler{
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
// TODO(Tha_14): Change this so that we use the button to instead immediately add the friend. We need to carry the ToxManager object from the tab controller into the settings coordinator
UIPasteboard.general.string = "0525CEA07DC84D4CEF9154FB785344D573CD558140BEC7216845FDAC77FFEF7A993E21186874"
let alertController = UIAlertController(title: "ToxID copied to clipboard. Head to Contacts in Antidote and paste it in the Add Contact page.",message: nil,preferredStyle:
.alert)
alertController.addAction(UIAlertAction(title: "OK", style: .cancel) {_ in })
self.present(alertController, animated: true, completion: nil)
// let message:String? = "Requesting Antidote support."
// let supportcontactid:String? = "0525CEA07DC84D4CEF9154FB785344D573CD558140BEC7216845FDAC77FFEF7A993E21186874"
// do {
// try submanagerFriends.sendFriendRequest(toAddress: supportcontactid, message: message)
// }
// catch _ as NSError {
// return
// }
print("Adding support contact")
}
}
extension FAQController: WKNavigationDelegate {
func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
spinner.startAnimating()
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
spinner.stopAnimating()
}
}
extension FAQController {
func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage message:
String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () ->
Void) {
let alertController = UIAlertController(title: message,message: nil,preferredStyle:
.alert)
alertController.addAction(UIAlertAction(title: "OK", style: .cancel) {_ in
completionHandler()})
self.present(alertController, animated: true, completion: nil)
}
}
private extension FAQController {
func createViews() {
let configuration = WKWebViewConfiguration()
webView = WKWebView(frame: CGRect.zero, configuration: configuration)
webView.navigationDelegate = self
view.addSubview(webView)
spinner = UIActivityIndicatorView(activityIndicatorStyle: .gray)
spinner.hidesWhenStopped = true
view.addSubview(spinner)
}
func installConstraints() {
webView.snp.makeConstraints {
$0.edges.equalTo(view)
}
spinner.snp.makeConstraints {
$0.center.equalTo(view)
}
}
}