Browse Source

tvOS: Add repeat mode control to playback controls.

Signed-off-by: Felix Paul Kühne <fkuehne@videolan.org>
Vincent L. Cone 9 years ago
parent
commit
5222acbe18

+ 8 - 3
Apple-TV/Playback/Playback Info/VLCPlaybackInfoRateTVViewController.h

@@ -11,7 +11,12 @@
 
 #import "VLCPlaybackInfoPanelTVViewController.h"
 
-@interface VLCPlaybackInfoRateTVViewController : VLCPlaybackInfoPanelTVViewController
-@property (nonatomic, weak) IBOutlet UISegmentedControl *segmentedControl;
-- (IBAction)segmentedControlChanged:(UISegmentedControl *)sender;
+@interface VLCPlaybackInfoPlaybackTVViewController : VLCPlaybackInfoPanelTVViewController
+@property (nonatomic, weak) IBOutlet UISegmentedControl *rateControl;
+@property (nonatomic, weak) IBOutlet UILabel *rateLabel;
+@property (nonatomic, weak) IBOutlet UISegmentedControl *repeatControl;
+@property (nonatomic, weak) IBOutlet UILabel *repeatLabel;
+
+- (IBAction)rateControlChanged:(UISegmentedControl *)sender;
+- (IBAction)repeatControlChanged:(UISegmentedControl *)sender;
 @end

+ 145 - 0
Apple-TV/Playback/Playback Info/VLCPlaybackInfoPlaybackTVViewController.m

