Commit 46fd9289 authored by Tobias's avatar Tobias

Extract movie view control panel to own view and controller.

Instead of using entirely different views for the panel based on orientation and interface idiom use a single wie and configure auto layout constraints based on the width of the panel.
In compact environments the volume slider moves below the playback controls instead of being on the left side.
fixes #15549
parent 43973bb9
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
/*****************************************************************************
* VLCMovieViewControlPanelViewController.h
* VLC for iOS
*****************************************************************************
* Copyright (c) 2015 VideoLAN. All rights reserved.
* $Id$
*
* Authors: Tobias Conradi <videolan@tobias-conradi.de>
*
* Refer to the COPYING file of the official project for license.
*****************************************************************************/
#import <UIKit/UIKit.h>
#import <MediaPlayer/MediaPlayer.h>
#import "VLCPlaybackController.h"
@interface VLCMovieViewControlPanelViewController : UIViewController
@property (nonatomic, strong) IBOutlet UIButton *playbackSpeedButton;
@property (nonatomic, strong) IBOutlet UIButton *trackSwitcherButton;
@property (nonatomic, strong) IBOutlet UIButton *bwdButton;
@property (nonatomic, strong) IBOutlet UIButton *playPauseButton;
@property (nonatomic, strong) IBOutlet UIButton *fwdButton;
@property (nonatomic, strong) IBOutlet UIButton *videoFilterButton;
@property (nonatomic, strong) IBOutlet UIButton *moreActionsButton;
@property (nonatomic, strong) IBOutlet MPVolumeView *volumeView;
@property (nonatomic, weak) VLCPlaybackController *playbackController;
- (void)updateButtons;
@end
/*****************************************************************************
* VLCMovieViewControlPanelViewController.m
* VLC for iOS
*****************************************************************************
* Copyright (c) 2015 VideoLAN. All rights reserved.
* $Id$
*
* Authors: Tobias Conradi <videolan@tobias-conradi.de>
*
* Refer to the COPYING file of the official project for license.
*****************************************************************************/
#import "VLCMovieViewControlPanelViewController.h"
@interface VLCMovieViewControlPanelViewController ()
@property (nonatomic, weak) IBOutlet UIView *playbackControls;
@property (nonatomic, assign) BOOL compactMode;
@end
@implementation VLCMovieViewControlPanelViewController
static const CGFloat maxCompactWidth = 400.0;
- (void)viewDidLoad {
[super viewDidLoad];
_playbackSpeedButton.accessibilityLabel = NSLocalizedString(@"PLAYBACK_SPEED", nil);
_playbackSpeedButton.isAccessibilityElement = YES;
_trackSwitcherButton.accessibilityLabel = NSLocalizedString(@"OPEN_TRACK_PANEL", nil);
_trackSwitcherButton.isAccessibilityElement = YES;
_bwdButton.accessibilityLabel = NSLocalizedString(@"BWD_BUTTON", nil);
_bwdButton.isAccessibilityElement = YES;
UILongPressGestureRecognizer *longPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(playPauseLongPress:)];
[_playPauseButton addGestureRecognizer:longPressRecognizer];
_playPauseButton.accessibilityLabel = NSLocalizedString(@"PLAY_PAUSE_BUTTON", nil);
_playPauseButton.accessibilityHint = NSLocalizedString(@"LONGPRESS_TO_STOP", nil);
_playPauseButton.isAccessibilityElement = YES;
_fwdButton.accessibilityLabel = NSLocalizedString(@"FWD_BUTTON", nil);
_fwdButton.isAccessibilityElement = YES;
_videoFilterButton.accessibilityLabel = NSLocalizedString(@"VIDEO_FILTER", nil);
_videoFilterButton.isAccessibilityElement = YES;
// HACK: get the slider from volume view
UISlider *volumeSlider = nil;
for (id aView in self.volumeView.subviews){
if ([aView isKindOfClass:[UISlider class]]){
volumeSlider = (UISlider *)aView;
break;
}
}
[volumeSlider addTarget:nil action:@selector(volumeSliderAction:) forControlEvents:UIControlEventValueChanged];
[self.volumeView setVolumeThumbImage:[UIImage imageNamed:@"sliderKnob"] forState:UIControlStateNormal];
_compactMode = YES;
[self setupConstraints:YES];
}
- (void) viewWillLayoutSubviews {
[super viewWillLayoutSubviews];
[self.view setNeedsUpdateConstraints];
}
- (void) updateViewConstraints {
BOOL compactMode = CGRectGetWidth(self.view.frame) <= maxCompactWidth;
if (self.compactMode != compactMode) {
self.compactMode = compactMode;
[self setupConstraints:compactMode];
}
[super updateViewConstraints];
}
- (void) setupConstraints:(BOOL)compactMode {
UIView *superview = self.view.superview;
NSArray *oldConstraints = [self.view.constraints filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(NSLayoutConstraint * evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) {
if (!superview) {
return YES;
}
return evaluatedObject.firstItem != superview && evaluatedObject.secondItem != superview;
}]];
[self.view removeConstraints:oldConstraints];
NSDictionary *viewsDict = @{@"speed" : self.playbackSpeedButton,
@"track" : self.trackSwitcherButton,
@"playback" : self.playbackControls,
@"filter" : self.videoFilterButton,
@"actions" : self.moreActionsButton,
@"volume" : self.volumeView,
};
NSMutableArray *constraints = [NSMutableArray array];
if (compactMode) {
[constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[speed]-8-[track]-(>=8)-[playback]-(>=8)-[filter]-8-[actions]-|"
options:NSLayoutFormatAlignAllCenterY
metrics:nil
views:viewsDict]];
[constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(>=10)-[volume]-(>=10)-|"
options:0
metrics:nil
views:viewsDict]];
[constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[playback]-[volume(==40)]-|"
options:NSLayoutFormatAlignAllCenterX
metrics:nil
views:viewsDict]];
} else {
[constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[volume]-(>=8)-[playback]-(>=8)-[speed]-8-[track]-8-[filter]-8-[actions]-|"
options:NSLayoutFormatAlignAllCenterY
metrics:nil
views:viewsDict]];
[constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[playback]-|"
options:0
metrics:nil
views:viewsDict]];
[constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[volume(==40)]"
options:0
metrics:nil
views:viewsDict]];
}
[constraints addObject:[NSLayoutConstraint constraintWithItem:self.playbackControls
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeCenterX
multiplier:1.0
constant:0]];
[self.view addConstraints:constraints];
}
// needed for < iOS 8
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
[super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
[self.view setNeedsUpdateConstraints];
}
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
[self.view setNeedsUpdateConstraints];
} completion:nil];
}
- (VLCPlaybackController *)playbackController
{
if (!_playbackController) {
_playbackController = [VLCPlaybackController sharedInstance];
}
return _playbackController;
}
- (void)playPauseLongPress:(UILongPressGestureRecognizer *)recognizer
{
switch (recognizer.state) {
case UIGestureRecognizerStateBegan:
{ UIImage *image = [UIImage imageNamed:@"stopIcon"];
[_playPauseButton setImage:image forState:UIControlStateNormal];
}
break;
case UIGestureRecognizerStateEnded:
[self.playbackController stopPlayback];
break;
case UIGestureRecognizerStateCancelled:
case UIGestureRecognizerStateFailed:
[self updatePlayPauseButton];
break;
default:
break;
}
}
- (void)updateButtons {
[self updatePlayPauseButton];
self.trackSwitcherButton.hidden = !self.playbackController.currentMediaHasTrackToChooseFrom;
self.videoFilterButton.hidden = self.playbackController.audioOnlyPlaybackSession;
}
- (void)updatePlayPauseButton
{
const BOOL isPlaying = self.playbackController.isPlaying;
UIImage *playPauseImage = isPlaying ? [UIImage imageNamed:@"pauseIcon"] : [UIImage imageNamed:@"playIcon"];
[_playPauseButton setImage:playPauseImage forState:UIControlStateNormal];
}
@end
......@@ -20,35 +20,23 @@
@class VLCHorizontalSwipeGestureRecognizer;
@class VLCVerticalSwipeGestureRecognizer;
@class VLCTimeNavigationTitleView;
@class VLCMovieViewControlPanelViewController;
@interface VLCMovieViewController : UIViewController <UIActionSheetDelegate, VLCPlaybackControllerDelegate>
@property (nonatomic, strong) IBOutlet UIView *movieView;
@property (nonatomic, strong) IBOutlet UIBarButtonItem *backButton;
@property (nonatomic, strong) IBOutlet VLCTimeNavigationTitleView *timeNavigationTitleView;
@property (nonatomic, strong) IBOutlet UIButton *playPauseButton;
@property (nonatomic, strong) IBOutlet UIButton *playPauseButtonLandscape;
@property (nonatomic, strong) IBOutlet UIButton *bwdButton;
@property (nonatomic, strong) IBOutlet UIButton *bwdButtonLandscape;
@property (nonatomic, strong) IBOutlet UIButton *fwdButton;
@property (nonatomic, strong) IBOutlet UIButton *fwdButtonLandscape;
@property (nonatomic, strong) IBOutlet UIButton *trackSwitcherButton;
@property (nonatomic, strong) IBOutlet UIButton *trackSwitcherButtonLandscape;
@property (nonatomic, strong) IBOutlet UIButton *sleepTimerButton;
@property (nonatomic, strong) IBOutlet UINavigationBar *toolbar;
@property (nonatomic, strong) IBOutlet VLCFrostedGlasView *controllerPanel;
@property (nonatomic, strong) IBOutlet VLCFrostedGlasView *controllerPanelLandscape;
@property (nonatomic, strong) IBOutlet UIView *controllerPanel;
@property (nonatomic, strong) IBOutlet VLCStatusLabel *statusLabel;
@property (nonatomic, strong) IBOutlet MPVolumeView *volumeView;
@property (nonatomic, strong) IBOutlet MPVolumeView *volumeViewLandscape;
@property (nonatomic, strong) IBOutlet UIView *playingExternallyView;
@property (nonatomic, strong) IBOutlet UILabel *playingExternallyTitle;
@property (nonatomic, strong) IBOutlet UILabel *playingExternallyDescription;
@property (nonatomic, strong) IBOutlet VLCFrostedGlasView *videoFilterView;
@property (nonatomic, strong) IBOutlet UIButton *videoFilterButton;
@property (nonatomic, strong) IBOutlet UIButton *videoFilterButtonLandscape;
@property (nonatomic, strong) IBOutlet UILabel *hueLabel;
@property (nonatomic, strong) IBOutlet UISlider *hueSlider;
@property (nonatomic, strong) IBOutlet UILabel *contrastLabel;
......@@ -62,8 +50,6 @@
@property (nonatomic, strong) IBOutlet UIButton *resetVideoFilterButton;
@property (nonatomic, strong) IBOutlet VLCFrostedGlasView *playbackSpeedView;
@property (nonatomic, strong) IBOutlet UIButton *playbackSpeedButton;
@property (nonatomic, strong) IBOutlet UIButton *playbackSpeedButtonLandscape;
@property (nonatomic, strong) IBOutlet UISlider *playbackSpeedSlider;
@property (nonatomic, strong) IBOutlet UILabel *playbackSpeedLabel;
@property (nonatomic, strong) IBOutlet UILabel *playbackSpeedIndicator;
......@@ -73,7 +59,6 @@
@property (nonatomic, strong) IBOutlet UISlider *spuDelaySlider;
@property (nonatomic, strong) IBOutlet UILabel *spuDelayLabel;
@property (nonatomic, strong) IBOutlet UILabel *spuDelayIndicator;
@property (nonatomic, strong) IBOutlet UIButton *moreActionsButton;
@property (nonatomic, strong) IBOutlet VLCFrostedGlasView *scrubIndicatorView;
@property (nonatomic, strong) IBOutlet UILabel *currentScrubSpeedLabel;
......@@ -85,6 +70,7 @@
@property (nonatomic, strong) IBOutlet UIImageView *artworkImageView;
@property (nonatomic, weak) IBOutlet VLCPlaybackController *playbackController;
@property (nonatomic, weak) VLCMovieViewControlPanelViewController *controlPanelController;
- (IBAction)closePlayback:(id)sender;
- (IBAction)minimizePlayback:(id)sender;
......
This diff is collapsed.
/*****************************************************************************
* VLCVolumeView.h
* VLC for iOS
*****************************************************************************
* Copyright (c) 2015 VideoLAN. All rights reserved.
* $Id$
*
* Author: Tobias Conradi <videolan # tobias-conradi.de>
*
* Refer to the COPYING file of the official project for license.
*****************************************************************************/
#import <MediaPlayer/MediaPlayer.h>
// overrides the rect methods of MPVolumeView to fix the slider and button
// hanging at the top of the view when the volume view has not the "original" size
@interface VLCVolumeView : MPVolumeView
- (CGRect)volumeSliderRectForBounds:(CGRect)bounds;
- (CGRect)routeButtonRectForBounds:(CGRect)bounds;
@end
/*****************************************************************************
* VLCVolumeView.h
* VLC for iOS
*****************************************************************************
* Copyright (c) 2015 VideoLAN. All rights reserved.
* $Id$
*
* Author: Tobias Conradi <videolan # tobias-conradi.de>
*
* Refer to the COPYING file of the official project for license.
*****************************************************************************/
#import "VLCVolumeView.h"
@implementation VLCVolumeView
- (CGRect)volumeSliderRectForBounds:(CGRect)bounds
{
CGRect rect = [super volumeSliderRectForBounds:bounds];
// fix height and y origin
rect.size.height = bounds.size.height;
rect.origin.y = bounds.origin.y;
return rect;
}
- (CGRect)routeButtonRectForBounds:(CGRect)bounds
{
CGRect rect = [super routeButtonRectForBounds:bounds];
// fix height and y origin
rect.size.height = bounds.size.height;
rect.origin.y = bounds.origin.y;
return rect;
}
@end
......@@ -224,6 +224,8 @@
CCE2A22E17A5859E00D9EAAD /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CCE2A22D17A5859E00D9EAAD /* CoreText.framework */; };
D9C52A9E9D4D5AFA7EF1B45A /* libPods-vlc-ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAF8927B0BE9C328466C0EA7 /* libPods-vlc-ios.a */; };
DD1A45FD1B676BAC00086F57 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = DDE1BCE41B676B8800A4B9CE /* Localizable.strings */; };
DD1CB0321BB9E005006EDDE6 /* VLCMovieViewControlPanelViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DDAD5C2D1BB9A1E6006AFD3B /* VLCMovieViewControlPanelViewController.m */; settings = {ASSET_TAGS = (); }; };
DD1CB05A1BBAC549006EDDE6 /* VLCVolumeView.m in Sources */ = {isa = PBXBuildFile; fileRef = DD1CB0591BBAC549006EDDE6 /* VLCVolumeView.m */; settings = {ASSET_TAGS = (); }; };
DD2789DD1B67A5C400CED769 /* VLCThumbnailsCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D37849D183A98DD009EE944 /* VLCThumbnailsCache.m */; };
DD2789DE1B67A5CD00CED769 /* VLCWatchMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = DD3EA6301AF50CFE007FF096 /* VLCWatchMessage.m */; };
DD2789E21B67A7BE00CED769 /* VLCWatchCommunication.m in Sources */ = {isa = PBXBuildFile; fileRef = DD2789E11B67A7BE00CED769 /* VLCWatchCommunication.m */; };
......@@ -252,6 +254,7 @@
DD7BA2631B680C8E002D9F54 /* MediaLibraryKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD7BA2601B680C1B002D9F54 /* MediaLibraryKit.framework */; };
DD7BA2641B680C8E002D9F54 /* MediaLibraryKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DD7BA2601B680C1B002D9F54 /* MediaLibraryKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
DD8F84311B00EB3B0009138A /* VLCPlaybackController+MediaLibrary.m in Sources */ = {isa = PBXBuildFile; fileRef = DD8F84301B00EB3B0009138A /* VLCPlaybackController+MediaLibrary.m */; };
DDAD5C2B1BB999CA006AFD3B /* VLCMovieViewControlPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = DDAD5C2A1BB999CA006AFD3B /* VLCMovieViewControlPanel.xib */; settings = {ASSET_TAGS = (); }; };
DDB7C6A41BAEB28200E6570E /* WKInterfaceController+VLCConnectionAlert.m in Sources */ = {isa = PBXBuildFile; fileRef = DD9FBE761BAD6BB600FFE77A /* WKInterfaceController+VLCConnectionAlert.m */; settings = {ASSET_TAGS = (); }; };
DDB959421AFBB30500BB8CFF /* MappingModel_2_5_to_2_6.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = DDB959411AFBB30500BB8CFF /* MappingModel_2_5_to_2_6.xcmappingmodel */; };
DDC10BE41AEE8EA700890DC3 /* VLCTimeNavigationTitleView.m in Sources */ = {isa = PBXBuildFile; fileRef = DDC10BE31AEE8EA700890DC3 /* VLCTimeNavigationTitleView.m */; };
......@@ -729,6 +732,8 @@
CCE2A22D17A5859E00D9EAAD /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; };
DAF8927B0BE9C328466C0EA7 /* libPods-vlc-ios.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-vlc-ios.a"; sourceTree = BUILT_PRODUCTS_DIR; };
DD1A45FC1B676BAC00086F57 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = "<group>"; };
DD1CB0581BBAC549006EDDE6 /* VLCVolumeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCVolumeView.h; path = Sources/VLCVolumeView.h; sourceTree = SOURCE_ROOT; };
DD1CB0591BBAC549006EDDE6 /* VLCVolumeView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCVolumeView.m; path = Sources/VLCVolumeView.m; sourceTree = SOURCE_ROOT; };
DD2789E01B67A7BE00CED769 /* VLCWatchCommunication.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCWatchCommunication.h; path = Sources/VLCWatchCommunication.h; sourceTree = SOURCE_ROOT; };
DD2789E11B67A7BE00CED769 /* VLCWatchCommunication.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCWatchCommunication.m; path = Sources/VLCWatchCommunication.m; sourceTree = SOURCE_ROOT; };
DD2789E31B67A88600CED769 /* WatchConnectivity.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WatchConnectivity.framework; path = System/Library/Frameworks/WatchConnectivity.framework; sourceTree = SDKROOT; };
......@@ -788,6 +793,9 @@
DD9FBE751BAD6BB600FFE77A /* WKInterfaceController+VLCConnectionAlert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "WKInterfaceController+VLCConnectionAlert.h"; sourceTree = "<group>"; };
DD9FBE761BAD6BB600FFE77A /* WKInterfaceController+VLCConnectionAlert.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "WKInterfaceController+VLCConnectionAlert.m"; sourceTree = "<group>"; };
DD9FBE791BADA8E300FFE77A /* VLC WatchKit Extension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = "VLC WatchKit Extension.entitlements"; sourceTree = "<group>"; };
DDAD5C2A1BB999CA006AFD3B /* VLCMovieViewControlPanel.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = VLCMovieViewControlPanel.xib; path = Resources/VLCMovieViewControlPanel.xib; sourceTree = SOURCE_ROOT; };
DDAD5C2C1BB9A1E6006AFD3B /* VLCMovieViewControlPanelViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCMovieViewControlPanelViewController.h; path = Sources/VLCMovieViewControlPanelViewController.h; sourceTree = SOURCE_ROOT; };
DDAD5C2D1BB9A1E6006AFD3B /* VLCMovieViewControlPanelViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCMovieViewControlPanelViewController.m; path = Sources/VLCMovieViewControlPanelViewController.m; sourceTree = SOURCE_ROOT; };
DDB959411AFBB30500BB8CFF /* MappingModel_2_5_to_2_6.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; name = MappingModel_2_5_to_2_6.xcmappingmodel; path = ImportedSources/MediaLibraryKit/MappingModel_2_5_to_2_6.xcmappingmodel; sourceTree = "<group>"; };
DDC10BE21AEE8EA700890DC3 /* VLCTimeNavigationTitleView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCTimeNavigationTitleView.h; path = Sources/VLCTimeNavigationTitleView.h; sourceTree = SOURCE_ROOT; };
DDC10BE31AEE8EA700890DC3 /* VLCTimeNavigationTitleView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCTimeNavigationTitleView.m; path = Sources/VLCTimeNavigationTitleView.m; sourceTree = SOURCE_ROOT; };
......@@ -1139,6 +1147,8 @@
7D9CB9DB1A4C55EF00BB74B4 /* VLCPlaybackNavigationController.m */,
DDC10BE21AEE8EA700890DC3 /* VLCTimeNavigationTitleView.h */,
DDC10BE31AEE8EA700890DC3 /* VLCTimeNavigationTitleView.m */,
DD1CB0581BBAC549006EDDE6 /* VLCVolumeView.h */,
DD1CB0591BBAC549006EDDE6 /* VLCVolumeView.m */,
);
name = "UI Elements";
sourceTree = "<group>";
......@@ -1219,6 +1229,8 @@
7D5CAA8B1A4AD8E5003F2CBC /* VLCTrackSelectorHeaderView.m */,
7D1276601AADA0E600F0260C /* VLCMultiSelectionMenuView.h */,
7D1276611AADA0E600F0260C /* VLCMultiSelectionMenuView.m */,
DDAD5C2C1BB9A1E6006AFD3B /* VLCMovieViewControlPanelViewController.h */,
DDAD5C2D1BB9A1E6006AFD3B /* VLCMovieViewControlPanelViewController.m */,
);
name = Playback;
sourceTree = "<group>";
......@@ -1427,6 +1439,7 @@
7D6BEF1D19E027A100DF3972 /* Cloud */,
7D6BEF1F19E027DA00DF3972 /* Download & Network */,
7D6BEF1E19E027BE00DF3972 /* Library */,
DDAD5C2A1BB999CA006AFD3B /* VLCMovieViewControlPanel.xib */,
7DBBF190183AB4300009A339 /* VLCMovieViewController~ipad.xib */,
7DBBF191183AB4300009A339 /* VLCMovieViewController~iphone.xib */,
7D27EB9319DEE11900EF0370 /* Launch Screen.xib */,
......@@ -1991,6 +2004,7 @@
7D2AC5D11B67746700A8D9DD /* LiveAuthDialog_iPhone.xib in Resources */,
7D27EC2B19DF310300EF0370 /* VLCFirstStepsSecondPageViewController~ipad.xib in Resources */,
7DBBF1A0183AB4300009A339 /* VLCPlaylistCollectionViewCell.xib in Resources */,
DDAD5C2B1BB999CA006AFD3B /* VLCMovieViewControlPanel.xib in Resources */,
7D711ADA18227A490094E4F0 /* GTMOAuth2ViewTouch.xib in Resources */,
417CDA241A48D1F300D9ACE7 /* VLCCloudServicesTableViewController.xib in Resources */,
7D9870671A3E03D5009CF27D /* papasscode_failed_bg@2x.png in Resources */,
......@@ -2077,6 +2091,7 @@
4144C4661A0ED6C700918C89 /* Reachability.m in Sources */,
4184AA151A5492070063DF5A /* VLCCloudStorageController.m in Sources */,
9BE4D1CE183D76950006346C /* VLCCloudStorageTableViewCell.m in Sources */,
DD1CB0321BB9E005006EDDE6 /* VLCMovieViewControlPanelViewController.m in Sources */,
2915540117490A1E00B86CAD /* DDData.m in Sources */,
2915540217490A1E00B86CAD /* DDNumber.m in Sources */,
7D92897A1877467E009108FD /* VLCFirstStepsFourthPageViewController.m in Sources */,
......@@ -2165,6 +2180,7 @@
41273A3C1A955C4100A2EF77 /* VLCMigrationViewController.m in Sources */,
7D30F3C4183AB24C00FFC021 /* VLCHTTPUploaderController.m in Sources */,
7D30F3C7183AB26F00FFC021 /* VLCOpenNetworkStreamViewController.m in Sources */,
DD1CB05A1BBAC549006EDDE6 /* VLCVolumeView.m in Sources */,
7D5CAA8C1A4AD8E5003F2CBC /* VLCTrackSelectorHeaderView.m in Sources */,
4171D35018A2C19000A16EF9 /* VLCFolderCollectionViewFlowLayout.m in Sources */,
7D30F3CA183AB27A00FFC021 /* VLCDownloadViewController.m in Sources */,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment