VLCFullscreenMovieTVViewController.m 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  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. #import "VLCPlayerDisplayController.h"
  13. @interface VLCFullscreenMovieTVViewController ()
  14. {
  15. BOOL _playerIsSetup;
  16. BOOL _viewAppeared;
  17. }
  18. @end
  19. @implementation VLCFullscreenMovieTVViewController
  20. - (void)viewDidLoad {
  21. [super viewDidLoad];
  22. self.extendedLayoutIncludesOpaqueBars = YES;
  23. self.edgesForExtendedLayout = UIRectEdgeAll;
  24. NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
  25. [center addObserver:self
  26. selector:@selector(appBecameActive:)
  27. name:UIApplicationDidBecomeActiveNotification
  28. object:nil];
  29. [center addObserver:self
  30. selector:@selector(playbackDidStop:)
  31. name:VLCPlaybackControllerPlaybackDidStop
  32. object:nil];
  33. _movieView.userInteractionEnabled = NO;
  34. _playerIsSetup = NO;
  35. self.titleLabel.text = self.remainingTimeLabel.text = self.playedTimeLabel.text = @"";
  36. self.playbackProgressView.progress = .0;
  37. self.bottomOverlayView.hidden = YES;
  38. }
  39. #pragma mark - view events
  40. - (void)viewWillAppear:(BOOL)animated
  41. {
  42. [super viewWillAppear:animated];
  43. [self.navigationController setNavigationBarHidden:YES animated:animated];
  44. VLCPlaybackController *vpc = [VLCPlaybackController sharedInstance];
  45. vpc.delegate = self;
  46. [vpc recoverPlaybackState];
  47. }
  48. - (void)viewDidAppear:(BOOL)animated
  49. {
  50. [super viewDidAppear:animated];
  51. _viewAppeared = YES;
  52. VLCPlaybackController *vpc = [VLCPlaybackController sharedInstance];
  53. [vpc recoverDisplayedMetadata];
  54. vpc.videoOutputView = nil;
  55. vpc.videoOutputView = self.movieView;
  56. [[NSNotificationCenter defaultCenter] removeObserver:self];
  57. }
  58. - (void)viewWillDisappear:(BOOL)animated
  59. {
  60. VLCPlaybackController *vpc = [VLCPlaybackController sharedInstance];
  61. if (vpc.videoOutputView == self.movieView) {
  62. vpc.videoOutputView = nil;
  63. }
  64. _viewAppeared = NO;
  65. [self.navigationController setNavigationBarHidden:NO animated:YES];
  66. [super viewWillDisappear:animated];
  67. [[UIApplication sharedApplication] sendAction:@selector(closeFullscreenPlayback) to:nil from:self forEvent:nil];
  68. }
  69. - (BOOL)canBecomeFirstResponder
  70. {
  71. return YES;
  72. }
  73. #pragma mark - playback controller delegation
  74. - (void)prepareForMediaPlayback:(VLCPlaybackController *)controller
  75. {
  76. APLog(@"%s", __PRETTY_FUNCTION__);
  77. }
  78. - (void)appBecameActive:(NSNotification *)aNotification
  79. {
  80. VLCPlayerDisplayController *pdc = [VLCPlayerDisplayController sharedInstance];
  81. if (pdc.displayMode == VLCPlayerDisplayControllerDisplayModeFullscreen) {
  82. VLCPlaybackController *vpc = [VLCPlaybackController sharedInstance];
  83. [vpc recoverDisplayedMetadata];
  84. if (vpc.videoOutputView != self.movieView) {
  85. vpc.videoOutputView = nil;
  86. vpc.videoOutputView = self.movieView;
  87. }
  88. }
  89. }
  90. - (void)playbackDidStop:(NSNotification *)aNotification
  91. {
  92. [[UIApplication sharedApplication] sendAction:@selector(closeFullscreenPlayback) to:nil from:self forEvent:nil];
  93. }
  94. - (void)mediaPlayerStateChanged:(VLCMediaPlayerState)currentState
  95. isPlaying:(BOOL)isPlaying
  96. currentMediaHasTrackToChooseFrom:(BOOL)currentMediaHasTrackToChooseFrom
  97. currentMediaHasChapters:(BOOL)currentMediaHasChapters
  98. forPlaybackController:(VLCPlaybackController *)controller
  99. {
  100. if (controller.isPlaying && !self.bufferingLabel.hidden) {
  101. [UIView animateWithDuration:.3 animations:^{
  102. self.bufferingLabel.hidden = YES;
  103. self.bottomOverlayView.hidden = NO;
  104. }];
  105. }
  106. }
  107. - (void)displayMetadataForPlaybackController:(VLCPlaybackController *)controller
  108. title:(NSString *)title
  109. artwork:(UIImage *)artwork
  110. artist:(NSString *)artist
  111. album:(NSString *)album
  112. audioOnly:(BOOL)audioOnly
  113. {
  114. self.titleLabel.text = title;
  115. }
  116. - (void)playbackPositionUpdated:(VLCPlaybackController *)controller
  117. {
  118. VLCMediaPlayer *mediaPlayer = [VLCPlaybackController sharedInstance].mediaPlayer;
  119. self.remainingTimeLabel.text = [[mediaPlayer remainingTime] stringValue];
  120. self.playedTimeLabel.text = [[mediaPlayer time] stringValue];
  121. self.playbackProgressView.progress = mediaPlayer.position;
  122. }
  123. @end