@@ -0,0 +1,145 @@
+/*****************************************************************************
+ * 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 "VLCPlaybackInfoPlaybackTVViewController.h"
+@interface VLCPlaybackInfoPlaybackTVViewController ()
+@property (nonatomic) NSArray<NSNumber*> *possibleRates;
+@end
+
+@implementation VLCPlaybackInfoPlaybackTVViewController
+
+
+- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
+{
+    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
+    if (self) {
+        self.title = NSLocalizedString(@"PLAYBACK", nil);
+    }
+    return self;
+}
+
+- (CGSize)preferredContentSize
+{
+    return CGSizeMake(CGRectGetWidth(self.view.bounds), 200);
+}
+
++ (BOOL)shouldBeVisibleForPlaybackController:(VLCPlaybackController *)vpc
+{
+    return vpc.mediaPlayer.isSeekable;
+}
+
+
+- (void)viewDidLoad
+{
+    [super viewDidLoad];
+    self.possibleRates = @[@(0.25),
+                           @(0.50),
+                           @(0.75),
+                           @(1.00),
+                           @(1.25),
+                           @(1.50),
+                           @(2.00),
+                           @(4.00),
+                           ];
+
+    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
+    formatter.numberStyle = NSNumberFormatterDecimalStyle;
+    formatter.maximumFractionDigits = 2;
+    formatter.minimumFractionDigits = 2;
+
+    UISegmentedControl *rateControl = self.rateControl;
+    [rateControl removeAllSegments];
+
+    [self.possibleRates enumerateObjectsUsingBlock:^(NSNumber * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
+        NSString *title = [formatter stringFromNumber:obj];
+        [rateControl insertSegmentWithTitle:title atIndex:idx animated:NO];
+    }];
+
+    self.rateLabel.text = NSLocalizedString(@"PLAYBACK_SPEED", nil);
+
+    UISegmentedControl *repeatControl = self.repeatControl;
+    [repeatControl removeAllSegments];
+    [repeatControl insertSegmentWithTitle:NSLocalizedString(@"REPEAT_DISABLED", nil)
+                                  atIndex:0 animated:NO];
+    [repeatControl insertSegmentWithTitle:NSLocalizedString(@"REPEAT_SINGLE", nil)
+                                  atIndex:1 animated:NO];
+    [repeatControl insertSegmentWithTitle:NSLocalizedString(@"REPEAT_FOLDER", nil)
+                                  atIndex:2 animated:NO];
+
+    self.repeatLabel.text = NSLocalizedString(@"REPEAT_MODE", nil);
+}
+
+- (void)viewWillAppear:(BOOL)animated
+{
+    [super viewWillAppear:animated];
+    [self updateRateControl];
+    [self updateRepeatControl];
+}
+
+- (void)updateRateControl
+{
+    VLCPlaybackController *vpc = [VLCPlaybackController sharedInstance];
+    float currentRate = vpc.playbackRate;
+
+    NSInteger currentIndex = [self.possibleRates indexOfObjectPassingTest:^BOOL(NSNumber * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
+        return ABS(obj.floatValue-currentRate)<0.2;
+    }];
+    UISegmentedControl *rateControl = self.rateControl;
+    rateControl.selectedSegmentIndex = currentIndex;
+    rateControl.enabled = vpc.mediaPlayer.isSeekable;
+}
+
+- (IBAction)rateControlChanged:(UISegmentedControl *)sender
+{
+    float newRate = self.possibleRates[sender.selectedSegmentIndex].floatValue;
+    [VLCPlaybackController sharedInstance].playbackRate = newRate;
+}
+
+- (void)updateRepeatControl
+{
+    NSUInteger selectedIndex;
+    VLCRepeatMode repeatMode = [VLCPlaybackController sharedInstance].repeatMode;
+    switch (repeatMode) {
+        case VLCRepeatCurrentItem:
+            selectedIndex = 1;
+            break;
+        case VLCRepeatAllItems:
+            selectedIndex = 2;
+            break;
+        case VLCDoNotRepeat:
+        default:
+            selectedIndex = 0;
+            break;
+    }
+
+    self.repeatControl.selectedSegmentIndex = selectedIndex;
+}
+
+-(IBAction)repeatControlChanged:(UISegmentedControl *)sender
+{
+    VLCRepeatMode repeatMode;
+    switch (sender.selectedSegmentIndex) {
+        case 1:
+            repeatMode = VLCRepeatCurrentItem;
+            break;
+        case 2:
+            repeatMode = VLCRepeatAllItems;
+            break;
+        case 0:
+        default:
+            repeatMode = VLCDoNotRepeat;
+            break;
+    }
+
+    [VLCPlaybackController sharedInstance].repeatMode = repeatMode;
+}
+
+@end

+ 0 - 91
Apple-TV/Playback/Playback Info/VLCPlaybackInfoRateTVViewController.m

@@ -1,91 +0,0 @@
-/*****************************************************************************
- * 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 "VLCPlaybackInfoRateTVViewController.h"
-@interface VLCPlaybackInfoRateTVViewController ()
-@property (nonatomic) NSArray<NSNumber*> *possibleRates;
-@end
-
-@implementation VLCPlaybackInfoRateTVViewController
-
-
-- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
-{
-    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
-    if (self) {
-        self.title = NSLocalizedString(@"PLAYBACK_SPEED", nil);
-    }
-    return self;
-}
-
-- (CGSize)preferredContentSize
-{
-    return CGSizeMake(CGRectGetWidth(self.view.bounds), 100);
-}
-
-+ (BOOL)shouldBeVisibleForPlaybackController:(VLCPlaybackController *)vpc
-{
-    return vpc.mediaPlayer.isSeekable;
-}
-
-
-- (void)viewDidLoad
-{
-    [super viewDidLoad];
-    self.possibleRates = @[@(0.25),
-                           @(0.50),
-                           @(0.75),
-                           @(1.00),
-                           @(1.25),
-                           @(1.50),
-                           @(2.00),
-                           @(4.00),
-                           ];
-
-    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
-    formatter.numberStyle = NSNumberFormatterDecimalStyle;
-    formatter.maximumFractionDigits = 2;
-    formatter.minimumFractionDigits = 2;
-
-    UISegmentedControl *segmentedControl = self.segmentedControl;
-    [segmentedControl removeAllSegments];
-
-    [self.possibleRates enumerateObjectsUsingBlock:^(NSNumber * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
-        NSString *title = [formatter stringFromNumber:obj];
-        [segmentedControl insertSegmentWithTitle:title atIndex:idx animated:NO];
-    }];
-}
-
-- (void)viewWillAppear:(BOOL)animated
-{
-    [super viewWillAppear:animated];
-    [self updateSegmentedControl];
-}
-
-- (void)updateSegmentedControl
-{
-    VLCPlaybackController *vpc = [VLCPlaybackController sharedInstance];
-    float currentRate = vpc.playbackRate;
-
-    NSInteger currentIndex = [self.possibleRates indexOfObjectPassingTest:^BOOL(NSNumber * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
-        return ABS(obj.floatValue-currentRate)<0.2;
-    }];
-    self.segmentedControl.selectedSegmentIndex = currentIndex;
-
-    self.segmentedControl.enabled = vpc.mediaPlayer.isSeekable;
-}
-
-- (IBAction)segmentedControlChanged:(UISegmentedControl *)sender
-{
-    float newRate = self.possibleRates[sender.selectedSegmentIndex].floatValue;
-    [VLCPlaybackController sharedInstance].playbackRate = newRate;
-}
-@end

+ 2 - 2
Apple-TV/Playback/Playback Info/VLCPlaybackInfoTVViewController.m

@@ -10,7 +10,7 @@
  *****************************************************************************/
 
 #import "VLCPlaybackInfoTVViewController.h"
