Procházet zdrojové kódy

ATV: Implement a correct settings panel

Felix Paul Kühne před 9 roky
rodič
revize
3b2ce8af57

+ 1 - 1
Podfile

@@ -6,7 +6,7 @@ target 'vlc-ios' do
 platform :ios, '7.0'
 
 pod 'OBSlider', '1.1.0'
-pod 'InAppSettingsKit', '2.2.2'
+pod 'InAppSettingsKit', :git => 'git://github.com/fkuehne/InAppSettingsKit.git', :commit => '415ea6bb' #tvOS fix
 pod 'upnpx', '~>1.3.6'
 pod 'HockeySDK', '~>3.6.4'
 pod 'SSKeychain', :git => 'git://github.com/fkuehne/sskeychain.git' #iCloud Keychain sync

+ 8 - 3
Podfile.lock

@@ -3,7 +3,7 @@ PODS:
     - box-ios-sdk-v2/no-arc (= 1.2.3)
   - box-ios-sdk-v2/no-arc (1.2.3)
   - HockeySDK (3.6.4)
-  - InAppSettingsKit (2.2.2)
+  - InAppSettingsKit (2.6)
   - OBSlider (1.1.0)
   - RESideMenu (4.0.7)
   - SSKeychain (1.2.3)
@@ -12,7 +12,7 @@ PODS:
 DEPENDENCIES:
   - box-ios-sdk-v2 (from `git://github.com/fkuehne/box-ios-sdk-v2.git`)
   - HockeySDK (~> 3.6.4)
-  - InAppSettingsKit (= 2.2.2)
+  - InAppSettingsKit (from `git://github.com/fkuehne/InAppSettingsKit.git`)
   - OBSlider (= 1.1.0)
   - RESideMenu (~> 4.0.7)
   - SSKeychain (from `git://github.com/fkuehne/sskeychain.git`)
@@ -21,6 +21,8 @@ DEPENDENCIES:
 EXTERNAL SOURCES:
   box-ios-sdk-v2:
     :git: git://github.com/fkuehne/box-ios-sdk-v2.git
+  InAppSettingsKit:
+    :git: git://github.com/fkuehne/InAppSettingsKit.git
   SSKeychain:
     :git: git://github.com/fkuehne/sskeychain.git
 
@@ -28,6 +30,9 @@ CHECKOUT OPTIONS:
   box-ios-sdk-v2:
     :commit: 180f009b3b22d813ca40e4c88074e0ef228c357b
     :git: git://github.com/fkuehne/box-ios-sdk-v2.git
+  InAppSettingsKit:
+    :commit: f81fd15b41fe11af1d2dc4020a73afb99b158267
+    :git: git://github.com/fkuehne/InAppSettingsKit.git
   SSKeychain:
     :commit: a8e9b21f96adf1ec296e51778ef137f0ea3bd078
     :git: git://github.com/fkuehne/sskeychain.git
@@ -35,7 +40,7 @@ CHECKOUT OPTIONS:
 SPEC CHECKSUMS:
   box-ios-sdk-v2: 9423bd75373350ea40b92f3d2d6e89f81d96d634
   HockeySDK: c07cdd580296737edcd0963e292c19885a53f563
-  InAppSettingsKit: 76d5cfbaa3e3f8aa53fe3628516da7eb1aa6a5cb
+  InAppSettingsKit: cc56d3ec45f11352a16d5b210da8a3fa1b9d05ed
   OBSlider: 490f108007bfdd5414a38650b211fe403a95b8a0
   RESideMenu: f24c508404b49c667344c54aba7e590883533958
   SSKeychain: 3f42991739c6c60a9cf1bbd4dff6c0d3694bcf3d

+ 4 - 8
VLC for Apple TV/AppleTVAppDelegate.m

@@ -12,7 +12,7 @@
 #import "AppleTVAppDelegate.h"
 #import "VLCLocalNetworkTVViewController.h"
 #import "VLCOpenNetworkStreamTVViewController.h"
-#import "VLCSettingsAboutTableViewController.h"
+#import "VLCSettingsTableViewController.h"
 #import "VLCCloudServicesTVViewController.h"
 
 @interface AppleTVAppDelegate ()
