MediaViewController.swift 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. /*****************************************************************************
  2. * MediaViewController.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 UIKit
  13. class VLCMediaViewController: VLCPagingViewController<VLCLabelCell>, MediaCategoryViewControllerDelegate {
  14. var services: Services
  15. private var rendererButton: UIButton
  16. private var sortButton: UIBarButtonItem?
  17. private var rigthBarButtons: [UIBarButtonItem]?
  18. init(services: Services) {
  19. self.services = services
  20. rendererButton = services.rendererDiscovererManager.setupRendererButton()
  21. super.init(nibName: nil, bundle: nil)
  22. rigthBarButtons = [editButtonItem, UIBarButtonItem(customView: rendererButton)]
  23. sortButton = UIBarButtonItem(title: NSLocalizedString("SORT", comment: ""),
  24. style: .plain,
  25. target: self,
  26. action: #selector(handleSort))
  27. }
  28. override func viewDidLoad() {
  29. changeCurrentIndexProgressive = { (oldCell: VLCLabelCell?, newCell: VLCLabelCell?, progressPercentage: CGFloat, changeCurrentIndex: Bool, animated: Bool) in
  30. guard changeCurrentIndex == true else { return }
  31. oldCell?.iconLabel.textColor = PresentationTheme.current.colors.cellDetailTextColor
  32. newCell?.iconLabel.textColor = PresentationTheme.current.colors.orangeUI
  33. }
  34. super.viewDidLoad()
  35. viewControllers.forEach {
  36. ($0 as? VLCMediaCategoryViewController)?.delegate = self
  37. }
  38. setupNavigationBar()
  39. }
  40. private func setupNavigationBar() {
  41. if #available(iOS 11.0, *) {
  42. navigationController?.navigationBar.prefersLargeTitles = false
  43. }
  44. navigationController?.navigationBar.isTranslucent = false
  45. updateButtonsFor(viewControllers[currentIndex])
  46. }
  47. // MARK: - MediaCatgoryViewControllerDelegate
  48. func needsToUpdateNavigationbarIfNeeded(_ viewController: VLCMediaCategoryViewController) {
  49. if viewController == viewControllers[currentIndex] {
  50. updateButtonsFor(viewController)
  51. }
  52. }
  53. // MARK: - PagerTabStripDataSource
  54. override func viewControllers(for pagerTabStripController: PagerTabStripViewController) -> [UIViewController] {
  55. fatalError("this should only be used as subclass")
  56. }
  57. func updateButtonsFor(_ viewController: UIViewController) {
  58. var showButtons = false
  59. if let mediaCategoryViewController = viewController as? VLCMediaCategoryViewController,
  60. !mediaCategoryViewController.isEmptyCollectionView()
  61. && !mediaCategoryViewController.isSearching {
  62. showButtons = true
  63. }
  64. navigationItem.rightBarButtonItems = showButtons ? rigthBarButtons : nil
  65. navigationItem.leftBarButtonItem = showButtons ? sortButton : nil
  66. }
  67. override func configure(cell: VLCLabelCell, for indicatorInfo: IndicatorInfo) {
  68. cell.iconLabel.text = indicatorInfo.title
  69. }
  70. override func updateIndicator(for viewController: PagerTabStripViewController, fromIndex: Int, toIndex: Int, withProgressPercentage progressPercentage: CGFloat, indexWasChanged: Bool) {
  71. if indexWasChanged {
  72. updateButtonsFor(viewControllers[toIndex])
  73. }
  74. super.updateIndicator(for: viewController, fromIndex: fromIndex, toIndex: toIndex, withProgressPercentage: progressPercentage, indexWasChanged: indexWasChanged)
  75. }
  76. override var preferredStatusBarStyle: UIStatusBarStyle {
  77. return PresentationTheme.current.colors.statusBarStyle
  78. }
  79. override func setEditing(_ editing: Bool, animated: Bool) {
  80. super.setEditing(editing, animated: animated)
  81. scrollingEnabled(!editing)
  82. navigationItem.leftBarButtonItem = editing ? nil : sortButton
  83. viewControllers[currentIndex].setEditing(editing, animated: animated)
  84. }
  85. @objc func handleSort() {
  86. if let mediaCategoryViewController = viewControllers[currentIndex] as? VLCMediaCategoryViewController {
  87. mediaCategoryViewController.handleSort()
  88. }
  89. }
  90. }