MediaViewController.swift 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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. showButtons = true
  62. }
  63. navigationItem.rightBarButtonItems = showButtons ? rigthBarButtons : nil
  64. navigationItem.leftBarButtonItem = showButtons ? sortButton : nil
  65. }
  66. override func configure(cell: VLCLabelCell, for indicatorInfo: IndicatorInfo) {
  67. cell.iconLabel.text = indicatorInfo.title
  68. }
  69. override func updateIndicator(for viewController: PagerTabStripViewController, fromIndex: Int, toIndex: Int, withProgressPercentage progressPercentage: CGFloat, indexWasChanged: Bool) {
  70. if indexWasChanged {
  71. updateButtonsFor(viewControllers[toIndex])
  72. }
  73. super.updateIndicator(for: viewController, fromIndex: fromIndex, toIndex: toIndex, withProgressPercentage: progressPercentage, indexWasChanged: indexWasChanged)
  74. }
  75. override var preferredStatusBarStyle: UIStatusBarStyle {
  76. return PresentationTheme.current.colors.statusBarStyle
  77. }
  78. override func setEditing(_ editing: Bool, animated: Bool) {
  79. super.setEditing(editing, animated: animated)
  80. scrollingEnabled(!editing)
  81. navigationItem.leftBarButtonItem = editing ? nil : sortButton
  82. viewControllers[currentIndex].setEditing(editing, animated: animated)
  83. }
  84. @objc func handleSort() {
  85. if let mediaCategoryViewController = viewControllers[currentIndex] as? VLCMediaCategoryViewController {
  86. mediaCategoryViewController.handleSort()
  87. }
  88. }
  89. }