MediaViewController.swift 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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> {
  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. setupNavigationBar()
  36. }
  37. private func setupNavigationBar() {
  38. if #available(iOS 11.0, *) {
  39. navigationController?.navigationBar.prefersLargeTitles = false
  40. }
  41. navigationController?.navigationBar.isTranslucent = false
  42. updateButtonsFor(viewControllers[currentIndex])
  43. }
  44. // MARK: - PagerTabStripDataSource
  45. override func viewControllers(for pagerTabStripController: PagerTabStripViewController) -> [UIViewController] {
  46. fatalError("this should only be used as subclass")
  47. }
  48. func updateButtonsFor(_ viewController: UIViewController) {
  49. var showButtons = false
  50. if let mediaCategoryViewController = viewController as? VLCMediaCategoryViewController,
  51. !mediaCategoryViewController.isEmptyCollectionView() {
  52. showButtons = true
  53. }
  54. navigationItem.rightBarButtonItems = showButtons ? rigthBarButtons : nil
  55. navigationItem.leftBarButtonItem = showButtons ? sortButton : nil
  56. }
  57. override func configure(cell: VLCLabelCell, for indicatorInfo: IndicatorInfo) {
  58. cell.iconLabel.text = indicatorInfo.title
  59. }
  60. override func updateIndicator(for viewController: PagerTabStripViewController, fromIndex: Int, toIndex: Int, withProgressPercentage progressPercentage: CGFloat, indexWasChanged: Bool) {
  61. if indexWasChanged {
  62. updateButtonsFor(viewControllers[toIndex])
  63. }
  64. super.updateIndicator(for: viewController, fromIndex: fromIndex, toIndex: toIndex, withProgressPercentage: progressPercentage, indexWasChanged: indexWasChanged)
  65. }
  66. override var preferredStatusBarStyle: UIStatusBarStyle {
  67. return PresentationTheme.current.colors.statusBarStyle
  68. }
  69. override func setEditing(_ editing: Bool, animated: Bool) {
  70. super.setEditing(editing, animated: animated)
  71. scrollingEnabled(!editing)
  72. navigationItem.leftBarButtonItem = editing ? nil : sortButton
  73. viewControllers[currentIndex].setEditing(editing, animated: animated)
  74. }
  75. @objc func handleSort() {
  76. if let mediaCategoryViewController = viewControllers[currentIndex] as? VLCMediaCategoryViewController {
  77. mediaCategoryViewController.handleSort()
  78. }
  79. }
  80. }