-#import "VLCPlaybackInfoRateTVViewController.h"
+#import "VLCPlaybackInfoPlaybackTVViewController.h"
 #import "VLCPlaybackInfoMediaInfoTVViewController.h"
 #import "VLCPlaybackInfoTVAnimators.h"
 #import "VLCPlaybackInfoTracksTVViewController.h"
@@ -55,7 +55,7 @@
 
     _allTabViewControllers = @[[[VLCPlaybackInfoChaptersTVViewController alloc] initWithNibName:nil bundle:nil],
                                [[VLCPlaybackInfoTracksTVViewController alloc] initWithNibName:nil bundle:nil],
-                               [[VLCPlaybackInfoRateTVViewController alloc] initWithNibName:nil bundle:nil],
+                               [[VLCPlaybackInfoPlaybackTVViewController alloc] initWithNibName:nil bundle:nil],
                                [[VLCPlaybackInfoMediaInfoTVViewController alloc] initWithNibName:nil bundle:nil],
                                ];
 

+ 101 - 0
Apple-TV/VLCPlaybackInfoPlaybackTVViewController.xib

@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder.AppleTV.XIB" version="3.0" toolsVersion="10116" systemVersion="15E65" targetRuntime="AppleTV" propertyAccessControl="none" useAutolayout="YES">
+    <dependencies>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="VLCPlaybackInfoPlaybackTVViewController">
+            <connections>
+                <outlet property="preferredFocusedView" destination="a34-9y-ZcI" id="Xa7-Zq-uyz"/>
+                <outlet property="rateControl" destination="a34-9y-ZcI" id="vdn-Ol-Wku"/>
+                <outlet property="rateLabel" destination="Rae-ci-cH1" id="6lL-fK-x8a"/>
+                <outlet property="repeatControl" destination="LT2-wc-v4T" id="OjM-05-0XT"/>
+                <outlet property="repeatLabel" destination="IrS-i0-38G" id="06Y-eM-986"/>
+                <outlet property="view" destination="vgW-9U-IlZ" id="527-h1-jOO"/>
+            </connections>
+        </placeholder>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" placeholderIntrinsicWidth="1920" placeholderIntrinsicHeight="100" id="vgW-9U-IlZ">
+            <rect key="frame" x="0.0" y="0.0" width="1920" height="256"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <stackView opaque="NO" contentMode="scaleToFill" verticalHuggingPriority="750" axis="vertical" distribution="fillProportionally" alignment="center" spacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="XnY-7I-cWB">
+                    <rect key="frame" x="0.0" y="20" width="1920" height="158"/>
+                    <subviews>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="xtb-Ho-wRT">
+                            <rect key="frame" x="693" y="0.0" width="535" height="69"/>
+                            <subviews>
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="750" text="Playback rate" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Rae-ci-cH1">
+                                    <rect key="frame" x="-91" y="12" width="232" height="46"/>
+                                    <fontDescription key="fontDescription" style="UICTFontTextStyleHeadline"/>
+                                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                                <segmentedControl opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="a34-9y-ZcI" userLabel="Rate Control">
+                                    <rect key="frame" x="161" y="0.0" width="354" height="70"/>
+                                    <color key="backgroundColor" white="0.0" alpha="0.10000000000000001" colorSpace="calibratedWhite"/>
+                                    <segments>
+                                        <segment title="First"/>
+                                        <segment title="Second"/>
+                                    </segments>
+                                    <connections>
+                                        <action selector="rateControlChanged:" destination="-1" eventType="valueChanged" id="IS1-73-uYu"/>
+                                    </connections>
+                                </segmentedControl>
+                            </subviews>
+                            <constraints>
+                                <constraint firstAttribute="bottom" secondItem="a34-9y-ZcI" secondAttribute="bottom" id="DLD-cb-7Ie"/>
+                                <constraint firstItem="Rae-ci-cH1" firstAttribute="centerY" secondItem="a34-9y-ZcI" secondAttribute="centerY" id="H3u-bt-GQU"/>
+                                <constraint firstItem="Rae-ci-cH1" firstAttribute="leading" secondItem="xtb-Ho-wRT" secondAttribute="leading" priority="200" constant="20" id="MRB-u0-9Oq"/>
+                                <constraint firstAttribute="trailing" secondItem="a34-9y-ZcI" secondAttribute="trailing" priority="500" constant="20" symbolic="YES" id="XpK-y3-ikU"/>
+                                <constraint firstItem="a34-9y-ZcI" firstAttribute="top" secondItem="xtb-Ho-wRT" secondAttribute="top" id="Yv9-EY-Mae"/>
+                                <constraint firstItem="a34-9y-ZcI" firstAttribute="leading" secondItem="Rae-ci-cH1" secondAttribute="trailing" constant="20" id="xvy-Tv-Lch"/>
+                            </constraints>
+                        </view>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="BkR-2u-SR9">
+                            <rect key="frame" x="693" y="89" width="535" height="69"/>
+                            <subviews>
+                                <segmentedControl opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="LT2-wc-v4T" userLabel="Repeat Control">
+                                    <rect key="frame" x="161" y="0.0" width="354" height="70"/>
+                                    <color key="backgroundColor" white="0.0" alpha="0.10000000000000001" colorSpace="calibratedWhite"/>
+                                    <segments>
+                                        <segment title="First"/>
+                                        <segment title="Second"/>
+                                    </segments>
+                                    <connections>
+                                        <action selector="repeatControlChanged:" destination="-1" eventType="valueChanged" id="o1Y-Hy-I8D"/>
+                                    </connections>
+                                </segmentedControl>
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="750" text="Repeat" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="IrS-i0-38G">
+                                    <rect key="frame" x="20" y="12" width="121" height="46"/>
+                                    <fontDescription key="fontDescription" style="UICTFontTextStyleHeadline"/>
+                                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                            </subviews>
+                            <constraints>
+                                <constraint firstItem="IrS-i0-38G" firstAttribute="leading" secondItem="BkR-2u-SR9" secondAttribute="leading" priority="200" constant="20" id="B7k-6N-0ko"/>
+                                <constraint firstAttribute="bottom" secondItem="LT2-wc-v4T" secondAttribute="bottom" id="HUc-mt-yf9"/>
+                                <constraint firstItem="IrS-i0-38G" firstAttribute="centerY" secondItem="LT2-wc-v4T" secondAttribute="centerY" id="K1r-bM-tLv"/>
+                                <constraint firstItem="LT2-wc-v4T" firstAttribute="leading" secondItem="IrS-i0-38G" secondAttribute="trailing" constant="20" id="Qbm-kO-Yal"/>
+                                <constraint firstAttribute="trailing" secondItem="LT2-wc-v4T" secondAttribute="trailing" priority="500" constant="20" symbolic="YES" id="RvR-wy-oVN"/>
+                                <constraint firstItem="LT2-wc-v4T" firstAttribute="top" secondItem="BkR-2u-SR9" secondAttribute="top" id="mo7-kq-DgH"/>
+                            </constraints>
+                        </view>
+                    </subviews>
+                    <constraints>
+                        <constraint firstItem="IrS-i0-38G" firstAttribute="trailing" secondItem="Rae-ci-cH1" secondAttribute="trailing" id="cUn-w6-TMI"/>
+                    </constraints>
+                </stackView>
+            </subviews>
+            <constraints>
+                <constraint firstAttribute="bottom" secondItem="XnY-7I-cWB" secondAttribute="bottom" priority="750" constant="20" id="3uy-JU-177"/>
+                <constraint firstItem="XnY-7I-cWB" firstAttribute="top" secondItem="vgW-9U-IlZ" secondAttribute="top" constant="20" id="5Wz-2L-dur"/>
+                <constraint firstAttribute="trailing" secondItem="XnY-7I-cWB" secondAttribute="trailing" id="YD5-wc-TLW"/>
+                <constraint firstItem="XnY-7I-cWB" firstAttribute="leading" secondItem="vgW-9U-IlZ" secondAttribute="leading" id="vVf-cu-fWD"/>
+            </constraints>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <point key="canvasLocation" x="94" y="-1683"/>
+        </view>
+    </objects>
+</document>

