PlayingExternallyView.swift 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /*****************************************************************************
  2. * VLCPlayingExternallyView.swift
  3. * VLC for iOS
  4. *****************************************************************************
  5. * Copyright (c) 2018 VideoLAN. All rights reserved.
  6. * $Id$
  7. *
  8. * Authors: Carola Nitz <caro # videolan.org>
  9. *
  10. * Refer to the COPYING file of the official project for license.
  11. *****************************************************************************/
  12. import Foundation
  13. @IBDesignable class PlayingExternallyView: UIView {
  14. @IBInspectable var nibName: String?
  15. @IBOutlet weak var playingExternallyTitle: UILabel!
  16. @IBOutlet weak var playingExternallyDescription: UILabel!
  17. @objc var displayView: UIView? {
  18. return externalWindow?.rootViewController?.view
  19. }
  20. var externalWindow: UIWindow?
  21. @objc func shouldDisplay(_ show: Bool, movieView: UIView) {
  22. self.isHidden = !show
  23. if show {
  24. guard let screen = UIScreen.screens.count > 1 ? UIScreen.screens[1] : nil else {
  25. return
  26. }
  27. screen.overscanCompensation = .none
  28. externalWindow = UIWindow(frame: screen.bounds)
  29. guard let externalWindow = externalWindow else {
  30. return
  31. }
  32. externalWindow.rootViewController = VLCExternalDisplayController()
  33. externalWindow.rootViewController?.view.addSubview(movieView)
  34. externalWindow.screen = screen
  35. externalWindow.rootViewController?.view.frame = externalWindow.bounds
  36. movieView.frame = externalWindow.bounds
  37. } else {
  38. externalWindow = nil
  39. }
  40. externalWindow?.isHidden = !show
  41. }
  42. override func awakeFromNib() {
  43. super.awakeFromNib()
  44. xibSetup()
  45. playingExternallyTitle.text = NSLocalizedString("PLAYING_EXTERNALLY_TITLE", comment: "")
  46. playingExternallyDescription.text = NSLocalizedString("PLAYING_EXTERNALLY_DESC", comment:"")
  47. }
  48. func xibSetup() {
  49. guard let view = loadViewFromNib() else { return }
  50. view.frame = bounds
  51. view.autoresizingMask =
  52. [.flexibleWidth, .flexibleHeight]
  53. addSubview(view)
  54. }
  55. func loadViewFromNib() -> PlayingExternallyView? {
  56. guard let nibName = nibName else { return nil }
  57. let bundle = Bundle(for: type(of: self))
  58. let nib = UINib(nibName: nibName, bundle: bundle)
  59. return nib.instantiate(
  60. withOwner: self,
  61. options: nil).first as? PlayingExternallyView
  62. }
  63. @objc func updateUI(rendererItem: VLCRendererItem?, title: String) {
  64. if let rendererItem = rendererItem {
  65. playingExternallyTitle.text = title + NSLocalizedString("PLAYING_EXTERNALLY_ADDITION", comment:"\n should stay in every translation")
  66. playingExternallyDescription.text = rendererItem.name
  67. } else {
  68. playingExternallyTitle.text = title
  69. playingExternallyDescription.text = NSLocalizedString("PLAYING_EXTERNALLY_DESC", comment:"")
  70. }
  71. }
  72. }