VLCMiniPlaybackView.m 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. /*****************************************************************************
  2. * VLCMiniPlaybackView.m
  3. * VLC for iOS
  4. *****************************************************************************
  5. * Copyright (c) 2015 VideoLAN. All rights reserved.
  6. * $Id$
  7. *
  8. * Author: Felix Paul Kühne <fkuehne # videolan.org>
  9. *
  10. * Refer to the COPYING file of the official project for license.
  11. *****************************************************************************/
  12. #import "VLCMiniPlaybackView.h"
  13. #import "VLCPlaybackController.h"
  14. #import "VLCAppDelegate.h"
  15. #import "VLCPlaylistViewController.h"
  16. @interface VLCMiniPlaybackView () <VLCPlaybackControllerDelegate>
  17. {
  18. UIImageView *_artworkView;
  19. UIView *_videoView;
  20. UIButton *_previousButton;
  21. UIButton *_playPauseButton;
  22. UIButton *_nextButton;
  23. UIButton *_expandButton;
  24. UILabel *_metaDataLabel;
  25. }
  26. @end
  27. @implementation VLCMiniPlaybackView
  28. - (instancetype)initWithFrame:(CGRect)viewFrame
  29. {
  30. self = [super initWithFrame:viewFrame];
  31. if (!self)
  32. return self;
  33. CGRect previousRect;
  34. CGFloat buttonSize = 44.;
  35. _artworkView = [[UIImageView alloc] initWithFrame:CGRectMake(0., 0., 60., 60.)];
  36. _artworkView.autoresizingMask = UIViewAutoresizingFlexibleRightMargin;
  37. [self addSubview:_artworkView];
  38. /* build buttons from right to left */
  39. _expandButton = [UIButton buttonWithType:UIButtonTypeCustom];
  40. [_expandButton setImage:[UIImage imageNamed:@"ratioIcon"] forState:UIControlStateNormal];
  41. _expandButton.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
  42. [_expandButton addTarget:self action:@selector(pushFullPlaybackView:) forControlEvents:UIControlEventTouchUpInside];
  43. _expandButton.frame = previousRect = CGRectMake(viewFrame.size.width - buttonSize, (viewFrame.size.height - buttonSize) / 2., buttonSize, buttonSize);
  44. [self addSubview:_expandButton];
  45. _nextButton = [UIButton buttonWithType:UIButtonTypeCustom];
  46. [_nextButton setImage:[UIImage imageNamed:@"forwardIcon"] forState:UIControlStateNormal];
  47. [_nextButton sizeToFit];
  48. _nextButton.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
  49. [_nextButton addTarget:self action:@selector(nextAction:) forControlEvents:UIControlEventTouchUpInside];
  50. _nextButton.frame = previousRect = CGRectMake(previousRect.origin.x - buttonSize, (viewFrame.size.height - buttonSize) / 2., buttonSize, buttonSize);
  51. [self addSubview:_nextButton];
  52. _playPauseButton = [UIButton buttonWithType:UIButtonTypeCustom];
  53. [_playPauseButton setImage:[UIImage imageNamed:@"playIcon"] forState:UIControlStateNormal];
  54. [_playPauseButton sizeToFit];
  55. _playPauseButton.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
  56. [_playPauseButton addTarget:self action:@selector(playPauseAction:) forControlEvents:UIControlEventTouchUpInside];
  57. _playPauseButton.frame = previousRect = CGRectMake(previousRect.origin.x - buttonSize, (viewFrame.size.height - buttonSize) / 2., buttonSize, buttonSize);
  58. [self addSubview:_playPauseButton];
  59. _previousButton = [UIButton buttonWithType:UIButtonTypeCustom];
  60. [_previousButton setImage:[UIImage imageNamed:@"backIcon"] forState:UIControlStateNormal];
  61. [_previousButton sizeToFit];
  62. _previousButton.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
  63. [_previousButton addTarget:self action:@selector(previousAction:) forControlEvents:UIControlEventTouchUpInside];
  64. _previousButton.frame = previousRect = CGRectMake(previousRect.origin.x - buttonSize, (viewFrame.size.height - buttonSize) / 2., buttonSize, buttonSize);
  65. [self addSubview:_previousButton];
  66. CGFloat artworkViewWidth = _artworkView.frame.size.width;
  67. _metaDataLabel = [[UILabel alloc] initWithFrame:CGRectMake(artworkViewWidth, 0., previousRect.origin.x - artworkViewWidth, viewFrame.size.height)];
  68. _metaDataLabel.font = [UIFont systemFontOfSize:12.];
  69. _metaDataLabel.textColor = [UIColor VLCLightTextColor];
  70. _metaDataLabel.numberOfLines = 0;
  71. _metaDataLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth;
  72. [self addSubview:_metaDataLabel];
  73. return self;
  74. }
  75. - (void)previousAction:(id)sender
  76. {
  77. [[VLCPlaybackController sharedInstance] backward];
  78. }
  79. - (void)playPauseAction:(id)sender
  80. {
  81. [[VLCPlaybackController sharedInstance] playPause];
  82. }
  83. - (void)nextAction:(id)sender
  84. {
  85. [[VLCPlaybackController sharedInstance] forward];
  86. }
  87. - (void)pushFullPlaybackView:(id)sender
  88. {
  89. [VLCPlaybackController sharedInstance].videoOutputView = nil;
  90. VLCAppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
  91. [appDelegate presentMovieViewController];
  92. }
  93. - (void)setupForWork
  94. {
  95. VLCPlaybackController *playbackController = [VLCPlaybackController sharedInstance];
  96. if (playbackController.isPlaying)
  97. [_playPauseButton setImage:[UIImage imageNamed:@"pauseIcon"] forState:UIControlStateNormal];
  98. else
  99. [_playPauseButton setImage:[UIImage imageNamed:@"playIcon"] forState:UIControlStateNormal];
  100. playbackController.delegate = self;
  101. [playbackController recoverDisplayedMetadata];
  102. }
  103. - (void)mediaPlayerStateChanged:(VLCMediaPlayerState)currentState
  104. isPlaying:(BOOL)isPlaying
  105. currentMediaHasTrackToChooseFrom:(BOOL)currentMediaHasTrackToChooseFrom
  106. currentMediaHasChapters:(BOOL)currentMediaHasChapters
  107. forPlaybackController:(VLCPlaybackController *)controller
  108. {
  109. UIImage *playPauseImage = isPlaying ? [UIImage imageNamed:@"pauseIcon"] : [UIImage imageNamed:@"playIcon"];
  110. [_playPauseButton setImage:playPauseImage forState:UIControlStateNormal];
  111. }
  112. - (void)displayMetadataForPlaybackController:(VLCPlaybackController *)controller
  113. title:(NSString *)title
  114. artwork:(UIImage *)artwork
  115. artist:(NSString *)artist
  116. album:(NSString *)album
  117. audioOnly:(BOOL)audioOnly
  118. {
  119. if (audioOnly) {
  120. _artworkView.image = artwork;
  121. if (_videoView) {
  122. [_videoView removeFromSuperview];
  123. _videoView = nil;
  124. }
  125. } else {
  126. if (_videoView) {
  127. [_videoView removeFromSuperview];
  128. _videoView = nil;
  129. }
  130. _videoView = [[UIView alloc] initWithFrame:_artworkView.frame];
  131. [self addSubview:_videoView];
  132. if (!controller.presentingMovieViewController)
  133. controller.videoOutputView = _videoView;
  134. }
  135. NSString *metaDataString;
  136. if (artist)
  137. metaDataString = artist;
  138. if (album)
  139. metaDataString = [metaDataString stringByAppendingFormat:@" — %@", album];
  140. if (metaDataString)
  141. metaDataString = [metaDataString stringByAppendingFormat:@"\n%@", title];
  142. else
  143. metaDataString = title;
  144. _metaDataLabel.text = metaDataString;
  145. }
  146. - (void)presentingViewControllerShouldBeClosed:(VLCPlaybackController *)controller
  147. {
  148. VLCAppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
  149. [appDelegate.playlistViewController displayMiniPlaybackViewIfNeeded];
  150. }
  151. - (void)presentingViewControllerShouldBeClosedAfterADelay:(VLCPlaybackController *)controller
  152. {
  153. [self presentingViewControllerShouldBeClosed:controller];
  154. }
  155. @end