+ 0 - 42
Apple-TV/VLCPlaybackInfoRateTVViewController.xib

@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder.AppleTV.XIB" version="3.0" toolsVersion="9527.1" systemVersion="15B42" targetRuntime="AppleTV" propertyAccessControl="none" useAutolayout="YES">
-    <dependencies>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9525.1"/>
-    </dependencies>
-    <objects>
-        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="VLCPlaybackInfoRateTVViewController">
-            <connections>
-                <outlet property="preferredFocusedView" destination="a34-9y-ZcI" id="Xa7-Zq-uyz"/>
-                <outlet property="segmentedControl" destination="a34-9y-ZcI" id="ob8-jh-Cvo"/>
-                <outlet property="view" destination="vgW-9U-IlZ" id="527-h1-jOO"/>
-            </connections>
-        </placeholder>
-        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
-        <view opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" placeholderIntrinsicWidth="1920" placeholderIntrinsicHeight="100" id="vgW-9U-IlZ">
-            <rect key="frame" x="0.0" y="0.0" width="1920" height="100"/>
-            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-            <subviews>
-                <segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="a34-9y-ZcI">
-                    <rect key="frame" x="783" y="16" width="354" height="70"/>
-                    <color key="backgroundColor" white="0.0" alpha="0.10000000000000001" colorSpace="calibratedWhite"/>
-                    <segments>
-                        <segment title="First"/>
-                        <segment title="Second"/>
-                    </segments>
-                    <connections>
-                        <action selector="segmentedControlChanged:" destination="-1" eventType="valueChanged" id="rh8-Qo-MRd"/>
-                    </connections>
-                </segmentedControl>
-            </subviews>
-            <constraints>
-                <constraint firstItem="a34-9y-ZcI" firstAttribute="top" relation="greaterThanOrEqual" secondItem="vgW-9U-IlZ" secondAttribute="top" id="9aM-8g-ySI"/>
-                <constraint firstItem="a34-9y-ZcI" firstAttribute="centerX" secondItem="vgW-9U-IlZ" secondAttribute="centerX" id="FTw-3L-I11"/>
-                <constraint firstItem="a34-9y-ZcI" firstAttribute="centerX" secondItem="vgW-9U-IlZ" secondAttribute="centerX" id="cNR-R4-nbS"/>
-                <constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="a34-9y-ZcI" secondAttribute="bottom" id="jlh-7n-G5J"/>
-                <constraint firstItem="a34-9y-ZcI" firstAttribute="centerY" secondItem="vgW-9U-IlZ" secondAttribute="centerY" id="qK1-gY-HdN"/>
-            </constraints>
-            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
-            <point key="canvasLocation" x="94" y="-1761.5"/>
-        </view>
-    </objects>
-</document>

BIN
Resources/en-GB.lproj/Localizable.strings


+ 6 - 0
Resources/en.lproj/Localizable.strings

@@ -314,6 +314,12 @@
 "FOUND_SUBS"="Found subtitles";
 "USE_SPDIF"="Use S/PDIF";
 
+"PLAYBACK"="Playback";
+"REPEAT_MODE"="Repeat";
+"REPEAT_DISABLED"="Disabled";
+"REPEAT_SINGLE"="Single";
+"REPEAT_FOLDER"="Folder";
+
 // Local Network Service Names
 "UPNP_LONG"="Universal Plug'n'Play (UPnP)";
 "UPNP_SHORT"="UPnP";

+ 10 - 10
VLC for iOS.xcodeproj/project.pbxproj

@@ -551,8 +551,8 @@
 		DD8095DB1BE3C42F0065D8E1 /* VLCBufferingBar.m in Sources */ = {isa = PBXBuildFile; fileRef = DD8095DA1BE3C42F0065D8E1 /* VLCBufferingBar.m */; };
 		DD8095E01BE3EFC20065D8E1 /* VLCPlaybackInfoTVViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DD8095DE1BE3EFC20065D8E1 /* VLCPlaybackInfoTVViewController.m */; };
 		DD8095E51BE3F4240065D8E1 /* VLCPlaybackInfoTVViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = DD8095E41BE3F4240065D8E1 /* VLCPlaybackInfoTVViewController.xib */; };