@@ -22,8 +22,7 @@
     VLCLocalNetworkTVViewController *_localNetworkVC;
     VLCCloudServicesTVViewController *_cloudServicesVC;
     VLCOpenNetworkStreamTVViewController *_openNetworkVC;
-    UISplitViewController *_aboutSettingsVC;
-    VLCSettingsAboutTableViewController *_aboutSettingsTableVC;
+    VLCSettingsTableViewController *_settingsTableVC;
 }
 
 @end
@@ -57,10 +56,7 @@
     _localNetworkVC = [[VLCLocalNetworkTVViewController alloc] initWithNibName:nil bundle:nil];
     _cloudServicesVC = [[VLCCloudServicesTVViewController alloc] initWithNibName:nil bundle:nil];
     _openNetworkVC = [[VLCOpenNetworkStreamTVViewController alloc] initWithNibName:nil bundle:nil];
-    _aboutSettingsVC = [[UISplitViewController alloc] init];
-    _aboutSettingsTableVC = [[VLCSettingsAboutTableViewController alloc] initWithNibName:nil bundle:nil];
-    _aboutSettingsVC.viewControllers = @[_aboutSettingsTableVC];
-    _aboutSettingsVC.title = @"\u2699";
+    _settingsTableVC = [[VLCSettingsTableViewController alloc] initWithNibName:nil bundle:nil];
 
     _mainViewController = [[UITabBarController alloc] init];
     _mainViewController.tabBar.backgroundColor = [UIColor VLCOrangeTintColor];
@@ -68,7 +64,7 @@
     _mainViewController.viewControllers = @[[[UINavigationController alloc] initWithRootViewController:_localNetworkVC],
                                             [[UINavigationController alloc] initWithRootViewController:_cloudServicesVC],
                                             [[UINavigationController alloc] initWithRootViewController:_openNetworkVC],
-                                            _aboutSettingsVC];
+                                            [[UINavigationController alloc] initWithRootViewController:_settingsTableVC]];
 
     self.window.rootViewController = _mainViewController;
 

+ 0 - 56
VLC for Apple TV/VLCAboutTVViewController.m

@@ -1,56 +0,0 @@
-/*****************************************************************************
- * VLC for iOS
- *****************************************************************************
- * Copyright (c) 2015 VideoLAN. All rights reserved.
- * $Id$
- *
- * Authors: Felix Paul Kühne <fkuehne # videolan.org>
- *
- * Refer to the COPYING file of the official project for license.
- *****************************************************************************/
-
-#import "VLCAboutTVViewController.h"
-
-@interface VLCAboutTVViewController ()
-{
-    UITextView *_textView;
-}
-
-@end
-
-@implementation VLCAboutTVViewController
-
-- (void)viewDidLoad {
-    [super viewDidLoad];
-
-    CGRect frame = self.view.frame;
-    frame.size.width -= 40.;
-    frame.size.height -= 40.;
-    frame.origin.x += 20.;
-    frame.origin.y += 20.;
-
-    _textView = [[UITextView alloc] initWithFrame:frame];
-    _textView.clipsToBounds = YES;
-    _textView.backgroundColor = [UIColor VLCDarkBackgroundColor];
-    _textView.scrollEnabled = YES;
-
-    NSBundle *mainBundle = [NSBundle mainBundle];
-    NSMutableString *htmlContent = [NSMutableString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"About Contents" ofType:@"html"] encoding:NSUTF8StringEncoding error:nil];
-    [htmlContent replaceOccurrencesOfString:@"VLCFORIOSVERSION" withString:[[NSString stringWithFormat:NSLocalizedString(@"VERSION_FORMAT", nil), [mainBundle objectForInfoDictionaryKey:@"CFBundleShortVersionString"]] stringByAppendingFormat:@" (%@)<br /><i>%@</i>", [mainBundle objectForInfoDictionaryKey:@"CFBundleVersion"], kVLCVersionCodename] options:NSLiteralSearch range:NSMakeRange(800, 1000)];
-    [htmlContent replaceOccurrencesOfString:@"MOBILEVLCKITVERSION" withString:[NSString stringWithFormat:NSLocalizedString(@"BASED_ON_FORMAT", nil),[[VLCLibrary sharedLibrary] version]] options:NSLiteralSearch range:NSMakeRange(800, 1100)];
-
-    NSAttributedString *attributedString = [[NSAttributedString alloc] initWithData:[htmlContent dataUsingEncoding:NSUTF8StringEncoding]
-                                                                            options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
-                                                                                      NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)}
-                                                                 documentAttributes:nil error:nil];
-
-    _textView.attributedText = attributedString;
-    [self.view addSubview:_textView];
-}
-
-- (NSString *)title
-{
-    return @"About";
-}
-
-@end

+ 0 - 13
VLC for Apple TV/VLCSettingsAboutTableViewController.h

@@ -1,13 +0,0 @@
-//
-//  VLCSettingsAboutTableTableViewController.h
-//  VLC for iOS
-//
-//  Created by Felix Paul Kühne on 20/10/15.
-//  Copyright © 2015 VideoLAN. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-
-@interface VLCSettingsAboutTableViewController : UITableViewController
-
-@end

+ 0 - 73
VLC for Apple TV/VLCSettingsAboutTableViewController.m

@@ -1,73 +0,0 @@
-//
-//  VLCSettingsAboutTableTableViewController.m
-//  VLC for iOS
-//
-//  Created by Felix Paul Kühne on 20/10/15.
-//  Copyright © 2015 VideoLAN. All rights reserved.
-//
-
-#import "VLCSettingsAboutTableViewController.h"
-#import "VLCAboutTVViewController.h"
-
-@interface VLCSettingsAboutTableViewController ()
-{
-    VLCAboutTVViewController *_aboutVC;
-}
-@end
-
-@implementation VLCSettingsAboutTableViewController
-
-- (void)viewDidLoad {
-    [super viewDidLoad];
-
-    self.navigationItem.rightBarButtonItem = self.editButtonItem;
-
-    _aboutVC = [[VLCAboutTVViewController alloc] initWithNibName:nil bundle:nil];
-}
-
-- (void)viewWillAppear:(BOOL)animated
-{
-    [super viewWillAppear:animated];
-    [self.parentViewController showDetailViewController:_aboutVC sender:nil];
-}
-
-#pragma mark - Table view data source
-
-- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
-    return 1;
-}
-
-- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
-    return 2;
-}
-
-
-- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
-
-    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"RecentlyPlayedURLsTableViewCell"];
-    if (!cell) {
-        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"RecentlyPlayedURLsTableViewCell"];
-    }
-
-    cell.textLabel.text = @"text";
-    
-    return cell;
-}
-
-
-- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
-    // Return NO if you do not want the specified item to be editable.
-    return YES;
-}
-
-
-- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
-    if (editingStyle == UITableViewCellEditingStyleDelete) {
-        // Delete the row from the data source
-        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
-    } else if (editingStyle == UITableViewCellEditingStyleInsert) {
-        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
-    }   
-}
-
-@end

+ 1 - 1
VLC for Apple TV/VLCAboutTVViewController.h

@@ -11,6 +11,6 @@
 
 #import <UIKit/UIKit.h>
 
-@interface VLCAboutTVViewController : UIViewController
+@interface VLCSettingsTableViewController : UITableViewController
 
 @end

+ 129 - 0
VLC for Apple TV/VLCSettingsTableViewController.m

