VLCTabBarCoordinator.swift 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. /*****************************************************************************
  2. * VLCTabbarCooordinator.swift
  3. * VLC for iOS
  4. *****************************************************************************
  5. * Copyright (c) 2018 VideoLAN. All rights reserved.
  6. * $Id$
  7. *
  8. * Authors: Carola Nitz <nitz.carola # gmail.com>
  9. *
  10. * Refer to the COPYING file of the official project for license.
  11. *****************************************************************************/
  12. import Foundation
  13. class VLCTabbarCooordinator: NSObject, VLCMediaViewControllerDelegate, UITabBarControllerDelegate {
  14. private var childCoordinators: [NSObject] = []
  15. private var tabBarController: UITabBarController
  16. private var services: Services
  17. private let displayController = VLCPlayerDisplayController()
  18. public init(tabBarController: UITabBarController, services: Services) {
  19. self.tabBarController = tabBarController
  20. self.services = services
  21. super.init()
  22. self.tabBarController.delegate = self
  23. NotificationCenter.default.addObserver(self, selector: #selector(updateTheme), name: .VLCThemeDidChangeNotification, object: nil)
  24. }
  25. @objc public func start() {
  26. setupViewControllers()
  27. updateTheme()
  28. }
  29. @objc func updateTheme() {
  30. tabBarController.tabBar.barTintColor = PresentationTheme.current.colors.tabBarColor
  31. customizeMoreViewController()
  32. }
  33. func customizeMoreViewController() {
  34. if let UITabBarCustomizeViewClass = NSClassFromString("UITabBarCustomizeView") {
  35. for subview in tabBarController.view.subviews where subview.isKind(of: UITabBarCustomizeViewClass) {
  36. subview.backgroundColor = PresentationTheme.current.colors.background
  37. subview.tintColor = PresentationTheme.current.colors.orangeUI
  38. }
  39. }
  40. }
  41. func tabBarController(_ tabBarController: UITabBarController, willBeginCustomizing viewControllers: [UIViewController]) {
  42. customizeMoreViewController()
  43. }
  44. func setupViewControllers() {
  45. tabBarController.addChildViewController(displayController)
  46. tabBarController.view.addSubview(displayController.view)
  47. displayController.view.layoutMargins = UIEdgeInsets(top:0, left:0, bottom:tabBarController.tabBar.frame.size.height, right:0)
  48. displayController.didMove(toParentViewController: tabBarController)
  49. let videoVC = VLCMediaViewController(services: services)
  50. //this should probably not be the delegate
  51. videoVC.delegate = self
  52. videoVC.title = NSLocalizedString("Video", comment: "")
  53. videoVC.tabBarItem = UITabBarItem(
  54. title: NSLocalizedString("Video", comment: ""),
  55. image: UIImage(named: "TVShowsIcon"),
  56. selectedImage: UIImage(named: "TVShowsIcon"))
  57. // Audio
  58. let audioVC = VLCMediaViewController(services: services)
  59. //this should probably not be the delegate
  60. audioVC.delegate = self
  61. audioVC.title = NSLocalizedString("Audio", comment: "")
  62. audioVC.tabBarItem = UITabBarItem(
  63. title: NSLocalizedString("Audio", comment: ""),
  64. image: UIImage(named: "MusicAlbums"),
  65. selectedImage:UIImage(named: "MusicAlbums"))
  66. //Serverlist
  67. let serverVC = VLCServerListViewController(nibName: nil, bundle: nil)
  68. serverVC.title = NSLocalizedString("LOCAL_NETWORK", comment: "")
  69. serverVC.tabBarItem = UITabBarItem(
  70. title: NSLocalizedString("LOCAL_NETWORK", comment: ""),
  71. image: UIImage(named: "Local"),
  72. selectedImage: UIImage(named: "Local"))
  73. //CloudServices
  74. let cloudVC = VLCCloudServicesTableViewController(nibName: "VLCCloudServicesTableViewController", bundle: Bundle.main)
  75. cloudVC.title = NSLocalizedString("CLOUD_SERVICES", comment: "")
  76. cloudVC.tabBarItem = UITabBarItem(
  77. title: NSLocalizedString("CLOUD_SERVICES", comment: ""),
  78. image: UIImage(named: "iCloudIcon"),
  79. selectedImage: UIImage(named: "iCloudIcon"))
  80. //Settings
  81. let settingsVC = VLCSettingsController()
  82. settingsVC.title = NSLocalizedString("Settings", comment: "")
  83. settingsVC.tabBarItem = UITabBarItem(
  84. title: NSLocalizedString("Settings", comment: ""),
  85. image: UIImage(named: "Settings"),
  86. selectedImage: UIImage(named: "Settings"))
  87. //Download
  88. let downloadVC = VLCDownloadViewController()
  89. downloadVC.title = NSLocalizedString("DOWNLOAD_FROM_HTTP", comment:"")
  90. downloadVC.tabBarItem = UITabBarItem(
  91. title: NSLocalizedString("DOWNLOAD_FROM_HTTP", comment: ""),
  92. image: UIImage(named: "Downloads"),
  93. selectedImage: UIImage(named: "Downloads"))
  94. //Streaming
  95. let streamVC = VLCOpenNetworkStreamViewController(nibName: "VLCOpenNetworkStreamViewController", bundle: Bundle.main)
  96. streamVC.title = NSLocalizedString("OPEN_NETWORK", comment: "")
  97. streamVC.tabBarItem = UITabBarItem(
  98. title: NSLocalizedString("OPEN_NETWORK", comment: ""),
  99. image: UIImage(named: "OpenNetStream"),
  100. selectedImage: UIImage(named: "OpenNetStream"))
  101. //About
  102. let aboutVC = VLCAboutViewController()
  103. aboutVC.title = NSLocalizedString("ABOUT_APP", comment: "")
  104. aboutVC.tabBarItem = UITabBarItem(
  105. title: NSLocalizedString("ABOUT_APP", comment: ""),
  106. image: coneIcon(),
  107. selectedImage: coneIcon())
  108. let controllers = [audioVC, serverVC, videoVC, settingsVC, cloudVC, downloadVC, streamVC, aboutVC]
  109. tabBarController.viewControllers = controllers.map { UINavigationController(rootViewController: $0)}
  110. }
  111. func coneIcon() -> UIImage? {
  112. let calendar = NSCalendar(calendarIdentifier: .gregorian)
  113. if let dayOfYear = calendar?.ordinality(of: .day, in: .year, for: Date()) {
  114. return dayOfYear >= 354 ? UIImage(named: "vlc-xmas") : UIImage(named: "menuCone")
  115. }
  116. return nil
  117. }
  118. // MARK: - VLCMediaViewControllerDelegate
  119. func mediaViewControllerDidSelectMediaObject(_ VLCMediaViewController: VLCMediaViewController, mediaObject: NSManagedObject) {
  120. playMedia(media:mediaObject)
  121. }
  122. func mediaViewControllerDidSelectSort(_ VLCMediaViewController: VLCMediaViewController) {
  123. showSortOptions()
  124. }
  125. func playMedia(media: NSManagedObject) {
  126. //that should go into a Coordinator itself
  127. let vpc = VLCPlaybackController.sharedInstance()
  128. vpc?.playMediaLibraryObject(media)
  129. }
  130. func showSortOptions() {
  131. //This should be in a subclass
  132. let sortOptionsAlertController = UIAlertController(title: NSLocalizedString("Sort by", comment: ""), message: nil, preferredStyle: .actionSheet)
  133. let sortByNameAction = UIAlertAction(title: SortOption.alphabetically.localizedDescription, style: .default) { action in
  134. }
  135. let sortBySizeAction = UIAlertAction(title: SortOption.size.localizedDescription, style: .default) { action in
  136. }
  137. let sortbyDateAction = UIAlertAction(title: SortOption.insertonDate.localizedDescription, style: .default) { action in
  138. }
  139. let cancelAction = UIAlertAction(title: NSLocalizedString("Cancel", comment: ""), style: .cancel, handler: nil)
  140. sortOptionsAlertController.addAction(sortByNameAction)
  141. sortOptionsAlertController.addAction(sortbyDateAction)
  142. sortOptionsAlertController.addAction(sortBySizeAction)
  143. sortOptionsAlertController.addAction(cancelAction)
  144. sortOptionsAlertController.view.tintColor = UIColor.vlcOrangeTint()
  145. tabBarController.present(sortOptionsAlertController, animated: true)
  146. }
  147. }