-		DD8095EB1BE4F04E0065D8E1 /* VLCPlaybackInfoRateTVViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DD8095E91BE4F04E0065D8E1 /* VLCPlaybackInfoRateTVViewController.m */; };
-		DD8095EC1BE4F04E0065D8E1 /* VLCPlaybackInfoRateTVViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = DD8095EA1BE4F04E0065D8E1 /* VLCPlaybackInfoRateTVViewController.xib */; };
+		DD8095EB1BE4F04E0065D8E1 /* VLCPlaybackInfoPlaybackTVViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DD8095E91BE4F04E0065D8E1 /* VLCPlaybackInfoPlaybackTVViewController.m */; };
+		DD8095EC1BE4F04E0065D8E1 /* VLCPlaybackInfoPlaybackTVViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = DD8095EA1BE4F04E0065D8E1 /* VLCPlaybackInfoPlaybackTVViewController.xib */; };
 		DD8095F61BE624C00065D8E1 /* VLCPlaybackInfoTVAnimators.m in Sources */ = {isa = PBXBuildFile; fileRef = DD8095F51BE624C00065D8E1 /* VLCPlaybackInfoTVAnimators.m */; };
 		DD8095F91BE6268A0065D8E1 /* VLCPlaybackInfoPanelTVViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DD8095F81BE6268A0065D8E1 /* VLCPlaybackInfoPanelTVViewController.m */; };
 		DD8F84311B00EB3B0009138A /* VLCPlaybackController+MediaLibrary.m in Sources */ = {isa = PBXBuildFile; fileRef = DD8F84301B00EB3B0009138A /* VLCPlaybackController+MediaLibrary.m */; };
@@ -1329,9 +1329,9 @@
 		DD8095DD1BE3EFC20065D8E1 /* VLCPlaybackInfoTVViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCPlaybackInfoTVViewController.h; sourceTree = "<group>"; };
 		DD8095DE1BE3EFC20065D8E1 /* VLCPlaybackInfoTVViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCPlaybackInfoTVViewController.m; sourceTree = "<group>"; };
 		DD8095E41BE3F4240065D8E1 /* VLCPlaybackInfoTVViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = VLCPlaybackInfoTVViewController.xib; sourceTree = "<group>"; };
-		DD8095E81BE4F04E0065D8E1 /* VLCPlaybackInfoRateTVViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCPlaybackInfoRateTVViewController.h; sourceTree = "<group>"; };
-		DD8095E91BE4F04E0065D8E1 /* VLCPlaybackInfoRateTVViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCPlaybackInfoRateTVViewController.m; sourceTree = "<group>"; };
-		DD8095EA1BE4F04E0065D8E1 /* VLCPlaybackInfoRateTVViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = VLCPlaybackInfoRateTVViewController.xib; sourceTree = "<group>"; };
+		DD8095E81BE4F04E0065D8E1 /* VLCPlaybackInfoPlaybackTVViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCPlaybackInfoPlaybackTVViewController.h; sourceTree = "<group>"; };
+		DD8095E91BE4F04E0065D8E1 /* VLCPlaybackInfoPlaybackTVViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCPlaybackInfoPlaybackTVViewController.m; sourceTree = "<group>"; };
+		DD8095EA1BE4F04E0065D8E1 /* VLCPlaybackInfoPlaybackTVViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = VLCPlaybackInfoPlaybackTVViewController.xib; sourceTree = "<group>"; };
 		DD8095F41BE624C00065D8E1 /* VLCPlaybackInfoTVAnimators.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCPlaybackInfoTVAnimators.h; sourceTree = "<group>"; };
 		DD8095F51BE624C00065D8E1 /* VLCPlaybackInfoTVAnimators.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCPlaybackInfoTVAnimators.m; sourceTree = "<group>"; };
 		DD8095F71BE6268A0065D8E1 /* VLCPlaybackInfoPanelTVViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCPlaybackInfoPanelTVViewController.h; sourceTree = "<group>"; };
@@ -2166,7 +2166,7 @@
 				7D3E528A1BD7B5E100309D15 /* VLCCloudServicesTVViewController.xib */,
 				7DEC8BDD1BD67899006E1093 /* VLCFullscreenMovieTVViewController.xib */,
 				DD8095E41BE3F4240065D8E1 /* VLCPlaybackInfoTVViewController.xib */,