@@ -0,0 +1,129 @@
+/*****************************************************************************
+ * VLC for iOS
+ *****************************************************************************
+ * Copyright (c) 2015 VideoLAN. All rights reserved.
+ * $Id$
+ *
+ * Authors: Felix Paul Kühne <fkuehne # videolan.org>
+ *
+ * Refer to the COPYING file of the official project for license.
+ *****************************************************************************/
+
+#import "VLCSettingsTableViewController.h"
+#import "IASKSettingsReader.h"
+#import "IASKSpecifier.h"
+
+#define SettingsReUseIdentifier @"SettingsReUseIdentifier"
+#define SettingsHeaderReUseIdentifier @"SettingsHeaderReUseIdentifier"
+
+@interface VLCSettingsTableViewController ()
+{
+    NSUserDefaults *_userDefaults;
+    IASKSettingsReader *_settingsReader;
+}
+@end
+
+@implementation VLCSettingsTableViewController
+
+- (void)loadView
+{
+    UITableView *tableView = [[UITableView alloc] initWithFrame:[UIScreen mainScreen].bounds style:UITableViewStyleGrouped];
+    tableView.delegate = self;
+    tableView.dataSource = self;
+    [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:SettingsReUseIdentifier];
+    [tableView registerClass:[UITableViewHeaderFooterView class] forHeaderFooterViewReuseIdentifier:SettingsHeaderReUseIdentifier];
+    self.view = tableView;
+}
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+
+    self.clearsSelectionOnViewWillAppear = YES;
+
+    _settingsReader = [[IASKSettingsReader alloc] init];
+}
+
+- (NSString *)title
+{
+    return NSLocalizedString(@"Settings", nil);
+}
+
+#pragma mark - Table view data source
+
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
+    return _settingsReader.numberOfSections;
+}
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
+{
+    return [_settingsReader numberOfRowsForSection:section];
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SettingsReUseIdentifier forIndexPath:indexPath];
+
+    IASKSpecifier *specifier = [_settingsReader specifierForIndexPath:indexPath];
+    cell.textLabel.text = [specifier title];
+ 	cell.detailTextLabel.text = [specifier subtitle];
+    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
+
+    return cell;
+}
+
+- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
+{
+    return [_settingsReader titleForSection:section];
+}
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
+{
+    IASKSpecifier *specifier = [_settingsReader specifierForIndexPath:indexPath];
+
+    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:specifier.title
+                                                                             message:nil preferredStyle:UIAlertControllerStyleActionSheet];
+    NSString *specifierType = specifier.type;
+    if ([specifierType isEqualToString:kIASKPSMultiValueSpecifier]) {
+        NSUInteger count = [specifier multipleValuesCount];
+        NSArray *titles = [specifier multipleTitles];
+        NSUInteger indexOfPreferredAction = [[specifier multipleValues] indexOfObject:[_userDefaults objectForKey:[specifier key]]]; // FIXME: lookup correct value
+        for (NSUInteger i = 0; i < count; i++) {
+            id value = [[specifier multipleValues][i] copy];
+            UIAlertAction *action = [UIAlertAction actionWithTitle:[_settingsReader titleForStringId:titles[i]]
+                                                                style:UIAlertActionStyleDefault
+                                                              handler:^(UIAlertAction * _Nonnull action) {
+                                                                  [_userDefaults setObject:value forKey:[specifier key]];
+                                                                  [_userDefaults synchronize];
+                                                                  [self.tableView reloadData];
+                                                              }];
+            [alertController addAction:action];
+            if (i == indexOfPreferredAction)
+                [alertController setPreferredAction:action];
+        }
+    } else if ([specifierType isEqualToString:kIASKPSToggleSwitchSpecifier]) {
+        UIAlertAction *onAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"On", nil)
+                                                            style:UIAlertActionStyleDefault
+                                                          handler:^(UIAlertAction * _Nonnull action) {
+                                                              [_userDefaults setBool:YES forKey:[specifier key]];
+                                                              [_userDefaults synchronize];
+                                                              [self.tableView reloadData];
+                                                          }];
+        UIAlertAction *offAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"Off", nil)
+                                                            style:UIAlertActionStyleDefault
+                                                          handler:^(UIAlertAction * _Nonnull action) {
+                                                              [_userDefaults setBool:NO forKey:[specifier key]];
+                                                              [_userDefaults synchronize];
+                                                              [self.tableView reloadData];
+                                                          }];
+        [alertController addAction:onAction];
+        [alertController addAction:offAction];
+        [alertController setPreferredAction:[_userDefaults boolForKey:[specifier key]] ? onAction : offAction];
+    }
+
+    [alertController addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"BUTTON_CANCEL", nil)
+                                                        style:UIAlertActionStyleCancel
+                                                      handler:nil]];
+
+    [self presentViewController:alertController animated:YES completion:nil];
+}
+
+@end

+ 26 - 12
VLC for iOS.xcodeproj/project.pbxproj

@@ -212,8 +212,6 @@
 		7DEC8BDE1BD67899006E1093 /* VLCFullscreenMovieTVViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DEC8BDC1BD67899006E1093 /* VLCFullscreenMovieTVViewController.m */; };
 		7DEC8BDF1BD67899006E1093 /* VLCFullscreenMovieTVViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7DEC8BDD1BD67899006E1093 /* VLCFullscreenMovieTVViewController.xib */; };
 		7DEC8BE91BD68BC9006E1093 /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 7DEC8BE81BD68BC9006E1093 /* Settings.bundle */; };
-		7DEC8BED1BD68D6A006E1093 /* VLCAboutTVViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DEC8BEB1BD68D6A006E1093 /* VLCAboutTVViewController.m */; };
-		7DEC8C1D1BD6913A006E1093 /* VLCSettingsAboutTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DEC8C1C1BD6913A006E1093 /* VLCSettingsAboutTableViewController.m */; };
 		7DEC8C1E1BD69710006E1093 /* About Contents.html in Resources */ = {isa = PBXBuildFile; fileRef = 7D5DD5C617590ABF001421E3 /* About Contents.html */; };
 		7DEC8C1F1BD6A113006E1093 /* UIDevice+VLC.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D3784C7183A9972009EE944 /* UIDevice+VLC.m */; };
 		7DF04F4D1961F2B8004A5429 /* web-download-fixed.png in Resources */ = {isa = PBXBuildFile; fileRef = 7DF04F491961F2B8004A5429 /* web-download-fixed.png */; };
@@ -227,6 +225,9 @@
 		7DF28AE11BA31C580030C944 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DF28AE01BA31C580030C944 /* libc++.tbd */; };
 		7DF7CA0717650C2A00C61739 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DF7CA0617650C2A00C61739 /* AVFoundation.framework */; };
 		7DF7E791175F47DC0018858D /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DF7E790175F47DC0018858D /* MediaPlayer.framework */; };
+		7DF90B441BE7A5380059C0E3 /* VLCSettingsTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DF90B431BE7A5380059C0E3 /* VLCSettingsTableViewController.m */; };
+		7DF90B4A1BE7A8110059C0E3 /* IASKSettingsReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DF90B471BE7A8110059C0E3 /* IASKSettingsReader.m */; };
+		7DF90B4B1BE7A8110059C0E3 /* IASKSpecifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DF90B491BE7A8110059C0E3 /* IASKSpecifier.m */; };
 		7DF9352F1958AB0600E60FD4 /* UIColor+Presets.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DF9352E1958AB0600E60FD4 /* UIColor+Presets.m */; };
 		8F91EC79195CEC7900F5BCBA /* VLCOpenInActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F91EC78195CEC7900F5BCBA /* VLCOpenInActivity.m */; };
 		8F91EC7F195E1DAB00F5BCBA /* AssetsLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F91EC7E195E1DAB00F5BCBA /* AssetsLibrary.framework */; };
@@ -835,10 +836,6 @@
 		7DEC8BDC1BD67899006E1093 /* VLCFullscreenMovieTVViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCFullscreenMovieTVViewController.m; sourceTree = "<group>"; };
 		7DEC8BDD1BD67899006E1093 /* VLCFullscreenMovieTVViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = VLCFullscreenMovieTVViewController.xib; sourceTree = "<group>"; };
 		7DEC8BE81BD68BC9006E1093 /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = "<group>"; };
-		7DEC8BEA1BD68D6A006E1093 /* VLCAboutTVViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCAboutTVViewController.h; sourceTree = "<group>"; };
-		7DEC8BEB1BD68D6A006E1093 /* VLCAboutTVViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCAboutTVViewController.m; sourceTree = "<group>"; };
-		7DEC8C1B1BD6913A006E1093 /* VLCSettingsAboutTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCSettingsAboutTableViewController.h; sourceTree = "<group>"; };
-		7DEC8C1C1BD6913A006E1093 /* VLCSettingsAboutTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCSettingsAboutTableViewController.m; sourceTree = "<group>"; };
 		7DF04F491961F2B8004A5429 /* web-download-fixed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "web-download-fixed.png"; path = "Resources/web-download-fixed.png"; sourceTree = SOURCE_ROOT; };
 		7DF04F4A1961F2B8004A5429 /* web-download.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "web-download.png"; path = "Resources/web-download.png"; sourceTree = SOURCE_ROOT; };
 		7DF04F4B1961F2B8004A5429 /* web-open-fixed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "web-open-fixed.png"; path = "Resources/web-open-fixed.png"; sourceTree = SOURCE_ROOT; };
@@ -853,6 +850,12 @@
 		7DF28AE41BA31D9C0030C944 /* libSystem.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libSystem.tbd; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS9.0.sdk/usr/lib/libSystem.tbd; sourceTree = DEVELOPER_DIR; };
 		7DF7CA0617650C2A00C61739 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
 		7DF7E790175F47DC0018858D /* MediaPlayer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaPlayer.framework; path = System/Library/Frameworks/MediaPlayer.framework; sourceTree = SDKROOT; };
+		7DF90B421BE7A5380059C0E3 /* VLCSettingsTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCSettingsTableViewController.h; sourceTree = "<group>"; };
+		7DF90B431BE7A5380059C0E3 /* VLCSettingsTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCSettingsTableViewController.m; sourceTree = "<group>"; };
+		7DF90B461BE7A8110059C0E3 /* IASKSettingsReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IASKSettingsReader.h; path = Pods/InAppSettingsKit/InAppSettingsKit/Models/IASKSettingsReader.h; sourceTree = SOURCE_ROOT; };
+		7DF90B471BE7A8110059C0E3 /* IASKSettingsReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IASKSettingsReader.m; path = Pods/InAppSettingsKit/InAppSettingsKit/Models/IASKSettingsReader.m; sourceTree = SOURCE_ROOT; };
+		7DF90B481BE7A8110059C0E3 /* IASKSpecifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IASKSpecifier.h; path = Pods/InAppSettingsKit/InAppSettingsKit/Models/IASKSpecifier.h; sourceTree = SOURCE_ROOT; };
+		7DF90B491BE7A8110059C0E3 /* IASKSpecifier.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IASKSpecifier.m; path = Pods/InAppSettingsKit/InAppSettingsKit/Models/IASKSpecifier.m; sourceTree = SOURCE_ROOT; };
 		7DF9352D1958AB0600E60FD4 /* UIColor+Presets.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "UIColor+Presets.h"; path = "Sources/UIColor+Presets.h"; sourceTree = SOURCE_ROOT; };
 		7DF9352E1958AB0600E60FD4 /* UIColor+Presets.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "UIColor+Presets.m"; path = "Sources/UIColor+Presets.m"; sourceTree = SOURCE_ROOT; };
 		8F91EC77195CEC7900F5BCBA /* VLCOpenInActivity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCOpenInActivity.h; path = Sources/VLCOpenInActivity.h; sourceTree = SOURCE_ROOT; };
@@ -1926,14 +1929,24 @@
 		7DEC8BEF1BD68D71006E1093 /* Settings and stuff */ = {
 			isa = PBXGroup;
 			children = (
-				7DEC8BEA1BD68D6A006E1093 /* VLCAboutTVViewController.h */,
-				7DEC8BEB1BD68D6A006E1093 /* VLCAboutTVViewController.m */,
-				7DEC8C1B1BD6913A006E1093 /* VLCSettingsAboutTableViewController.h */,
-				7DEC8C1C1BD6913A006E1093 /* VLCSettingsAboutTableViewController.m */,
+				7DF90B421BE7A5380059C0E3 /* VLCSettingsTableViewController.h */,
+				7DF90B431BE7A5380059C0E3 /* VLCSettingsTableViewController.m */,
+				7DF90B451BE7A8030059C0E3 /* Mini-InAppSettingsKit */,
 			);
 			name = "Settings and stuff";
 			sourceTree = "<group>";
 		};
