123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- /*****************************************************************************
- * VLCTabbarCooordinator.swift
- * VLC for iOS
- *****************************************************************************
- * Copyright (c) 2018 VideoLAN. All rights reserved.
- * $Id$
- *
- * Authors: Carola Nitz <nitz.carola # gmail.com>
- *
- * Refer to the COPYING file of the official project for license.
- *****************************************************************************/
- import Foundation
- class VLCTabbarCooordinator: NSObject, VLCMediaViewControllerDelegate, UITabBarControllerDelegate {
- private var childCoordinators: [NSObject] = []
- private var tabBarController: UITabBarController
- private var services: Services
- private let displayController = VLCPlayerDisplayController()
- public init(tabBarController: UITabBarController, services: Services) {
- self.tabBarController = tabBarController
- self.services = services
- super.init()
- self.tabBarController.delegate = self
- NotificationCenter.default.addObserver(self, selector: #selector(updateTheme), name: .VLCThemeDidChangeNotification, object: nil)
- }
- @objc public func start() {
- setupViewControllers()
- updateTheme()
- }
- @objc func updateTheme() {
- tabBarController.tabBar.barTintColor = PresentationTheme.current.colors.tabBarColor
- customizeMoreViewController()
- }
- func customizeMoreViewController() {
- if let UITabBarCustomizeViewClass = NSClassFromString("UITabBarCustomizeView") {
- for subview in tabBarController.view.subviews where subview.isKind(of: UITabBarCustomizeViewClass) {
- subview.backgroundColor = PresentationTheme.current.colors.background
- subview.tintColor = PresentationTheme.current.colors.orangeUI
- }
- }
- }
- func tabBarController(_ tabBarController: UITabBarController, willBeginCustomizing viewControllers: [UIViewController]) {
- customizeMoreViewController()
- }
- func setupViewControllers() {
- tabBarController.addChildViewController(displayController)
- tabBarController.view.addSubview(displayController.view)
- displayController.view.layoutMargins = UIEdgeInsets(top:0, left:0, bottom:tabBarController.tabBar.frame.size.height, right:0)
- displayController.didMove(toParentViewController: tabBarController)
- let videoVC = VLCMediaViewController(services: services)
- //this should probably not be the delegate
- videoVC.delegate = self
- videoVC.title = NSLocalizedString("Video", comment: "")
- videoVC.tabBarItem = UITabBarItem(
- title: NSLocalizedString("Video", comment: ""),
- image: UIImage(named: "TVShowsIcon"),
- selectedImage: UIImage(named: "TVShowsIcon"))
- // Audio
- let audioVC = VLCMediaViewController(services: services)
- //this should probably not be the delegate
- audioVC.delegate = self
- audioVC.title = NSLocalizedString("Audio", comment: "")
- audioVC.tabBarItem = UITabBarItem(
- title: NSLocalizedString("Audio", comment: ""),
- image: UIImage(named: "MusicAlbums"),
- selectedImage:UIImage(named: "MusicAlbums"))
- //Serverlist
- let serverVC = VLCServerListViewController(nibName: nil, bundle: nil)
- serverVC.title = NSLocalizedString("LOCAL_NETWORK", comment: "")
- serverVC.tabBarItem = UITabBarItem(
- title: NSLocalizedString("LOCAL_NETWORK", comment: ""),
- image: UIImage(named: "Local"),
- selectedImage: UIImage(named: "Local"))
- //CloudServices
- let cloudVC = VLCCloudServicesTableViewController(nibName: "VLCCloudServicesTableViewController", bundle: Bundle.main)
- cloudVC.title = NSLocalizedString("CLOUD_SERVICES", comment: "")
- cloudVC.tabBarItem = UITabBarItem(
- title: NSLocalizedString("CLOUD_SERVICES", comment: ""),
- image: UIImage(named: "iCloudIcon"),
- selectedImage: UIImage(named: "iCloudIcon"))
- //Settings
- let settingsVC = VLCSettingsController()
- settingsVC.title = NSLocalizedString("Settings", comment: "")
- settingsVC.tabBarItem = UITabBarItem(
- title: NSLocalizedString("Settings", comment: ""),
- image: UIImage(named: "Settings"),
- selectedImage: UIImage(named: "Settings"))
- //Download
- let downloadVC = VLCDownloadViewController()
- downloadVC.title = NSLocalizedString("DOWNLOAD_FROM_HTTP", comment:"")
- downloadVC.tabBarItem = UITabBarItem(
- title: NSLocalizedString("DOWNLOAD_FROM_HTTP", comment: ""),
- image: UIImage(named: "Downloads"),
- selectedImage: UIImage(named: "Downloads"))
- //Streaming
- let streamVC = VLCOpenNetworkStreamViewController(nibName: "VLCOpenNetworkStreamViewController", bundle: Bundle.main)
- streamVC.title = NSLocalizedString("OPEN_NETWORK", comment: "")
- streamVC.tabBarItem = UITabBarItem(
- title: NSLocalizedString("OPEN_NETWORK", comment: ""),
- image: UIImage(named: "OpenNetStream"),
- selectedImage: UIImage(named: "OpenNetStream"))
- //About
- let aboutVC = VLCAboutViewController()
- aboutVC.title = NSLocalizedString("ABOUT_APP", comment: "")
- aboutVC.tabBarItem = UITabBarItem(
- title: NSLocalizedString("ABOUT_APP", comment: ""),
- image: coneIcon(),
- selectedImage: coneIcon())
- let controllers = [audioVC, serverVC, videoVC, settingsVC, cloudVC, downloadVC, streamVC, aboutVC]
- tabBarController.viewControllers = controllers.map { UINavigationController(rootViewController: $0)}
- }
- func coneIcon() -> UIImage? {
- let calendar = NSCalendar(calendarIdentifier: .gregorian)
- if let dayOfYear = calendar?.ordinality(of: .day, in: .year, for: Date()) {
- return dayOfYear >= 354 ? UIImage(named: "vlc-xmas") : UIImage(named: "menuCone")
- }
- return nil
- }
- // MARK: - VLCMediaViewControllerDelegate
- func mediaViewControllerDidSelectMediaObject(_ VLCMediaViewController: VLCMediaViewController, mediaObject: NSManagedObject) {
- playMedia(media:mediaObject)
- }
- func mediaViewControllerDidSelectSort(_ VLCMediaViewController: VLCMediaViewController) {
- showSortOptions()
- }
- func playMedia(media: NSManagedObject) {
- //that should go into a Coordinator itself
- let vpc = VLCPlaybackController.sharedInstance()
- vpc?.playMediaLibraryObject(media)
- }
- func showSortOptions() {
- //This should be in a subclass
- let sortOptionsAlertController = UIAlertController(title: NSLocalizedString("Sort by", comment: ""), message: nil, preferredStyle: .actionSheet)
- let sortByNameAction = UIAlertAction(title: SortOption.alphabetically.localizedDescription, style: .default) { action in
- }
- let sortBySizeAction = UIAlertAction(title: SortOption.size.localizedDescription, style: .default) { action in
- }
- let sortbyDateAction = UIAlertAction(title: SortOption.insertonDate.localizedDescription, style: .default) { action in
- }
- let cancelAction = UIAlertAction(title: NSLocalizedString("Cancel", comment: ""), style: .cancel, handler: nil)
- sortOptionsAlertController.addAction(sortByNameAction)
- sortOptionsAlertController.addAction(sortbyDateAction)
- sortOptionsAlertController.addAction(sortBySizeAction)
- sortOptionsAlertController.addAction(cancelAction)
- sortOptionsAlertController.view.tintColor = UIColor.vlcOrangeTint()
- tabBarController.present(sortOptionsAlertController, animated: true)
- }
- }
|