ConnectivityViewController.swift 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import UIKit
  2. import DcCore
  3. class ConnectivityViewController: WebViewViewController {
  4. private let dcContext: DcContext
  5. private var connectivityChangedObserver: NSObjectProtocol?
  6. init(dcContext: DcContext) {
  7. self.dcContext = dcContext
  8. super.init()
  9. }
  10. required init?(coder: NSCoder) {
  11. fatalError("init(coder:) has not been implemented")
  12. }
  13. // called only once after loading
  14. override func viewDidLoad() {
  15. super.viewDidLoad()
  16. self.title = String.localized("connectivity")
  17. self.webView.isOpaque = false
  18. self.webView.backgroundColor = .clear
  19. view.backgroundColor = DcColors.defaultBackgroundColor
  20. }
  21. // called everytime the view will appear
  22. override func viewWillAppear(_ animated: Bool) {
  23. // set connectivity changed observer before we acutally init html,
  24. // otherwise, we may miss events and the html is not correct.
  25. connectivityChangedObserver = NotificationCenter.default.addObserver(forName: dcNotificationConnectivityChanged,
  26. object: nil,
  27. queue: nil) { [weak self] _ in
  28. self?.loadHtml()
  29. }
  30. loadHtml()
  31. }
  32. override func viewDidDisappear(_ animated: Bool) {
  33. if let connectivityChangedObserver = self.connectivityChangedObserver {
  34. NotificationCenter.default.removeObserver(connectivityChangedObserver)
  35. }
  36. }
  37. private func loadHtml() {
  38. DispatchQueue.global(qos: .userInitiated).async { [weak self] in
  39. guard let self = self else { return }
  40. let html = self.dcContext.getConnectivityHtml()
  41. .replacingOccurrences(of: "</style>", with:
  42. """
  43. body {
  44. font-size: 13pt;
  45. font-family: -apple-system, sans-serif;
  46. padding: 0 .5rem .5rem .5rem;
  47. -webkit-text-size-adjust: none;
  48. }
  49. @media (prefers-color-scheme: dark) {
  50. body {
  51. background-color: black !important;
  52. color: #eee;
  53. }
  54. }
  55. </style>
  56. """)
  57. DispatchQueue.main.async {
  58. self.webView.loadHTMLString(html, baseURL: nil)
  59. }
  60. }
  61. }
  62. }