-				DD8095EA1BE4F04E0065D8E1 /* VLCPlaybackInfoRateTVViewController.xib */,
+				DD8095EA1BE4F04E0065D8E1 /* VLCPlaybackInfoPlaybackTVViewController.xib */,
 				DD9D8F671C01FAB500B4060F /* VLCPlaybackInfoChaptersTVViewController.xib */,
 				7D7EF3D91BD56B5900CD4CEE /* VLCOpenNetworkStreamTVViewController.xib */,
 				7D51B3AF1BF0EEF4005AF4D5 /* VLCPlaybackInfoMediaInfoTVViewController.xib */,
@@ -2681,8 +2681,8 @@
 				DD8095F51BE624C00065D8E1 /* VLCPlaybackInfoTVAnimators.m */,
 				DD8095F71BE6268A0065D8E1 /* VLCPlaybackInfoPanelTVViewController.h */,
 				DD8095F81BE6268A0065D8E1 /* VLCPlaybackInfoPanelTVViewController.m */,
-				DD8095E81BE4F04E0065D8E1 /* VLCPlaybackInfoRateTVViewController.h */,
-				DD8095E91BE4F04E0065D8E1 /* VLCPlaybackInfoRateTVViewController.m */,
+				DD8095E81BE4F04E0065D8E1 /* VLCPlaybackInfoPlaybackTVViewController.h */,
+				DD8095E91BE4F04E0065D8E1 /* VLCPlaybackInfoPlaybackTVViewController.m */,
 				7D51B3AD1BF0EEF4005AF4D5 /* VLCPlaybackInfoMediaInfoTVViewController.h */,
 				7D51B3AE1BF0EEF4005AF4D5 /* VLCPlaybackInfoMediaInfoTVViewController.m */,
 				DD1B31F11BF637D500A369B6 /* VLCPlaybackInfoTracksTVViewController.h */,
@@ -3059,7 +3059,7 @@
 				7DF383AE1BF206FB00D71A5C /* VLCRemoteBrowsingCollectionViewController.xib in Resources */,
 				7DDE41931BE925820065C53A /* Assets.xcassets in Resources */,
 				DD29A3E91BF223D000A27A91 /* Localizable.strings in Resources */,
-				DD8095EC1BE4F04E0065D8E1 /* VLCPlaybackInfoRateTVViewController.xib in Resources */,
+				DD8095EC1BE4F04E0065D8E1 /* VLCPlaybackInfoPlaybackTVViewController.xib in Resources */,
 				7D405ED61BEA1F56006ED886 /* jquery-1.10.1.min.js in Resources */,
 				7DEC8BE91BD68BC9006E1093 /* Settings.bundle in Resources */,
 				7D405ED51BEA1F56006ED886 /* Raleway.woff in Resources */,
@@ -3434,7 +3434,7 @@
 				7DEC8BD91BD670EB006E1093 /* VLCPlaybackNavigationController.m in Sources */,
 				7DC0B5701C0094370027BFAD /* VLCSettingsViewController.m in Sources */,
 				7DEC8BDA1BD67112006E1093 /* VLCFrostedGlasView.m in Sources */,
-				DD8095EB1BE4F04E0065D8E1 /* VLCPlaybackInfoRateTVViewController.m in Sources */,
+				DD8095EB1BE4F04E0065D8E1 /* VLCPlaybackInfoPlaybackTVViewController.m in Sources */,
 				7D398DC21CC3E709002C999A /* VLCLocalNetworkServiceBrowserBonjour.m in Sources */,
 				DD3EAC051BE153B4003668DA /* VLCNetworkImageView.m in Sources */,
 				7DF383B91BF21E4400D71A5C /* VLCPlayerControlWebSocket.m in Sources */,