diff --git a/.github/workflows/buildapp.yml b/.github/workflows/buildapp.yml
index d5e397c..2a83c70 100644
--- a/.github/workflows/buildapp.yml
+++ b/.github/workflows/buildapp.yml
@@ -54,7 +54,7 @@ concurrency:
jobs:
build:
name: Build uYouEnhanced
- runs-on: macos-latest
+ runs-on: macos-12
permissions:
contents: write
diff --git a/.github/workflows/update-submodules.yml b/.github/workflows/update-submodules.yml
index c2609b9..9145745 100644
--- a/.github/workflows/update-submodules.yml
+++ b/.github/workflows/update-submodules.yml
@@ -22,14 +22,14 @@ jobs:
git add .
git submodule update --init --recursive --remote Tweaks/DontEatMyContent
git add .
+ git submodule update --init --recursive --remote Tweaks/IAmYouTube
+ git add .
git submodule update --init --recursive --remote Tweaks/YTHoldForSpeed
git add .
git submodule update --init --recursive --remote Tweaks/YTSpeed
git add .
git submodule update --init --recursive --remote Tweaks/MrBeastify
git add .
- git submodule update --init --recursive --remote Tweaks/PSHeader
- git add .
git submodule update --init --recursive --remote Tweaks/Return-YouTube-Dislikes
git add .
git submodule update --init --recursive --remote Tweaks/uYouLocalization
diff --git a/.gitmodules b/.gitmodules
index 2b0e99b..2fd44ec 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -32,7 +32,7 @@
branch = main
[submodule "Tweaks/YTABConfig"]
path = Tweaks/YTABConfig
- url = https://github.com/arichornlover/YTABConfig.git
+ url = https://github.com/arichornlover/YTABConfig2.git
branch = main
[submodule "Tweaks/Alderis"]
path = Tweaks/Alderis
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
index 3e4aed2..1f88a3b 100644
--- a/CODE_OF_CONDUCT.md
+++ b/CODE_OF_CONDUCT.md
@@ -24,5 +24,5 @@ The following versions of the uYouEnhanced Tweak are currently supported with se
| Developer(s) | Version | LTS Support | YT Version Supported | App Stability | uYou Functionality |
| ----------- | ------- | ----------- | -------------------- | ------------- | ------------------ |
| MiRO92(uYou) & arichornlover(uYouEnhanced) | [latest](https://github.com/arichornlover/uYouEnhanced/releases/latest) | ✅ | ✅ | Stable | Fully functional |
-| MiRO92(uYou) & bhackel(uYouEnhanced-LTS) | [19.06.2-3.0.3 LTS](https://github.com/bhackel/uYouEnhanced/releases/tag/v19.06.2-3.0.3-(98)) | ✅ | ✅ | Stable, only provides version 19.06.2 of YouTube and uYou 3.0.3 | Crashes the app if the video is in fullscreen on an iPad, which would only happen if you installed the .ipa using a different sideloading/jailbreak tool. |
+| MiRO92(uYou) & bhackel(uYouEnhanced-LTS) | [19.06.2-3.0.3 LTS](https://github.com/bhackel/uYouEnhanced/releases/tag/v19.06.2-3.0.3-(185)) | ✅ | ✅ | Stable, only provides version 19.06.2 of YouTube and uYou 3.0.3 | Crashes the app if the video is in fullscreen on an iPad, which would only happen if you installed the .ipa using a different sideloading/jailbreak tool. |
| MiRO92(uYou) & arichornlover(uYouEnhanced-LTS)| [16.42.3-2.1 LTS](https://github.com/arichornlover/uYouEnhanced/tree/main-16.42.3LTS) | Discontinued | ❌ | iOS 16+ compatibility issues, some features may not work properly. App will not work anymore, affecting versions v16.05.7-v17.32.2 as well. 💔 | uYou Video/Audio Downloading is offline (except uYouLocal). |
diff --git a/Localizations/uYouPlus.bundle/AppIcons/2007.png b/Localizations/uYouPlus.bundle/AppIcons/2007.png
new file mode 100644
index 0000000..dc05fcc
Binary files /dev/null and b/Localizations/uYouPlus.bundle/AppIcons/2007.png differ
diff --git a/Localizations/uYouPlus.bundle/AppIcons/2012.png b/Localizations/uYouPlus.bundle/AppIcons/2012.png
new file mode 100644
index 0000000..73ffad2
Binary files /dev/null and b/Localizations/uYouPlus.bundle/AppIcons/2012.png differ
diff --git a/Localizations/uYouPlus.bundle/AppIcons/2012_blue.png b/Localizations/uYouPlus.bundle/AppIcons/2012_blue.png
new file mode 100644
index 0000000..87573da
Binary files /dev/null and b/Localizations/uYouPlus.bundle/AppIcons/2012_blue.png differ
diff --git a/Localizations/uYouPlus.bundle/AppIcons/2013.png b/Localizations/uYouPlus.bundle/AppIcons/2013.png
new file mode 100644
index 0000000..bb98018
Binary files /dev/null and b/Localizations/uYouPlus.bundle/AppIcons/2013.png differ
diff --git a/Localizations/uYouPlus.bundle/AppIcons/AppIcon1.png b/Localizations/uYouPlus.bundle/AppIcons/AppIcon1.png
deleted file mode 100644
index bcbc443..0000000
Binary files a/Localizations/uYouPlus.bundle/AppIcons/AppIcon1.png and /dev/null differ
diff --git a/Localizations/uYouPlus.bundle/AppIcons/AppIcon2.png b/Localizations/uYouPlus.bundle/AppIcons/AppIcon2.png
deleted file mode 100644
index 2021694..0000000
Binary files a/Localizations/uYouPlus.bundle/AppIcons/AppIcon2.png and /dev/null differ
diff --git a/Localizations/uYouPlus.bundle/AppIcons/Black.png b/Localizations/uYouPlus.bundle/AppIcons/Black.png
new file mode 100644
index 0000000..0e3e642
Binary files /dev/null and b/Localizations/uYouPlus.bundle/AppIcons/Black.png differ
diff --git a/Localizations/uYouPlus.bundle/AppIcons/Oreo.png b/Localizations/uYouPlus.bundle/AppIcons/Oreo.png
new file mode 100644
index 0000000..e865024
Binary files /dev/null and b/Localizations/uYouPlus.bundle/AppIcons/Oreo.png differ
diff --git a/Localizations/uYouPlus.bundle/AppIcons/Outline.png b/Localizations/uYouPlus.bundle/AppIcons/Outline.png
new file mode 100644
index 0000000..d57274f
Binary files /dev/null and b/Localizations/uYouPlus.bundle/AppIcons/Outline.png differ
diff --git a/Localizations/uYouPlus.bundle/AppIcons/White.png b/Localizations/uYouPlus.bundle/AppIcons/White.png
new file mode 100644
index 0000000..d872a15
Binary files /dev/null and b/Localizations/uYouPlus.bundle/AppIcons/White.png differ
diff --git a/Localizations/uYouPlus.bundle/AppIcons/YTLitePlus.png b/Localizations/uYouPlus.bundle/AppIcons/YTLitePlus.png
new file mode 100644
index 0000000..b5bd01d
Binary files /dev/null and b/Localizations/uYouPlus.bundle/AppIcons/YTLitePlus.png differ
diff --git a/Localizations/uYouPlus.bundle/AppIcons/uYou.png b/Localizations/uYouPlus.bundle/AppIcons/uYou.png
new file mode 100644
index 0000000..65afe00
Binary files /dev/null and b/Localizations/uYouPlus.bundle/AppIcons/uYou.png differ
diff --git a/Localizations/uYouPlus.bundle/AppIcons/uYouPlus.png b/Localizations/uYouPlus.bundle/AppIcons/uYouPlus.png
new file mode 100644
index 0000000..71752a9
Binary files /dev/null and b/Localizations/uYouPlus.bundle/AppIcons/uYouPlus.png differ
diff --git a/Localizations/uYouPlus.bundle/Back.png b/Localizations/uYouPlus.bundle/Back.png
new file mode 100644
index 0000000..4719983
Binary files /dev/null and b/Localizations/uYouPlus.bundle/Back.png differ
diff --git a/Localizations/uYouPlus.bundle/Info.plist b/Localizations/uYouPlus.bundle/Info.plist
index 23d7e62..b6ae7e4 100644
--- a/Localizations/uYouPlus.bundle/Info.plist
+++ b/Localizations/uYouPlus.bundle/Info.plist
@@ -2,23 +2,113 @@
- CFBundleDevelopmentRegion
- English
- CFBundleExecutable
- YouTubeTweak
- CFBundleIdentifier
- com.qn.uyouplus
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundlePackageType
- BNDL
- CFBundleShortVersionString
- 1.0.0
- CFBundleSignature
- ????
- CFBundleVersion
- 1.0
- NSPrincipalClass
- uYouPlus
-
+ CFBundleDevelopmentRegion
+ English
+ CFBundleExecutable
+ YouTubeTweak
+ CFBundleIdentifier
+ com.qn.uyouplus
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundlePackageType
+ BNDL
+ CFBundleShortVersionString
+ 1.0.0
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1.0
+ NSPrincipalClass
+ uYouPlus
+ CFBundleIcons
+
+ CFBundlePrimaryIcon
+
+ CFBundleIconFiles
+
+ AppIcon
+
+
+ CFBundleAlternateIcons
+
+ White
+
+ CFBundleIconFiles
+
+ White
+
+
+ YTLitePlus
+
+ CFBundleIconFiles
+
+ YTLitePlus
+
+
+ Outline
+
+ CFBundleIconFiles
+
+ Outline
+
+
+ 2012
+
+ CFBundleIconFiles
+
+ 2012
+
+
+ 2013
+
+ CFBundleIconFiles
+
+ 2013
+
+
+ 2007
+
+ CFBundleIconFiles
+
+ 2007
+
+
+ Black
+
+ CFBundleIconFiles
+
+ Black
+
+
+ Oreo
+
+ CFBundleIconFiles
+
+ Oreo
+
+
+ uYou
+
+ CFBundleIconFiles
+
+ uYou
+
+
+ 2012_blue
+
+ CFBundleIconFiles
+
+ 2012_blue
+
+
+ uYouPlus
+
+ CFBundleIconFiles
+
+ uYouPlus
+
+
+
+
+
diff --git a/Localizations/uYouPlus.bundle/uYouPlus_logo_main.png b/Localizations/uYouPlus.bundle/uYouPlus_logo_main.png
deleted file mode 100644
index 9239573..0000000
Binary files a/Localizations/uYouPlus.bundle/uYouPlus_logo_main.png and /dev/null differ
diff --git a/Makefile b/Makefile
index 43dd88a..299292c 100644
--- a/Makefile
+++ b/Makefile
@@ -14,7 +14,7 @@ MODULES = jailed
endif
ifndef YOUTUBE_VERSION
-YOUTUBE_VERSION = 19.13.1
+YOUTUBE_VERSION = 19.14.3
endif
ifndef UYOU_VERSION
UYOU_VERSION = 3.0.3
diff --git a/README.md b/README.md
index 31d86b4..427bc98 100644
--- a/README.md
+++ b/README.md
@@ -280,17 +280,17 @@
- My official AltStore repo: https://therealfoxster.github.io/altsource-viewer/view/?source=https://raw.githubusercontent.com/arichornlover/arichornlover.github.io/main/apps.json
- - [Open in AltStore (v19.10.7-3.0.3)](https://tinyurl.com/2s4zrj2h) - It will take a while to install because AltStore needs to download the IPA first.
+ - [Open in AltStore (v19.14.2-3.0.3)](https://tinyurl.com/2mc82ksf) - It will take a while to install because AltStore needs to download the IPA first.
- Version information (last updated: Apr 4, 2024)
+ Version information (last updated: Apr 10, 2024)
| **Tweaks/App** | **Developer** | **Version** | **Open source** |
| - | - | :-: | :-: |
-| **YouTube** | Google Inc | 19.13.1 | ✖︎ |
+| **YouTube** | Google Inc | 19.14.2 | ✖︎ |
| [uYou](https://github.com/MiRO92/uYou-for-YouTube) | [MiRO92](https://twitter.com/miro92) | 3.0.3 | ✖︎ |
| **Open in YouTube** | [CokePokes](https://github.com/CokePokes) | 1.2 | [✔︎](https://github.com/CokePokes/YoutubeExtensions) |
-| **iSponsorBlock** | [Galactic-Dev](https://github.com/Galactic-Dev) | 1.2.2 | [✔︎](https://github.com/Galactic-Dev/iSponsorBlock) |
+| **iSponsorBlock** | [Galactic-Dev](https://github.com/Galactic-Dev) | 1.2.4 | [✔︎](https://github.com/Galactic-Dev/iSponsorBlock) |
| **BigYTMiniPlayer** | [Galactic-Dev](https://github.com/Galactic-Dev) | 1.0-1 | [✔︎](https://github.com/Galactic-Dev/BigYTMiniPlayer) |
| **YTNoHoverCards** | [level3tjg](https://twitter.com/level3tjg) | 0.0.3 | [✔︎](https://github.com/level3tjg/YTNoHoverCards) |
| **YTMiniplayerEnabler** | [level3tjg](https://twitter.com/level3tjg) | 0.0.2 | [✔︎](https://github.com/level3tjg/YTMiniplayerEnabler) |
diff --git a/Sources/AppIconOptionsController.m b/Sources/AppIconOptionsController.m
index ea65b9a..c58847e 100644
--- a/Sources/AppIconOptionsController.m
+++ b/Sources/AppIconOptionsController.m
@@ -1,11 +1,10 @@
#import "AppIconOptionsController.h"
-@interface AppIconOptionsController ()
+@interface AppIconOptionsController ()
-@property (strong, nonatomic) UICollectionView *collectionView;
-@property (strong, nonatomic) UIImageView *iconPreview;
+@property (strong, nonatomic) UITableView *tableView;
@property (strong, nonatomic) NSArray *appIcons;
-@property (strong, nonatomic) NSString *selectedIconFile;
+@property (assign, nonatomic) NSInteger selectedIconIndex;
@end
@@ -14,110 +13,135 @@
- (void)viewDidLoad {
[super viewDidLoad];
- UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
- self.collectionView = [[UICollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:layout];
- self.collectionView.dataSource = self;
- self.collectionView.delegate = self;
- [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"Cell"];
- [self.view addSubview:self.collectionView];
+ self.title = @"Change App Icon";
+ [self.navigationController.navigationBar setTitleTextAttributes:@{NSFontAttributeName: [UIFont fontWithName:@"YTSans-Bold" size:22], NSForegroundColorAttributeName: [UIColor whiteColor]}];
+
+ self.selectedIconIndex = -1;
- UIButton *defaultButton = [UIButton buttonWithType:UIButtonTypeSystem];
- defaultButton.frame = CGRectMake(20, 100, 100, 40);
- [defaultButton setTitle:@"Default" forState:UIControlStateNormal];
- [defaultButton addTarget:self action:@selector(setDefaultIcon) forControlEvents:UIControlEventTouchUpInside];
- [self.view addSubview:defaultButton];
-
- UIButton *saveButton = [UIButton buttonWithType:UIButtonTypeSystem];
- saveButton.frame = CGRectMake(150, 100, 100, 40);
- [saveButton setTitle:@"Save" forState:UIControlStateNormal];
- [saveButton addTarget:self action:@selector(saveIcon) forControlEvents:UIControlEventTouchUpInside];
- [self.view addSubview:saveButton];
-
- self.iconPreview = [[UIImageView alloc] initWithFrame:CGRectMake(20, 150, 60, 60)];
- self.iconPreview.layer.cornerRadius = 10.0;
- self.iconPreview.clipsToBounds = YES;
- [self.view addSubview:self.iconPreview];
-
- NSString *path = [[NSBundle mainBundle] pathForResource:@"uYouPlus" ofType:@"bundle"];
- NSBundle *bundle = [NSBundle bundleWithPath:path];
- self.appIcons = [bundle pathsForResourcesOfType:@"png" inDirectory:@"AppIcons"];
-
- if ([UIApplication sharedApplication].supportsAlternateIcons) {
- } else {
- NSLog(@"Alternate icons are not supported on this device.");
- }
+ self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
+ self.tableView.dataSource = self;
+ self.tableView.delegate = self;
+ self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+ [self.view addSubview:self.tableView];
+
+ UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Back.png" inBundle:[NSBundle mainBundle] compatibleWithTraitCollection:nil] style:UIBarButtonItemStylePlain target:self action:@selector(back)];
+ self.navigationItem.leftBarButtonItem = backButton;
+
+ self.appIcons = [self loadAppIcons];
+ [self setupNavigationBar];
}
-- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
+- (NSArray *)loadAppIcons {
+ NSString *path = [[NSBundle mainBundle] pathForResource:@"uYouPlus" ofType:@"bundle"];
+ NSBundle *bundle = [NSBundle bundleWithPath:path];
+ return [bundle pathsForResourcesOfType:@"png" inDirectory:@"AppIcons"];
+}
+
+- (void)setupNavigationBar {
+ UIBarButtonItem *resetButton = [[UIBarButtonItem alloc] initWithImage:[UIImage systemImageNamed:@"arrow.clockwise.circle.fill"] style:UIBarButtonItemStylePlain target:self action:@selector(resetIcon)];
+
+ UIBarButtonItem *saveButton = [[UIBarButtonItem alloc] initWithTitle:@"Save" style:UIBarButtonItemStylePlain target:self action:@selector(saveIcon)];
+ [self.navigationItem setRightBarButtonItems:@[saveButton, resetButton]];
+}
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.appIcons.count;
}
-- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
- UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+ UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
+ if (!cell) {
+ cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
+ }
- UIImage *appIconImage = [UIImage imageWithContentsOfFile:self.appIcons[indexPath.row]];
- UIImage *resizedIconImage = [self resizedImageWithImage:appIconImage];
-
- UIImageView *imageView = [[UIImageView alloc] initWithImage:resizedIconImage];
- imageView.contentMode = UIViewContentModeScaleAspectFit;
- imageView.frame = cell.contentView.bounds;
- imageView.layer.cornerRadius = 10.0;
- imageView.clipsToBounds = YES;
- [cell.contentView addSubview:imageView];
+ [cell.contentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
+ NSString *iconPath = self.appIcons[indexPath.row];
+ UIImage *iconImage = [UIImage imageWithContentsOfFile:iconPath];
+
+ UIImageView *iconImageView = [[UIImageView alloc] initWithImage:iconImage];
+ iconImageView.contentMode = UIViewContentModeScaleAspectFit;
+ iconImageView.frame = CGRectMake(16, 10, 60, 60);
+ iconImageView.layer.cornerRadius = 8;
+ iconImageView.layer.masksToBounds = YES;
+ [cell.contentView addSubview:iconImageView];
+
+ UILabel *iconNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(90, 10, self.view.frame.size.width - 90, 60)];
+ iconNameLabel.text = [iconPath.lastPathComponent stringByDeletingPathExtension];
+ iconNameLabel.textColor = [UIColor blackColor];
+ iconNameLabel.font = [UIFont systemFontOfSize:16.0 weight:UIFontWeightMedium];
+ [cell.contentView addSubview:iconNameLabel];
+
+ cell.accessoryType = (indexPath.row == self.selectedIconIndex) ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;
+
return cell;
}
-- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
- self.selectedIconFile = self.appIcons[indexPath.row];
- UIImage *selectedIconImage = [UIImage imageWithContentsOfFile:self.selectedIconFile];
- UIImage *resizedSelectedIconImage = [self resizedImageWithImage:selectedIconImage];
- self.iconPreview.image = resizedSelectedIconImage;
-}
-
-- (void)setDefaultIcon {
- self.iconPreview.image = nil;
- self.selectedIconFile = nil;
+- (void)resetIcon {
+ [[UIApplication sharedApplication] setAlternateIconName:nil completionHandler:^(NSError * _Nullable error) {
+ if (error) {
+ NSLog(@"Error resetting icon: %@", error.localizedDescription);
+ [self showAlertWithTitle:@"Error" message:@"Failed to reset icon"];
+ } else {
+ NSLog(@"Icon reset successfully");
+ [self showAlertWithTitle:@"Success" message:@"Icon reset successfully"];
+ [self.tableView reloadData];
+ }
+ }];
}
- (void)saveIcon {
- if (self.selectedIconFile) {
- [[UIApplication sharedApplication] setAlternateIconName:[self.selectedIconFile.lastPathComponent stringByDeletingPathExtension] completionHandler:^(NSError * _Nullable error){
- if (error) {
- NSLog(@"Error setting alternate icon: %@", error.localizedDescription);
- dispatch_async(dispatch_get_main_queue(), ^{
- UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Error" message:@"Failed to set alternate icon" preferredStyle:UIAlertControllerStyleAlert];
- UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
- [alert addAction:okAction];
- [self presentViewController:alert animated:YES completion:nil];
- });
+ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
+ NSString *selectedIcon = self.selectedIconIndex >= 0 ? self.appIcons[self.selectedIconIndex] : nil;
+ if (selectedIcon) {
+ NSString *iconName = [selectedIcon.lastPathComponent stringByDeletingPathExtension];
+ NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Info" ofType:@"plist"];
+ NSMutableDictionary *infoDict = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath];
+ NSMutableDictionary *iconsDict = [infoDict objectForKey:@"CFBundleIcons"];
+
+ if (iconsDict) {
+ NSMutableDictionary *primaryIconDict = [iconsDict objectForKey:@"CFBundlePrimaryIcon"];
+ if (primaryIconDict) {
+ NSMutableArray *iconFiles = [primaryIconDict objectForKey:@"CFBundleIconFiles"];
+ [iconFiles addObject:iconName];
+ primaryIconDict[@"CFBundleIconFiles"] = iconFiles;
+ }
+ [infoDict setObject:iconsDict forKey:@"CFBundleIcons"];
+ [infoDict writeToFile:plistPath atomically:YES];
+
+ [[UIApplication sharedApplication] setAlternateIconName:iconName completionHandler:^(NSError * _Nullable error) {
+ if (error) {
+ NSLog(@"Error setting alternate icon: %@", error.localizedDescription);
+ [self showAlertWithTitle:@"Error" message:@"Failed to set alternate icon"];
+ } else {
+ NSLog(@"Alternate icon set successfully");
+ [self showAlertWithTitle:@"Success" message:@"Alternate icon set successfully"];
+
+ dispatch_async(dispatch_get_main_queue(), ^{
+ [self.tableView reloadData];
+ });
+ }
+ }];
} else {
- NSLog(@"Alternate icon set successfully");
- dispatch_async(dispatch_get_main_queue(), ^{
- UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Success" message:@"Alternate icon set successfully" preferredStyle:UIAlertControllerStyleAlert];
- UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
- [alert addAction:okAction];
- [self presentViewController:alert animated:YES completion:nil];
- });
+ NSLog(@"CFBundleIcons key not found in Info.plist");
}
- }];
- } else {
- NSLog(@"No icon selected to save");
- UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"No Icon Selected" message:@"Please select an icon before saving" preferredStyle:UIAlertControllerStyleAlert];
+ } else {
+ NSLog(@"Selected icon path is nil");
+ }
+ });
+}
+
+- (void)showAlertWithTitle:(NSString *)title message:(NSString *)message {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ UIAlertController *alert = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
[alert addAction:okAction];
[self presentViewController:alert animated:YES completion:nil];
- }
+ });
}
-- (UIImage *)resizedImageWithImage:(UIImage *)image {
- CGFloat scale = [UIScreen mainScreen].scale;
- CGSize newSize = CGSizeMake(image.size.width / scale, image.size.height / scale);
- UIGraphicsBeginImageContextWithOptions(newSize, NO, scale);
- [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
- UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext();
- UIGraphicsEndImageContext();
- return resizedImage;
+- (void)back {
+ [self.navigationController popViewControllerAnimated:YES];
}
@end
diff --git a/Sources/ColourOptionsController.m b/Sources/ColourOptionsController.m
index 261aae8..dd81045 100644
--- a/Sources/ColourOptionsController.m
+++ b/Sources/ColourOptionsController.m
@@ -7,10 +7,10 @@
@implementation ColourOptionsController
- (void)loadView {
- [super loadView];
+ [super loadView];
+
+ self.title = @"Custom Theme Color";
- self.title = @"Theme Custom Color";
-
UIBarButtonItem *closeButton = [[UIBarButtonItem alloc] initWithTitle:@"Close" style:UIBarButtonItemStylePlain target:self action:@selector(close)];
UIBarButtonItem *saveButton = [[UIBarButtonItem alloc] initWithTitle:@"Save" style:UIBarButtonItemStylePlain target:self action:@selector(save)];
self.navigationItem.rightBarButtonItems = @[closeButton, saveButton];
@@ -24,10 +24,19 @@
[unarchiver setRequiresSecureCoding:NO];
UIColor *color = [unarchiver decodeObjectForKey:NSKeyedArchiveRootObjectKey];
self.selectedColor = color;
+
+ if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad && UIInterfaceOrientationIsLandscape(self.interfaceOrientation)) {
+ CGRect screenRect = [[UIScreen mainScreen] bounds];
+ CGFloat screenWidth = screenRect.size.width;
+ if (screenWidth == 1024 || screenWidth == 1112) {
+ self.view.transform = CGAffineTransformMakeScale(0.7, 0.7);
+ }
+ }
}
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
[super traitCollectionDidChange:previousTraitCollection];
+ [self loadView];
}
@end
diff --git a/Sources/ColourOptionsController2.m b/Sources/ColourOptionsController2.m
index 635ace7..3014ce9 100644
--- a/Sources/ColourOptionsController2.m
+++ b/Sources/ColourOptionsController2.m
@@ -24,10 +24,19 @@
[lcmUnarchiver setRequiresSecureCoding:NO];
UIColor *color = [lcmUnarchiver decodeObjectForKey:NSKeyedArchiveRootObjectKey];
self.selectedColor = color;
+
+ if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad && UIInterfaceOrientationIsLandscape(self.interfaceOrientation)) {
+ CGRect screenRect = [[UIScreen mainScreen] bounds];
+ CGFloat screenWidth = screenRect.size.width;
+ if (screenWidth == 1024 || screenWidth == 1112) {
+ self.view.transform = CGAffineTransformMakeScale(0.7, 0.7);
+ }
+ }
}
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
[super traitCollectionDidChange:previousTraitCollection];
+ [self loadView];
}
@end
diff --git a/Sources/RootOptionsController.m b/Sources/RootOptionsController.m
index 436a6a8..78b6bc7 100644
--- a/Sources/RootOptionsController.m
+++ b/Sources/RootOptionsController.m
@@ -1,9 +1,12 @@
#import "RootOptionsController.h"
#import "ColourOptionsController.h"
#import "ColourOptionsController2.h"
-#import "AppIconOptionsController.h"
@interface RootOptionsController ()
+
+@property (strong, nonatomic) UIImageView *backButton;
+@property (assign, nonatomic) UIUserInterfaceStyle pageStyle;
+
@end
@implementation RootOptionsController
@@ -11,13 +14,12 @@
- (void)viewDidLoad {
[super viewDidLoad];
- self.title = @"uYouPlus Extras Menu";
+ self.title = @"uYouEnhanced Extras Menu";
+ [self.navigationController.navigationBar setTitleTextAttributes:@{NSFontAttributeName: [UIFont fontWithName:@"YTSans-Bold" size:22], NSForegroundColorAttributeName: [UIColor whiteColor]}];
- UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done)];
- self.navigationItem.leftBarButtonItem = doneButton;
-
- UIBarButtonItem *appIconButton = [[UIBarButtonItem alloc] initWithTitle:@"App Icon" style:UIBarButtonItemStylePlain target:self action:@selector(showAppIconOptions)];
- self.navigationItem.rightBarButtonItem = appIconButton;
+ UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Back.png" inBundle:[NSBundle mainBundle] compatibleWithTraitCollection:nil] style:UIBarButtonItemStylePlain target:self action:@selector(back)];
+ [backButton setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor blackColor], NSFontAttributeName: [UIFont fontWithName:@"YTSans-Medium" size:20]} forState:UIControlStateNormal];
+ self.navigationItem.leftBarButtonItem = backButton;
UITableViewStyle style;
if (@available(iOS 13, *)) {
@@ -168,21 +170,8 @@
@implementation RootOptionsController (Privates)
-- (void)showAppIconOptions {
- if (@available(iOS 15.0, *)) {
- AppIconOptionsController *appIconOptionsController = [[AppIconOptionsController alloc] init];
- UINavigationController *appIconOptionsNavController = [[UINavigationController alloc] initWithRootViewController:appIconOptionsController];
- [self presentViewController:appIconOptionsNavController animated:YES completion:nil];
- } else {
- NSString *systemVersion = [[UIDevice currentDevice] systemVersion];
- UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Incompatible" message:[NSString stringWithFormat:@"Changing app icons is only available on iOS 15 and later.\nYour Device is currently using iOS %@.", systemVersion] preferredStyle:UIAlertControllerStyleAlert];
- [alert addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]];
- [self presentViewController:alert animated:YES completion:nil];
- }
-}
-
-- (void)done {
- [self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
+- (void)back {
+ [self.navigationController popViewControllerAnimated:YES];
}
@end
diff --git a/Sources/uYouPlus.h b/Sources/uYouPlus.h
index 0cd083d..60176a8 100644
--- a/Sources/uYouPlus.h
+++ b/Sources/uYouPlus.h
@@ -33,6 +33,7 @@
#import
#import
#import
+#import
// Hide buttons under the video player by @PoomSmart
#import
@@ -108,6 +109,15 @@
@property(readonly, nonatomic) YTISectionListRenderer *model;
@end
+// Disable Pull to Full for landscape videos - @bhackel
+@interface YTWatchPullToFullController : NSObject
+@property(nonatomic, strong) YTWatchViewController *playerViewSource;
+@end
+@interface YTWatchViewController (uYouEnhanced)
+@property(nonatomic, strong) YTWatchPullToFullController *pullToFullController;
+- (NSUInteger)allowedFullScreenOrientations;
+@end
+
// uYouPlus
@interface YTHeaderLogoController : UIView
@property(readonly, nonatomic) long long pageStyle;
@@ -119,6 +129,9 @@
@interface YTChipCloudCell : UIView
@end
+@interface YTCountView : UIView
+@end
+
@interface YTPlayabilityResolutionUserActionUIController : NSObject // Skips content warning before playing *some videos - @PoomSmart
- (void)confirmAlertDidPressConfirm;
@end
diff --git a/Sources/uYouPlus.xm b/Sources/uYouPlus.xm
index 9d67e34..b600b84 100644
--- a/Sources/uYouPlus.xm
+++ b/Sources/uYouPlus.xm
@@ -30,7 +30,7 @@ static int contrastMode() {
}
//
-# pragma mark - Tweaks
+# pragma mark - Other hooks
// Activate FLEX
%hook YTAppDelegate
@@ -52,6 +52,33 @@ static int contrastMode() {
}
%end
+// Fixes uYou crash when trying to play video (#1422)
+@interface YTVarispeedSwitchController : NSObject
+@end
+
+@interface YTPlayerOverlayManager : NSObject
+@property (nonatomic, assign) float currentPlaybackRate;
+@property (nonatomic, strong, readonly) YTVarispeedSwitchController *varispeedController;
+
+- (void)varispeedSwitchController:(YTVarispeedSwitchController *)varispeed didSelectRate:(float)rate;
+- (void)setCurrentPlaybackRate:(float)rate;
+- (void)setPlaybackRate:(float)rate;
+@end
+
+%hook YTPlayerOverlayManager
+%property (nonatomic, assign) float currentPlaybackRate;
+
+%new
+- (void)setCurrentPlaybackRate:(float)rate {
+ [self varispeedSwitchController:self.varispeedController didSelectRate:rate];
+}
+
+%new
+- (void)setPlaybackRate:(float)rate {
+ [self varispeedSwitchController:self.varispeedController didSelectRate:rate];
+}
+%end
+
// Enable Alternate Icons
%hook UIApplication
- (BOOL)supportsAlternateIcons {
@@ -622,6 +649,17 @@ BOOL isAd(YTIElementRenderer *self) {
%end
%end
+// Fix uYou Repeat - @bhackel
+// When uYou repeat is enabled, and Suggested Video Popup is disabled,
+// the endscreen view with multiple suggestions is overlayed when it
+// should not be.
+%hook YTFullscreenEngagementOverlayController
+- (BOOL)isEnabled {
+ // repeatVideo is the key for uYou Repeat
+ return IS_ENABLED(@"repeatVideo") ? NO : %orig;
+}
+%end
+
# pragma mark - Hide Notification Button && SponsorBlock Button && uYouPlus Button
%hook YTRightNavigationButtons
- (void)layoutSubviews {
@@ -633,10 +671,6 @@ BOOL isAd(YTIElementRenderer *self) {
self.sponsorBlockButton.hidden = YES;
self.sponsorBlockButton.frame = CGRectZero;
}
- if (IS_ENABLED(@"hideuYouPlusButton_enabled")) {
- self.uYouPlusButton.hidden = YES;
- self.uYouPlusButton.frame = CGRectZero;
- }
}
%end
@@ -644,21 +678,21 @@ BOOL isAd(YTIElementRenderer *self) {
%group hideFullscreenActions
%hook YTMainAppVideoPlayerOverlayViewController
- (BOOL)isFullscreenActionsEnabled {
-// This didn't work on its own - weird
- return IS_ENABLED(@"hideFullscreenActions_enabled") ? NO : %orig;
+ return NO;
}
%end
%hook YTFullscreenActionsView
- (BOOL)enabled {
- // Attempt 2
- return IS_ENABLED(@"hideFullscreenActions_enabled") ? NO : %orig;
+ return NO;
}
-- (void)removeFromSuperview {
- // Attempt 3
- if (IS_ENABLED(@"hideFullscreenActions_enabled")) {
+- (void)layoutSubviews {
+ // Check if already removed from superview
+ if (self.superview) {
[self removeFromSuperview];
}
-%orig;
+ self.hidden = YES;
+ self.frame = CGRectZero;
+ %orig;
}
%end
%end
@@ -731,11 +765,32 @@ BOOL isAd(YTIElementRenderer *self) {
- (void)layoutSubviews {
%orig;
if (IS_ENABLED(@"hideDoubleTapToSeekOverlay_enabled")) {
- self.scrimOverlay.backgroundColor = [UIColor clearColor];
+ self.frame = CGRectZero;
}
}
%end
+// Disable pull to enter vertical/portrait fullscreen gesture - @bhackel
+// This was introduced in version 19.XX
+// This only applies to landscape videos
+%group gDisablePullToFull
+%hook YTWatchPullToFullController
+- (BOOL)shouldRecognizeOverscrollEventsFromWatchOverscrollController:(id)arg1 {
+ // Get the current player orientation
+ YTWatchViewController *watchViewController = self.playerViewSource;
+ NSUInteger allowedFullScreenOrientations = [watchViewController allowedFullScreenOrientations];
+ // Check if the current player orientation is portrait
+ if (allowedFullScreenOrientations == UIInterfaceOrientationMaskAllButUpsideDown
+ || allowedFullScreenOrientations == UIInterfaceOrientationMaskPortrait
+ || allowedFullScreenOrientations == UIInterfaceOrientationMaskPortraitUpsideDown) {
+ return %orig;
+ } else {
+ return NO;
+ }
+}
+%end
+%end
+
// Video Controls Overlay Options
// Hide CC / Hide Autoplay switch / Hide YTMusic Button / Enable Share Button / Enable Save to Playlist Button
%hook YTMainAppControlsOverlayView
@@ -843,7 +898,14 @@ BOOL isAd(YTIElementRenderer *self) {
// %end
// %end
-// Hide Dark Overlay Background
+// Hide Video Title (in Fullscreen) - @arichornlover
+%hook YTMainAppVideoPlayerOverlayView
+- (BOOL)titleViewHidden {
+ return IS_ENABLED(@"hideVideoTitle_enabled") ? YES : %orig;
+}
+%end
+
+// Hide Dark Overlay Background - @Dayanch96
%group gHideOverlayDarkBackground
%hook YTMainAppVideoPlayerOverlayView
- (void)setBackgroundVisible:(BOOL)arg1 isGradientBackground:(BOOL)arg2 {
@@ -1011,63 +1073,6 @@ BOOL isAd(YTIElementRenderer *self) {
}
%end
-// uYouPlus Button in Navigation Bar (for Clear Cache and Color Options) - @arichornlover
-%hook YTRightNavigationButtons
-%property (retain, nonatomic) YTQTMButton *uYouPlusButton;
-- (NSMutableArray *)buttons {
- NSString *tweakBundlePath = [[NSBundle mainBundle] pathForResource:@"uYouPlus" ofType:@"bundle"];
- NSString *uYouPlusMainSettingsPath;
- if (tweakBundlePath) {
- NSBundle *tweakBundle = [NSBundle bundleWithPath:tweakBundlePath];
- uYouPlusMainSettingsPath = [tweakBundle pathForResource:@"uYouPlus_logo_main" ofType:@"png"];
- } else {
- uYouPlusMainSettingsPath = ROOT_PATH_NS(@"/Localizations/uYouPlus.bundle/uYouPlus_logo_main.png");
- }
- NSMutableArray *retVal = %orig.mutableCopy;
- [self.uYouPlusButton removeFromSuperview];
- [self addSubview:self.uYouPlusButton];
- if (!self.uYouPlusButton) {
- self.uYouPlusButton = [%c(YTQTMButton) iconButton];
- [self.uYouPlusButton enableNewTouchFeedback];
- self.uYouPlusButton.frame = CGRectMake(0, 0, 40, 40);
-
- if ([%c(YTPageStyleController) pageStyle] == 0) {
- UIImage *setButtonMode = [UIImage imageWithContentsOfFile:uYouPlusMainSettingsPath];
- setButtonMode = [setButtonMode imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
- [self.uYouPlusButton setImage:setButtonMode forState:UIControlStateNormal];
- [self.uYouPlusButton setTintColor:UIColor.blackColor];
- }
- else if ([%c(YTPageStyleController) pageStyle] == 1) {
- UIImage *setButtonMode = [UIImage imageWithContentsOfFile:uYouPlusMainSettingsPath];
- setButtonMode = [setButtonMode imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
- [self.uYouPlusButton setImage:setButtonMode forState:UIControlStateNormal];
- [self.uYouPlusButton setTintColor:UIColor.whiteColor];
- }
-
- [self.uYouPlusButton addTarget:self action:@selector(uYouPlusRootOptionsAction) forControlEvents:UIControlEventTouchUpInside];
- [retVal insertObject:self.uYouPlusButton atIndex:0];
- }
- return retVal;
-}
-- (NSMutableArray *)visibleButtons {
- NSMutableArray *retVal = %orig.mutableCopy;
- [self setLeadingPadding:+10];
- if (self.uYouPlusButton) {
- [self.uYouPlusButton removeFromSuperview];
- [self addSubview:self.uYouPlusButton];
- [retVal insertObject:self.uYouPlusButton atIndex:0];
- }
- return retVal;
-}
-%new;
-- (void)uYouPlusRootOptionsAction {
- UINavigationController *rootOptionsControllerView = [[UINavigationController alloc] initWithRootViewController:[[RootOptionsController alloc] init]];
- [rootOptionsControllerView setModalPresentationStyle:UIModalPresentationFullScreen];
-
- [self._viewControllerForAncestor presentViewController:rootOptionsControllerView animated:YES completion:nil];
-}
-%end
-
// Hide the (Connect / Thanks / Save / Report) Buttons under the Video Player - 17.x.x and up - @arichornlover (inspired by @PoomSmart's version) DEPRECATED METHOD ⚠️
%hook _ASDisplayView
- (void)layoutSubviews {
@@ -1361,6 +1366,12 @@ static BOOL findCell(ASNodeController *nodeController, NSArray *ide
%orig([UIColor clearColor]);
}
%end
+%hook YTCountView
+- (void)layoutSubviews {
+ %orig;
+ self.hidden = YES;
+}
+%end
%end
# pragma mark - ctor
@@ -1471,6 +1482,9 @@ static BOOL findCell(ASNodeController *nodeController, NSArray *ide
if (IS_ENABLED(@"youTabFakePremium_enabled")) {
%init(gFakePremium);
}
+ if (IS_ENABLED(@"disablePullToFull_enabled")) {
+ %init(gDisablePullToFull);
+ }
// YTNoModernUI - @arichorn
BOOL ytNoModernUIEnabled = IS_ENABLED(@"ytNoModernUI_enabled");
@@ -1497,15 +1511,25 @@ static BOOL findCell(ASNodeController *nodeController, NSArray *ide
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"hidePlayNextInQueue_enabled"];
}
if (![allKeys containsObject:@"relatedVideosAtTheEndOfYTVideos"]) {
- [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"relatedVideosAtTheEndOfYTVideos"];
+ [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"relatedVideosAtTheEndOfYTVideos"];
}
if (![allKeys containsObject:@"shortsProgressBar"]) {
- [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"shortsProgressBar"];
+ [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"shortsProgressBar"];
}
if (![allKeys containsObject:@"RYD-ENABLED"]) {
- [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"RYD-ENABLED"];
+ [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"RYD-ENABLED"];
}
if (![allKeys containsObject:@"YouPiPEnabled"]) {
- [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"YouPiPEnabled"];
+ [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"YouPiPEnabled"];
+ }
+ // Broken uYou 3.0.3 setting: No Suggested Videos at The Video End
+ // Set default to allow autoplay, user can disable later
+ if (![allKeys containsObject:@"noSuggestedVideoAtEnd"]) {
+ [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"noSuggestedVideoAtEnd"];
+ }
+ // Broken uYou 3.0.2 setting: Playback Speed Controls
+ // Set default to disabled
+ if (![allKeys containsObject:@"showPlaybackRate"]) {
+ [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"showPlaybackRate"];
}
}
diff --git a/Sources/uYouPlusSettings.xm b/Sources/uYouPlusSettings.xm
index 4815e06..66766d5 100644
--- a/Sources/uYouPlusSettings.xm
+++ b/Sources/uYouPlusSettings.xm
@@ -2,6 +2,7 @@
#import "RootOptionsController.h"
#import "ColourOptionsController.h"
#import "ColourOptionsController2.h"
+#import "AppIconOptionsController.h"
#define VERSION_STRING [[NSString stringWithFormat:@"%@", @(OS_STRINGIFY(TWEAK_VERSION))] stringByReplacingOccurrencesOfString:@"\"" withString:@""]
#define SHOW_RELAUNCH_YT_SNACKBAR [[%c(GOOHUDManagerInternal) sharedInstance] showMessageMainThread:[%c(YTHUDMessage) messageWithText:LOC(@"RESTART_YOUTUBE")]]
@@ -134,6 +135,34 @@ extern NSBundle *uYouPlusBundle();
];
[sectionItems addObject:exitYT];
+ SECTION_HEADER(LOC(@"📺 App Personalization"));
+ # pragma mark - uYouEnhanced Extras Menu
+ YTSettingsSectionItem *customAppMenu = [%c(YTSettingsSectionItem)
+ itemWithTitle:LOC(@"uYouEnhanced Extras Menu")
+ titleDescription:LOC(@"This menu includes App Color Customization & Clearing the Cache 🗑️")
+ accessibilityIdentifier:nil
+ detailTextBlock:nil
+ selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
+ RootOptionsController *rootOptionsController = [[RootOptionsController alloc] init];
+ [settingsViewController.navigationController pushViewController:rootOptionsController animated:YES];
+ return YES;
+ }
+ ];
+ [sectionItems addObject:customAppMenu];
+
+ YTSettingsSectionItem *appIcon = [%c(YTSettingsSectionItem)
+ itemWithTitle:LOC(@"Change App Icon")
+ titleDescription:nil
+ accessibilityIdentifier:nil
+ detailTextBlock:nil
+ selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
+ AppIconOptionsController *appIconController = [[AppIconOptionsController alloc] init];
+ [settingsViewController.navigationController pushViewController:appIconController animated:YES];
+ return YES;
+ }
+ ];
+ [sectionItems addObject:appIcon];
+
# pragma mark - App theme
SECTION_HEADER(LOC(@"THEME_OPTIONS"));
@@ -229,6 +258,7 @@ extern NSBundle *uYouPlusBundle();
SWITCH_ITEM2(LOC(@"PINCH_TO_ZOOM"), LOC(@"PINCH_TO_ZOOM_DESC"), @"pinchToZoom_enabled");
SWITCH_ITEM(LOC(@"YT_MINIPLAYER"), LOC(@"YT_MINIPLAYER_DESC"), @"ytMiniPlayer_enabled");
SWITCH_ITEM2(LOC(@"STOCK_VOLUME_HUD"), LOC(@"STOCK_VOLUME_HUD_DESC"), @"stockVolumeHUD_enabled");
+ SWITCH_ITEM2(LOC(@"Disable pull-to-fullscreen gesture"), LOC(@"Disable the drag gesture to enter vertical fullscreen. Only applies to landscape videos."), @"disablePullToFull_enabled");
# pragma mark - Video controls overlay options
SECTION_HEADER(LOC(@"VIDEO_PLAYER_OPTIONS"));
@@ -238,6 +268,7 @@ extern NSBundle *uYouPlusBundle();
SWITCH_ITEM(LOC(@"HIDE_YTMUSIC_BUTTON"), LOC(@"HIDE_YTMUSIC_BUTTON_DESC"), @"hideYTMusicButton_enabled");
SWITCH_ITEM(LOC(@"HIDE_AUTOPLAY_SWITCH"), LOC(@"HIDE_AUTOPLAY_SWITCH_DESC"), @"hideAutoplaySwitch_enabled");
SWITCH_ITEM(LOC(@"HIDE_SUBTITLES_BUTTON"), LOC(@"HIDE_SUBTITLES_BUTTON_DESC"), @"hideCC_enabled");
+ SWITCH_ITEM(LOC(@"Hide Video Title (in Fullscreen)"), LOC(@"Hides and Disables the Video Title and including the functionality that was shown on the Top Left of the Video Player."), @"hideVideoTitle_enabled");
SWITCH_ITEM(LOC(@"Hide Collapse (Arrow) Button"), LOC(@"Hides and Disables the Arrow Button in the Top Left of the Video Player."), @"disableCollapseButton_enabled");
SWITCH_ITEM(LOC(@"Hide Fullscreen Button"), LOC(@"Hides and Disables the Fullscreen Button in the Video Player."), @"disableFullscreenButton_enabled");
SWITCH_ITEM(LOC(@"HIDE_HUD_MESSAGES"), LOC(@"HIDE_HUD_MESSAGES_DESC"), @"hideHUD_enabled");
diff --git a/Sources/uYouPlusThemes.xm b/Sources/uYouPlusThemes.xm
index 5386911..5447fc1 100644
--- a/Sources/uYouPlusThemes.xm
+++ b/Sources/uYouPlusThemes.xm
@@ -181,25 +181,6 @@ UIColor* raisedColor = [UIColor colorWithRed:0.035 green:0.035 blue:0.035 alpha:
}
%end
-// iSponsorBlock
-%hook SponsorBlockSettingsController
-- (void)viewDidLoad {
- if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
- %orig;
- self.tableView.backgroundColor = [UIColor blackColor];
- } else { return %orig; }
-}
-%end
-
-%hook SponsorBlockViewController
-- (void)viewDidLoad {
- if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
- %orig;
- self.view.backgroundColor = [UIColor blackColor];
- } else { return %orig; }
-}
-%end
-
%hook UIApplication
- (void)applicationDidFinishLaunching:(UIApplication *)application {
if (@available(iOS 14.0, *)) {
@@ -411,25 +392,6 @@ UIColor *customHexColor;
}
%end
-// iSponsorBlock
-%hook SponsorBlockSettingsController
-- (void)viewDidLoad {
- if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
- %orig;
- self.tableView.backgroundColor = customHexColor;
- } else { return %orig; }
-}
-%end
-
-%hook SponsorBlockViewController
-- (void)viewDidLoad {
- if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
- %orig;
- self.view.backgroundColor = customHexColor;
- } else { return %orig; }
-}
-%end
-
// Search view
%hook YTSearchBarView
- (void)setBackgroundColor:(UIColor *)color {
diff --git a/Tweaks/DontEatMyContent b/Tweaks/DontEatMyContent
index 8513a0f..95fecff 160000
--- a/Tweaks/DontEatMyContent
+++ b/Tweaks/DontEatMyContent
@@ -1 +1 @@
-Subproject commit 8513a0f3b4aeeb9f8aaf9b8d30002ba08f04d4da
+Subproject commit 95fecff296722df4a9938308c3bdb178cb690b7c
diff --git a/Tweaks/IAmYouTube b/Tweaks/IAmYouTube
index f387294..fbc81eb 160000
--- a/Tweaks/IAmYouTube
+++ b/Tweaks/IAmYouTube
@@ -1 +1 @@
-Subproject commit f3872945d98199c331b388aec1b9c26963e75cc7
+Subproject commit fbc81ebcdd77d084f50737d1d99df8d2daf6c3f7
diff --git a/Tweaks/Return-YouTube-Dislikes b/Tweaks/Return-YouTube-Dislikes
index 8d90af3..7e2ec83 160000
--- a/Tweaks/Return-YouTube-Dislikes
+++ b/Tweaks/Return-YouTube-Dislikes
@@ -1 +1 @@
-Subproject commit 8d90af33a8ace8f1e0adbaa863aed5da9a835fc4
+Subproject commit 7e2ec8305ca9cee44d5b8c47ab32bf92595700dc
diff --git a/Tweaks/YTABConfig b/Tweaks/YTABConfig
index 79cfd5d..67e3214 160000
--- a/Tweaks/YTABConfig
+++ b/Tweaks/YTABConfig
@@ -1 +1 @@
-Subproject commit 79cfd5d5c7efc8eb69b6d920d835c6628564e76e
+Subproject commit 67e321458867029b1ffcdfa29759332835b80eca
diff --git a/Tweaks/YouPiP b/Tweaks/YouPiP
index 8eafa0a..3b43f12 160000
--- a/Tweaks/YouPiP
+++ b/Tweaks/YouPiP
@@ -1 +1 @@
-Subproject commit 8eafa0a163ffa8e7d25c54ed3c18e6c76266ea31
+Subproject commit 3b43f12a23aee37dcf21a26685f134c7afb224de
diff --git a/Tweaks/YouQuality b/Tweaks/YouQuality
index b5cfbac..29ef6bf 160000
--- a/Tweaks/YouQuality
+++ b/Tweaks/YouQuality
@@ -1 +1 @@
-Subproject commit b5cfbac1c5ac1440a0d4c8ac1cea3fcd4083bee6
+Subproject commit 29ef6bfb8787780d14469ce718291381b82496d0
diff --git a/Tweaks/YouTubeHeader b/Tweaks/YouTubeHeader
index 591fe9d..721d464 160000
--- a/Tweaks/YouTubeHeader
+++ b/Tweaks/YouTubeHeader
@@ -1 +1 @@
-Subproject commit 591fe9dc1dcfbd4591b391fe5b25301beea5e5b7
+Subproject commit 721d46407f5fe6d389d7a814969a127563d2a3e4
diff --git a/Tweaks/iSponsorBlock b/Tweaks/iSponsorBlock
index 304ec97..fb2cc71 160000
--- a/Tweaks/iSponsorBlock
+++ b/Tweaks/iSponsorBlock
@@ -1 +1 @@
-Subproject commit 304ec97e4cc9060a80f9128b713243c92a3215d9
+Subproject commit fb2cc71e91bdbfd7a612b1d1bd2b1e875900564f
diff --git a/Tweaks/uYouLocalization b/Tweaks/uYouLocalization
index 411333d..df85762 160000
--- a/Tweaks/uYouLocalization
+++ b/Tweaks/uYouLocalization
@@ -1 +1 @@
-Subproject commit 411333dce83e18a8d81f2bbc79bdddc10a1b4ca6
+Subproject commit df85762a81e1f6ca97d88a3bde3bdbadb726a985