+		7DF90B451BE7A8030059C0E3 /* Mini-InAppSettingsKit */ = {
+			isa = PBXGroup;
+			children = (
+				7DF90B461BE7A8110059C0E3 /* IASKSettingsReader.h */,
+				7DF90B471BE7A8110059C0E3 /* IASKSettingsReader.m */,
+				7DF90B481BE7A8110059C0E3 /* IASKSpecifier.h */,
+				7DF90B491BE7A8110059C0E3 /* IASKSpecifier.m */,
+			);
+			name = "Mini-InAppSettingsKit";
+			sourceTree = "<group>";
+		};
 		7DFB1567185CC38A008D49BB /* Dropbox */ = {
 			isa = PBXGroup;
 			children = (
@@ -2720,6 +2733,7 @@
 				DD8095E01BE3EFC20065D8E1 /* VLCPlaybackInfoTVViewController.m in Sources */,
 				7DEC8C1F1BD6A113006E1093 /* UIDevice+VLC.m in Sources */,
 				DDEAECFE1BDFFAEE00756C83 /* Reachability.m in Sources */,
+				7DF90B441BE7A5380059C0E3 /* VLCSettingsTableViewController.m in Sources */,
 				DD3EFF561BDEBCE500B68579 /* VLCLocalNetworkServiceBrowserDSM.m in Sources */,
 				DD3EABF91BE14BD6003668DA /* BasicUPnPDevice+VLC.m in Sources */,
 				7D0C34E71BD951080058CD19 /* NSString+SupportedMedia.m in Sources */,
@@ -2733,7 +2747,6 @@
 				7D13347F1BE132ED0012E919 /* VLCLocalNetworkServiceUPnP.m in Sources */,
 				DD3EFF4A1BDEBCE500B68579 /* VLCLocalNetworkServiceBrowserPlex.m in Sources */,
 				DD3EABEF1BE14720003668DA /* VLCPlaybackControlsFocusView.m in Sources */,
-				7DEC8BED1BD68D6A006E1093 /* VLCAboutTVViewController.m in Sources */,
 				DD3EFF3A1BDEBCE500B68579 /* VLCLocalNetworkServiceVLCMedia.m in Sources */,
 				7D7EF3DA1BD56B5900CD4CEE /* VLCOpenNetworkStreamTVViewController.m in Sources */,
 				DD3EFF521BDEBCE500B68579 /* VLCPlexWebAPI.m in Sources */,
@@ -2749,9 +2762,11 @@
 				DDEAECF11BDFE9E800756C83 /* VLCServerListTVTableViewController.m in Sources */,
 				7DEC8BDE1BD67899006E1093 /* VLCFullscreenMovieTVViewController.m in Sources */,
 				DD3EFF501BDEBCE500B68579 /* VLCPlexParser.m in Sources */,
+				7DF90B4B1BE7A8110059C0E3 /* IASKSpecifier.m in Sources */,
 				7D44085A1BDA8DCE0080FB42 /* VLCBoxTableViewController.m in Sources */,
 				7D0EDE0A1BE7752C00363AA1 /* VLCNetworkServerBrowserFTP.m in Sources */,
 				DD3EFF4E1BDEBCE500B68579 /* VLCNetworkServerBrowserPlex.m in Sources */,
+				7DF90B4A1BE7A8110059C0E3 /* IASKSettingsReader.m in Sources */,
 				DD3EFF3E1BDEBCE500B68579 /* VLCLocalNetworkServiceBrowserHTTP.m in Sources */,
 				7DC71D261BC830A5001FACAA /* VLCLocalNetworkTVViewController.m in Sources */,
 				7D5278E21BD7E06E00D0CA0E /* VLCDropboxController.m in Sources */,
@@ -2778,7 +2793,6 @@
 				7D5278E41BD7E37300D0CA0E /* VLCCloudStorageController.m in Sources */,
 				DD490B171BE6BA580010F335 /* VLCIRTVTapGestureRecognizer.m in Sources */,
 				7D3E528B1BD7B5E100309D15 /* VLCCloudServicesTVViewController.m in Sources */,
-				7DEC8C1D1BD6913A006E1093 /* VLCSettingsAboutTableViewController.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};