VLCFullscreenMovieTVViewController.m 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. /*****************************************************************************
  2. * VLC for iOS
  3. *****************************************************************************
  4. * Copyright (c) 2015 VideoLAN. All rights reserved.
  5. * $Id$
  6. *
  7. * Authors: Felix Paul Kühne <fkuehne # videolan.org>
  8. *
  9. * Refer to the COPYING file of the official project for license.
  10. *****************************************************************************/
  11. #import "VLCFullscreenMovieTVViewController.h"
  12. @interface VLCFullscreenMovieTVViewController ()
  13. {
  14. BOOL _playerIsSetup;
  15. BOOL _viewAppeared;
  16. }
  17. @end
  18. @implementation VLCFullscreenMovieTVViewController
  19. + (instancetype)fullscreenMovieTVViewController
  20. {
  21. return [[self alloc] initWithNibName:nil bundle:nil];
  22. }
  23. - (void)viewDidLoad {
  24. [super viewDidLoad];
  25. self.extendedLayoutIncludesOpaqueBars = YES;
  26. self.edgesForExtendedLayout = UIRectEdgeAll;
  27. NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
  28. [center addObserver:self
  29. selector:@selector(playbackDidStop:)
  30. name:VLCPlaybackControllerPlaybackDidStop
  31. object:nil];
  32. _movieView.userInteractionEnabled = NO;
  33. _playerIsSetup = NO;
  34. self.titleLabel.text = @"";
  35. self.transportBar.bufferStartFraction = 0.0;
  36. self.transportBar.bufferEndFraction = 1.0;
  37. self.transportBar.playbackFraction = 0.0;
  38. self.transportBar.scrubbingFraction = 0.0;
  39. self.bottomOverlayView.hidden = YES;
  40. UITapGestureRecognizer *playpauseGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(playPausePressed)];
  41. playpauseGesture.allowedPressTypes = @[@(UIPressTypePlayPause)];
  42. [self.view addGestureRecognizer:playpauseGesture];
  43. }
  44. #pragma mark - view events
  45. - (void)viewWillAppear:(BOOL)animated
  46. {
  47. [super viewWillAppear:animated];
  48. [self.navigationController setNavigationBarHidden:YES animated:animated];
  49. VLCPlaybackController *vpc = [VLCPlaybackController sharedInstance];
  50. vpc.delegate = self;
  51. [vpc recoverPlaybackState];
  52. }
  53. - (void)viewDidAppear:(BOOL)animated
  54. {
  55. [super viewDidAppear:animated];
  56. _viewAppeared = YES;
  57. VLCPlaybackController *vpc = [VLCPlaybackController sharedInstance];
  58. [vpc recoverDisplayedMetadata];
  59. vpc.videoOutputView = nil;
  60. vpc.videoOutputView = self.movieView;
  61. [[NSNotificationCenter defaultCenter] removeObserver:self];
  62. }
  63. - (void)viewWillDisappear:(BOOL)animated
  64. {
  65. VLCPlaybackController *vpc = [VLCPlaybackController sharedInstance];
  66. if (vpc.videoOutputView == self.movieView) {
  67. vpc.videoOutputView = nil;
  68. }
  69. _viewAppeared = NO;
  70. [self.navigationController setNavigationBarHidden:NO animated:YES];
  71. [vpc stopPlayback];
  72. [super viewWillDisappear:animated];
  73. }
  74. - (BOOL)canBecomeFirstResponder
  75. {
  76. return YES;
  77. }
  78. #pragma mark - UIActions
  79. - (void) playPausePressed
  80. {
  81. VLCPlaybackController *vpc = [VLCPlaybackController sharedInstance];
  82. [vpc playPause];
  83. }
  84. #pragma mark - playback controller delegation
  85. - (void)prepareForMediaPlayback:(VLCPlaybackController *)controller
  86. {
  87. APLog(@"%s", __PRETTY_FUNCTION__);
  88. }
  89. - (void)playbackDidStop:(NSNotification *)aNotification
  90. {
  91. [self dismissViewControllerAnimated:YES completion:nil];
  92. }
  93. - (void)mediaPlayerStateChanged:(VLCMediaPlayerState)currentState
  94. isPlaying:(BOOL)isPlaying
  95. currentMediaHasTrackToChooseFrom:(BOOL)currentMediaHasTrackToChooseFrom
  96. currentMediaHasChapters:(BOOL)currentMediaHasChapters
  97. forPlaybackController:(VLCPlaybackController *)controller
  98. {
  99. switch (currentState) {
  100. case VLCMediaPlayerStateBuffering:
  101. [self.activityIndicator startAnimating];
  102. self.activityIndicator.alpha = 1.0;
  103. break;
  104. default:
  105. [self.activityIndicator stopAnimating];
  106. self.activityIndicator.alpha = 0.0;
  107. break;
  108. }
  109. if (controller.isPlaying && !self.bufferingLabel.hidden) {
  110. [self.activityIndicator stopAnimating];
  111. [UIView animateWithDuration:.3 animations:^{
  112. self.bufferingLabel.hidden = YES;
  113. self.bottomOverlayView.hidden = NO;
  114. }];
  115. }
  116. }
  117. - (void)displayMetadataForPlaybackController:(VLCPlaybackController *)controller
  118. title:(NSString *)title
  119. artwork:(UIImage *)artwork
  120. artist:(NSString *)artist
  121. album:(NSString *)album
  122. audioOnly:(BOOL)audioOnly
  123. {
  124. self.titleLabel.text = title;
  125. }
  126. - (void)playbackPositionUpdated:(VLCPlaybackController *)controller
  127. {
  128. VLCMediaPlayer *mediaPlayer = [VLCPlaybackController sharedInstance].mediaPlayer;
  129. VLCTransportBar *transportBar = self.transportBar;
  130. transportBar.remainingTimeLabel.text = [[mediaPlayer remainingTime] stringValue];
  131. transportBar.markerTimeLabel.text = [[mediaPlayer time] stringValue];
  132. transportBar.playbackFraction = mediaPlayer.position;
  133. }
  134. @end