mirror of
https://github.com/arichornlover/uYouEnhanced.git
synced 2026-04-20 23:22:09 +00:00
Merge branch 'main' into feature/fake-premium
This commit is contained in:
commit
5ed34952fc
22 changed files with 368 additions and 80 deletions
4
.github/workflows/delete-workflow-runs.yml
vendored
4
.github/workflows/delete-workflow-runs.yml
vendored
|
|
@ -42,8 +42,8 @@ on:
|
|||
description: 'Logs simulated changes, no deletions are performed'
|
||||
required: false
|
||||
|
||||
schedule:
|
||||
- cron: '0 0 * * *'
|
||||
# schedule:
|
||||
# - cron: '0 0 * * *'
|
||||
|
||||
jobs:
|
||||
del_runs:
|
||||
|
|
|
|||
4
.github/workflows/update-submodules.yml
vendored
4
.github/workflows/update-submodules.yml
vendored
|
|
@ -36,6 +36,8 @@ jobs:
|
|||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YTABConfig
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YTClassicVideoQuality
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YTUHD
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YTVideoOverlay
|
||||
|
|
@ -46,6 +48,8 @@ jobs:
|
|||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YouQuality
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YouGroupSettings
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YouTubeHeader
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/iSponsorBlock
|
||||
|
|
|
|||
5
.gitmodules
vendored
5
.gitmodules
vendored
|
|
@ -56,7 +56,7 @@
|
|||
url = https://github.com/PoomSmart/IAmYouTube.git
|
||||
[submodule "Tweaks/YTClassicVideoQuality"]
|
||||
path = Tweaks/YTClassicVideoQuality
|
||||
url = https://github.com/PoomSmart/YTClassicVideoQuality.git
|
||||
url = https://github.com/arichornloverALT/YTClassicVideoQuality.git
|
||||
[submodule "Tweaks/NoYTPremium"]
|
||||
path = Tweaks/NoYTPremium
|
||||
url = https://github.com/PoomSmart/NoYTPremium.git
|
||||
|
|
@ -76,3 +76,6 @@
|
|||
[submodule "Tweaks/uYouLocalization"]
|
||||
path = Tweaks/uYouLocalization
|
||||
url = https://github.com/dayanch96/uYouLocalization.git
|
||||
[submodule "Tweaks/YouGroupSettings"]
|
||||
path = Tweaks/YouGroupSettings
|
||||
url = https://github.com/arichornlover/YouGroupSettings.git
|
||||
|
|
|
|||
1
Bundles/YouGroupSettings.bundle
Symbolic link
1
Bundles/YouGroupSettings.bundle
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../Tweaks/YouGroupSettings/layout/Library/Application Support/YouGroupSettings.bundle
|
||||
|
|
@ -3,24 +3,26 @@ If I verify a reported Code of Conduct violation, my policy is:
|
|||
|
||||
- Contributors are allowed to make patches only to the main branch, unless an additional branch is involved. This policy applies to the implementation of custom features/options, updated features/options, and grammar errors.
|
||||
|
||||
- uYouEnhanced does not support Localization pull requests. While it may seem like a sudden change, maintaining localization becomes challenging when the branch needs to be reset due to the changes from qnblackcat/uYouPlus repository. Therefore, it is difficult to preserve any localization changes that were added on uYouEnhanced since the fork/branch can get reset and takes too long to add them all back.
|
||||
- uYouEnhanced does not support Localization pull requests. While it may seem like a sudden change, maintaining localization becomes challenging when the branch needs to be reset due in order to push to the latest changes from qnblackcat/uYouPlus repository. Therefore, it is difficult to preserve any localization changes that were added on uYouEnhanced since the fork/branch can get reset and takes too long to add them all back.
|
||||
|
||||
- The use of the name `uYouPlusExtra` is prohibited. The correct and updated name for this repository is `uYouEnhanced`.
|
||||
- if there is a tweak named or have the description of the word `uYouPlusExtra` then please do check it out before you interact with it or use it.
|
||||
|
||||
- Users who fork this repository, utilize it in actions, or build it from the repository on Git are prohibited from releasing .ipa files on their forked repositories. This restriction is in place to comply with the following https://enterprise.githubsupport.com/attachments/token/1u4kyYJnjA8HZTPMXOGBhRk4Q/?, also, preventing any potential legal issues. If a user violates this rule by including an .ipa file in their GitHub release publicly, appropriate actions will be taken from either the tweak developer or Google since .ipa's aren't allowed, they have the rights to do that. I apologize but it's the only way keep the repo from getting taken down.
|
||||
**Simpiflied/ADHD Version:** when building the ipa from your forked repository of uYouEnhanced, please do not upload and publish any .ipa files or I will have to do a request to take it down.
|
||||
**Simpiflied Version:** when building the ipa from your forked repository of uYouEnhanced, please do not upload and publish any .ipa files or I will have to do a request to take it down.
|
||||
|
||||
<details>
|
||||
<summary>Exclusive Rule for the original uYouPlus devs ⬇️</summary>
|
||||
- The Users **qnblackcat** and **PoomSmart** are prohibited from utilizing any new or modified code that was introduced in the uYouEnhanced fork, but I'll allow you to use submodules and I allow you to utize the code you made for this fork. but Violation of this rule from the ones I don't allow will result in appropriate consequences, including but not limited to account suspension, access revocation, or other disciplinary actions as deemed necessary by the project administrators. Furthermore, it is strictly forbidden to publicly share or showcase the content of this policy on any social media platforms. Any breach of this restriction may result in similar disciplinary actions. This was policy was made to keep any rejected features on uYouEnhanced.
|
||||
- Devs **qnblackcat** and **PoomSmart** are not allowed to use any new or changed code from the uYouEnhanced fork (excludes **AppIconOptionsController.m** & **AppIconOptionsController.h**) unless it is absolutely necessary. Breaking this rule may result in consequences like access revocation. it is strictly forbidden to publicly share or showcase the content of this policy on any social media platforms. This rule is in place to protect any of the rejected features in uYouEnhanced, refering to (LowContrastMode, Hide Shadow Overlay Button, YTHoldForSpeed & etc.)
|
||||
To prevent conflicts and misunderstandings related to donations, all users should use code from the uYouEnhanced fork responsibly and honor the permissions and restrictions provided by the project administrators and tweak developers. Failure to do so may result in access revocation.
|
||||
</details>
|
||||
|
||||
## Supported Versions
|
||||
|
||||
The following versions of the uYouEnhanced Tweak are currently supported with security and feature updates.
|
||||
|
||||
| Version | LTS Support | YT Version Supported | App Stability | uYou Functionality |
|
||||
| ------- | ----------- | -------------------- | ------------- | ------------------ |
|
||||
| [latest] | ✅ | ✅ | Stable | Fully functional |
|
||||
| [19.06.2-3.0.3 LTS] | ✅ | ✅ | 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 Device which would only happen if you installed the ipa using different sideloading/jailbreak tool. |
|
||||
| [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 (except Search Menu, that's it.), and sadly most of the servers were closed on this version and includes all v16 releases affected aswell. 💔 | uYou Video/Audio Downloading is offline (except uYouLocal). |
|
||||
| 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) & 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). |
|
||||
|
|
|
|||
BIN
Localizations/uYouPlus.bundle/AppIcons/AppIcon1.png
Normal file
BIN
Localizations/uYouPlus.bundle/AppIcons/AppIcon1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 88 KiB |
BIN
Localizations/uYouPlus.bundle/AppIcons/AppIcon2.png
Normal file
BIN
Localizations/uYouPlus.bundle/AppIcons/AppIcon2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 28 KiB |
6
Makefile
6
Makefile
|
|
@ -14,7 +14,7 @@ MODULES = jailed
|
|||
endif
|
||||
|
||||
ifndef YOUTUBE_VERSION
|
||||
YOUTUBE_VERSION = 19.12.3
|
||||
YOUTUBE_VERSION = 19.13.1
|
||||
endif
|
||||
ifndef UYOU_VERSION
|
||||
UYOU_VERSION = 3.0.3
|
||||
|
|
@ -31,7 +31,7 @@ $(TWEAK_NAME)_FRAMEWORKS = UIKit Foundation AVFoundation AVKit Photos Accelerate
|
|||
$(TWEAK_NAME)_LIBRARIES = bz2 c++ iconv z
|
||||
$(TWEAK_NAME)_CFLAGS = -fobjc-arc -Wno-deprecated-declarations -Wno-unused-but-set-variable -DTWEAK_VERSION=\"$(PACKAGE_VERSION)\"
|
||||
#uYouLocalization $(TWEAK_NAME)_INJECT_DYLIBS = Tweaks/uYou/Library/MobileSubstrate/DynamicLibraries/uYou.dylib $(THEOS_OBJ_DIR)/uYouLocalization.dylib
|
||||
$(TWEAK_NAME)_INJECT_DYLIBS = Tweaks/uYou/Library/MobileSubstrate/DynamicLibraries/uYou.dylib $(THEOS_OBJ_DIR)/libFLEX.dylib $(THEOS_OBJ_DIR)/iSponsorBlock.dylib $(THEOS_OBJ_DIR)/YouPiP.dylib $(THEOS_OBJ_DIR)/YouTubeDislikesReturn.dylib $(THEOS_OBJ_DIR)/YTABConfig.dylib $(THEOS_OBJ_DIR)/YTUHD.dylib $(THEOS_OBJ_DIR)/DontEatMyContent.dylib .theos/obj/YTHoldForSpeed.dylib $(THEOS_OBJ_DIR)/YTNoCommunityPosts.dylib $(THEOS_OBJ_DIR)/YTVideoOverlay.dylib $(THEOS_OBJ_DIR)/YouMute.dylib $(THEOS_OBJ_DIR)/YouQuality.dylib $(THEOS_OBJ_DIR)/YoutubeSpeed.dylib # $(THEOS_OBJ_DIR)/MrBeastify-ObjC.dylib
|
||||
$(TWEAK_NAME)_INJECT_DYLIBS = Tweaks/uYou/Library/MobileSubstrate/DynamicLibraries/uYou.dylib $(THEOS_OBJ_DIR)/libFLEX.dylib $(THEOS_OBJ_DIR)/iSponsorBlock.dylib $(THEOS_OBJ_DIR)/YouPiP.dylib $(THEOS_OBJ_DIR)/YouTubeDislikesReturn.dylib $(THEOS_OBJ_DIR)/YTABConfig.dylib $(THEOS_OBJ_DIR)/YTUHD.dylib $(THEOS_OBJ_DIR)/DontEatMyContent.dylib .theos/obj/YTHoldForSpeed.dylib $(THEOS_OBJ_DIR)/YTNoCommunityPosts.dylib $(THEOS_OBJ_DIR)/YTVideoOverlay.dylib $(THEOS_OBJ_DIR)/YouMute.dylib $(THEOS_OBJ_DIR)/YouQuality.dylib .theos/obj/YouGroupSettings.dylib $(THEOS_OBJ_DIR)/YoutubeSpeed.dylib # $(THEOS_OBJ_DIR)/MrBeastify-ObjC.dylib
|
||||
$(TWEAK_NAME)_EMBED_LIBRARIES = $(THEOS_OBJ_DIR)/libcolorpicker.dylib
|
||||
$(TWEAK_NAME)_EMBED_FRAMEWORKS = $(_THEOS_LOCAL_DATA_DIR)/$(THEOS_OBJ_DIR_NAME)/install_Alderis.xcarchive/Products/var/jb/Library/Frameworks/Alderis.framework
|
||||
$(TWEAK_NAME)_EMBED_BUNDLES = $(wildcard Bundles/*.bundle)
|
||||
|
|
@ -40,7 +40,7 @@ $(TWEAK_NAME)_EMBED_EXTENSIONS = $(wildcard Extensions/*.appex)
|
|||
include $(THEOS)/makefiles/common.mk
|
||||
ifneq ($(JAILBROKEN),1)
|
||||
#uYouLocalization SUBPROJECTS += Tweaks/Alderis Tweaks/uYouLocalization
|
||||
SUBPROJECTS += Tweaks/Alderis Tweaks/FLEXing/libflex Tweaks/iSponsorBlock Tweaks/YouPiP Tweaks/Return-YouTube-Dislikes Tweaks/YTABConfig Tweaks/YTUHD Tweaks/DontEatMyContent Tweaks/YTHoldForSpeed Tweaks/YTVideoOverlay Tweaks/YouMute Tweaks/YouQuality Tweaks/YTSpeed # Tweaks/MrBeastify
|
||||
SUBPROJECTS += Tweaks/Alderis Tweaks/FLEXing/libflex Tweaks/iSponsorBlock Tweaks/YouPiP Tweaks/Return-YouTube-Dislikes Tweaks/YTABConfig Tweaks/YTUHD Tweaks/DontEatMyContent Tweaks/YTHoldForSpeed Tweaks/YTVideoOverlay Tweaks/YouMute Tweaks/YouQuality Tweaks/YouGroupSettings Tweaks/YTSpeed # Tweaks/MrBeastify
|
||||
include $(THEOS_MAKE_PATH)/aggregate.mk
|
||||
endif
|
||||
include $(THEOS_MAKE_PATH)/tweak.mk
|
||||
|
|
|
|||
|
|
@ -283,11 +283,11 @@
|
|||
- [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.
|
||||
|
||||
<details>
|
||||
<summary>Version information (last updated: Mar 12, 2024)</summary>
|
||||
<summary>Version information (last updated: Apr 4, 2024)</summary>
|
||||
|
||||
| **Tweaks/App** | **Developer** | **Version** | **Open source** |
|
||||
| - | - | :-: | :-: |
|
||||
| **YouTube** | Google Inc | 19.10.7 | ✖︎ |
|
||||
| **YouTube** | Google Inc | 19.13.1 | ✖︎ |
|
||||
| [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) |
|
||||
|
|
@ -318,16 +318,17 @@
|
|||
|
||||
| Developer | Tweak Name and Version | App Version Compatibility | iOS Version Compatibility |
|
||||
|-----------|-----------------------|--------------------------|--------------------------|
|
||||
| MiRO92 | uYou 2.1 / 2.3~1 | ~v16.42.3~ v17.01.4 - 18.01.6 | iOS 13 - iOS 15 |
|
||||
| MiRO92 | uYou 2.1 / 2.3~1 | ~v16.42.3~ v17.33.2 - 18.01.6 | iOS 13 - iOS 15 |
|
||||
| MiRO92 | uYou 3.0 | v18.06.6 - 18.18.2 | iOS 14 - iOS 15 |
|
||||
| MiRO92 | uYou 3.0.1 | v18.19.1 - v18.41.5 | iOS 14 - iOS 17 |
|
||||
| MiRO92 | uYou 3.0.2 / 3.0.3 | v19.06.2 - latest | iOS 14 - iOS 17 |
|
||||
| MiRO92 | uYou 3.0.2 / 3.0.3 | v19.06.2 - latest | iOS 14 - iOS 17.4.1 |
|
||||
|
||||
# Installation
|
||||
See [Installation - Wiki](https://github.com/qnblackcat/uYouPlus/wiki/Installation).
|
||||
|
||||
# Support the developers
|
||||
- [**MiRO92**](https://twitter.com/miro92): https://github.com/MiRO92/uYou-for-YouTube#support
|
||||
- [**PoomSmart**](https://github.com/PoomSmart): https://poomsmart.github.io
|
||||
- [**level3tjg**](https://twitter.com/level3tjg): https://ko-fi.com/level3tjg
|
||||
- [**BandarHL**](https://twitter.com/bandarhl): https://www.paypal.com/paypalme/BandarHL
|
||||
- [**julioverne**](https://twitter.com/ijulioverne): https://www.patreon.com/julioverne
|
||||
|
|
|
|||
5
Sources/AppIconOptionsController.h
Normal file
5
Sources/AppIconOptionsController.h
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
#import <UIKit/UIKit.h>
|
||||
|
||||
@interface AppIconOptionsController : UIViewController
|
||||
|
||||
@end
|
||||
123
Sources/AppIconOptionsController.m
Normal file
123
Sources/AppIconOptionsController.m
Normal file
|
|
@ -0,0 +1,123 @@
|
|||
#import "AppIconOptionsController.h"
|
||||
|
||||
@interface AppIconOptionsController () <UICollectionViewDataSource, UICollectionViewDelegate>
|
||||
|
||||
@property (strong, nonatomic) UICollectionView *collectionView;
|
||||
@property (strong, nonatomic) UIImageView *iconPreview;
|
||||
@property (strong, nonatomic) NSArray<NSString *> *appIcons;
|
||||
@property (strong, nonatomic) NSString *selectedIconFile;
|
||||
|
||||
@end
|
||||
|
||||
@implementation AppIconOptionsController
|
||||
|
||||
- (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];
|
||||
|
||||
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.");
|
||||
}
|
||||
}
|
||||
|
||||
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
|
||||
return self.appIcons.count;
|
||||
}
|
||||
|
||||
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
|
||||
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
|
||||
|
||||
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];
|
||||
|
||||
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)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];
|
||||
});
|
||||
} 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];
|
||||
});
|
||||
}
|
||||
}];
|
||||
} else {
|
||||
NSLog(@"No icon selected to save");
|
||||
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"No Icon Selected" message:@"Please select an icon before saving" 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;
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
#import "RootOptionsController.h"
|
||||
#import "ColourOptionsController.h"
|
||||
#import "ColourOptionsController2.h"
|
||||
#import "AppIconOptionsController.h"
|
||||
|
||||
@interface RootOptionsController ()
|
||||
@end
|
||||
|
|
@ -14,6 +15,9 @@
|
|||
|
||||
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;
|
||||
|
||||
UITableViewStyle style;
|
||||
if (@available(iOS 13, *)) {
|
||||
|
|
@ -164,6 +168,19 @@
|
|||
|
||||
@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];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,9 +8,11 @@
|
|||
#import <substrate.h>
|
||||
#import <rootless.h>
|
||||
|
||||
#import "uYouPlusThemes.h"
|
||||
#import "Tweaks/YouTubeHeader/YTAppDelegate.h"
|
||||
#import "uYouPlusThemes.h" // Hide "Buy Super Thanks" banner (_ASDisplayView)
|
||||
#import "Tweaks/YouTubeHeader/YTAppDelegate.h" // Activate FLEX
|
||||
#import "Tweaks/YouTubeHeader/YTIMenuConditionalServiceItemRenderer.h"
|
||||
#import "Tweaks/YouTubeHeader/YTIPlayerBarDecorationModel.h"
|
||||
#import "Tweaks/YouTubeHeader/YTPlayerBarRectangleDecorationView.h"
|
||||
#import "Tweaks/YouTubeHeader/YTVideoQualitySwitchOriginalController.h"
|
||||
#import "Tweaks/YouTubeHeader/YTIGuideResponse.h"
|
||||
#import "Tweaks/YouTubeHeader/YTIGuideResponseSupportedRenderers.h"
|
||||
|
|
@ -47,7 +49,7 @@
|
|||
#define YT_BUNDLE_ID @"com.google.ios.youtube"
|
||||
#define YT_NAME @"YouTube"
|
||||
#define DEFAULT_RATE 1.0f // YTSpeed
|
||||
#define LOWCONTRASTMODE_CUTOFF_VERSION @"17.38.10" // LowContrastMode
|
||||
#define LOWCONTRASTMODE_CUTOFF_VERSION @"17.38.10" // LowContrastMode (v17.33.2-17.38.10)
|
||||
|
||||
// IAmYouTube
|
||||
@interface SSOConfiguration : NSObject
|
||||
|
|
@ -55,7 +57,7 @@
|
|||
|
||||
// Hide Double tap to seek Overlay
|
||||
@interface YTInlinePlayerDoubleTapIndicatorView : UIView
|
||||
@property (nonatomic, strong) UIView *_scrimOverlay;
|
||||
@property (nonatomic, strong) UIView *scrimOverlay;
|
||||
@end
|
||||
|
||||
// YTTapToSeek - https://github.com/bhackel/YTTapToSeek
|
||||
|
|
@ -128,6 +130,9 @@
|
|||
@interface YTTransportControlsButtonView : UIView
|
||||
@end
|
||||
|
||||
@interface YTFullscreenActionsView : UIView
|
||||
@end
|
||||
|
||||
@interface _ASCollectionViewCell : UICollectionViewCell
|
||||
- (id)node;
|
||||
@end
|
||||
|
|
|
|||
|
|
@ -16,6 +16,20 @@ NSBundle *uYouPlusBundle() {
|
|||
}
|
||||
NSBundle *tweakBundle = uYouPlusBundle();
|
||||
|
||||
// uYouPlusSettings.xm
|
||||
static int contrastMode() {
|
||||
NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
|
||||
NSComparisonResult result1 = [appVersion compare:@"17.33.2" options:NSNumericSearch];
|
||||
NSComparisonResult result2 = [appVersion compare:@"17.38.10" options:NSNumericSearch];
|
||||
|
||||
if (result1 != NSOrderedAscending && result2 != NSOrderedDescending) {
|
||||
return [[NSUserDefaults standardUserDefaults] integerForKey:@"lcm"];
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
//
|
||||
|
||||
# pragma mark - Tweaks
|
||||
|
||||
// Activate FLEX
|
||||
|
|
@ -38,7 +52,14 @@ NSBundle *tweakBundle = uYouPlusBundle();
|
|||
}
|
||||
%end
|
||||
|
||||
// Workaround: uYou 3.0.3 Adblock fix.
|
||||
// Enable Alternate Icons
|
||||
%hook UIApplication
|
||||
- (BOOL)supportsAlternateIcons {
|
||||
return YES;
|
||||
}
|
||||
%end
|
||||
|
||||
// Workaround: uYou 3.0.3 Adblock fix - @PoomSmart
|
||||
%hook YTAdsInnerTubeContextDecorator
|
||||
- (void)decorateContext:(id)context {
|
||||
if ([NSUserDefaults.standardUserDefaults boolForKey:@"removeYouTubeAds"]) {}
|
||||
|
|
@ -133,6 +154,7 @@ BOOL isAd(YTIElementRenderer *self) {
|
|||
%end
|
||||
%end
|
||||
|
||||
|
||||
// Fix App Group Directory by move it to document directory
|
||||
%hook NSFileManager
|
||||
- (NSURL *)containerURLForSecurityApplicationGroupIdentifier:(NSString *)groupIdentifier {
|
||||
|
|
@ -185,6 +207,7 @@ BOOL isAd(YTIElementRenderer *self) {
|
|||
%hook YTColdConfig
|
||||
- (BOOL)respectDeviceCaptionSetting { return NO; } // YouRememberCaption: https://poomsmart.github.io/repo/depictions/youremembercaption.html
|
||||
- (BOOL)isLandscapeEngagementPanelSwipeRightToDismissEnabled { return YES; } // Swipe right to dismiss the right panel in fullscreen mode
|
||||
- (BOOL)enableModularPlayerBarController { return NO; } // fixes some of the iSponorBlock problems
|
||||
%end
|
||||
|
||||
// NOYTPremium - https://github.com/PoomSmart/NoYTPremium/
|
||||
|
|
@ -262,8 +285,7 @@ BOOL isAd(YTIElementRenderer *self) {
|
|||
|
||||
// Fake premium - @bhackel
|
||||
%group gFakePremium
|
||||
// YouTube Premium Logo - @arichornlover - this doesn't always function
|
||||
// Modern implementation - @bhackel
|
||||
// YouTube Premium Logo - @arichornlover & bhackel
|
||||
%hook YTHeaderLogoController
|
||||
- (void)setTopbarLogoRenderer:(id)renderer {
|
||||
// Modify the type of the icon before setting the renderer
|
||||
|
|
@ -388,7 +410,7 @@ BOOL isAd(YTIElementRenderer *self) {
|
|||
- (BOOL)enablePlayerBarForVerticalVideoWhenControlsHiddenInFullscreen { return YES; }
|
||||
%end
|
||||
|
||||
// YTNoTracking - @arichorn - https://github.com/arichorn/YTNoTracking/
|
||||
// YTNoTracking - @arichornlover - https://github.com/arichornlover/YTNoTracking/ - OUTDATED
|
||||
%hook UIApplication
|
||||
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options {
|
||||
NSString *originalURLString = [url absoluteString];
|
||||
|
|
@ -439,12 +461,33 @@ BOOL isAd(YTIElementRenderer *self) {
|
|||
}
|
||||
%end
|
||||
|
||||
// Fix LowContrastMode - @arichorn
|
||||
// Fix LowContrastMode - @arichornlover
|
||||
%group gFixLowContrastMode
|
||||
%hook YTVersionUtils // Supported LowContrastMode Version
|
||||
+ (NSString *)appVersion { return @"17.38.10"; }
|
||||
%hook NSUserDefaults
|
||||
- (NSInteger)integerForKey:(NSString *)defaultName {
|
||||
if ([defaultName isEqualToString:@"lcm"]) {
|
||||
return contrastMode();
|
||||
}
|
||||
return %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook NSBundle
|
||||
- (id)objectForInfoDictionaryKey:(NSString *)key {
|
||||
if ([key isEqualToString:@"CFBundleShortVersionString"]) {
|
||||
return @"17.38.10";
|
||||
}
|
||||
return %orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTVersionUtils
|
||||
+ (NSString *)appVersion {
|
||||
return @"17.38.10";
|
||||
}
|
||||
%end
|
||||
|
||||
/*
|
||||
%hook YTSettingsCell // Remove v17.38.10 Version Number - @Dayanch96
|
||||
- (void)setDetailText:(id)arg1 {
|
||||
NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
|
||||
|
|
@ -455,23 +498,24 @@ BOOL isAd(YTIElementRenderer *self) {
|
|||
} %orig(arg1);
|
||||
}
|
||||
%end
|
||||
*/
|
||||
%end
|
||||
|
||||
// Disable Modern/Rounded Buttons (_ASDisplayView not included) - @arichorn
|
||||
// Disable Modern/Rounded Buttons (_ASDisplayView Version's not included) - @arichornlover
|
||||
%group gDisableModernButtons
|
||||
%hook YTQTMButton // Disable Modern/Rounded Buttons
|
||||
+ (BOOL)buttonModernizationEnabled { return NO; }
|
||||
%end
|
||||
%end
|
||||
|
||||
// Disable Rounded Hints with no Rounded Corners - @arichorn
|
||||
// Disable Rounded Hints with no Rounded Corners - @arichornlover
|
||||
%group gDisableRoundedHints
|
||||
%hook YTBubbleHintView // Disable Modern/Rounded Hints
|
||||
+ (BOOL)modernRoundedCornersEnabled { return NO; }
|
||||
%end
|
||||
%end
|
||||
|
||||
// Disable Modern Flags - @arichorn
|
||||
// Disable Modern Flags - @arichornlover
|
||||
%group gDisableModernFlags
|
||||
%hook YTColdConfig
|
||||
// Disable Modern Content
|
||||
|
|
@ -512,7 +556,7 @@ BOOL isAd(YTIElementRenderer *self) {
|
|||
%end
|
||||
%end
|
||||
|
||||
// Disable Ambient Mode in Fullscreen - @arichorn
|
||||
// Disable Ambient Mode in Fullscreen - @arichornlover
|
||||
%group gDisableAmbientMode
|
||||
%hook YTCinematicContainerView
|
||||
- (BOOL)watchFullScreenCinematicSupported {
|
||||
|
|
@ -596,20 +640,27 @@ BOOL isAd(YTIElementRenderer *self) {
|
|||
}
|
||||
%end
|
||||
|
||||
// Hide Fullscreen Actions buttons - @bhackel
|
||||
// Hide Fullscreen Actions buttons - @bhackel & @arichornlover
|
||||
%group hideFullscreenActions
|
||||
%hook YTMainAppVideoPlayerOverlayViewController
|
||||
- (BOOL)isFullscreenActionsEnabled {
|
||||
// This didn't work on its own - weird
|
||||
return IS_ENABLED(@"hideFullscreenActions_enabled") ? NO : %orig;
|
||||
%hook YTMainAppVideoPlayerOverlayViewController
|
||||
- (BOOL)isFullscreenActionsEnabled {
|
||||
// This didn't work on its own - weird
|
||||
return IS_ENABLED(@"hideFullscreenActions_enabled") ? NO : %orig;
|
||||
}
|
||||
%end
|
||||
%hook YTFullscreenActionsView
|
||||
- (BOOL)enabled {
|
||||
// Attempt 2
|
||||
return IS_ENABLED(@"hideFullscreenActions_enabled") ? NO : %orig;
|
||||
}
|
||||
- (void)removeFromSuperview {
|
||||
// Attempt 3
|
||||
if (IS_ENABLED(@"hideFullscreenActions_enabled")) {
|
||||
[self removeFromSuperview];
|
||||
}
|
||||
%end
|
||||
%hook YTFullscreenActionsView
|
||||
- (BOOL)enabled {
|
||||
// Attempt 2
|
||||
return IS_ENABLED(@"hideFullscreenActions_enabled") ? NO : %orig;
|
||||
}
|
||||
%end
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
%end
|
||||
|
||||
# pragma mark - uYouPlus
|
||||
|
|
@ -675,17 +726,15 @@ BOOL isAd(YTIElementRenderer *self) {
|
|||
}
|
||||
%end
|
||||
|
||||
/* DISABLED
|
||||
// Hide double tap to seek overlay - @arichornlover
|
||||
%hook YTInlinePlayerDoubleTapIndicatorView
|
||||
- (void)layoutSubviews {
|
||||
%orig;
|
||||
if (IS_ENABLED(@"hideDoubleTapToSeekOverlay_enabled")) {
|
||||
self._scrimOverlay.backgroundColor = [UIColor clearColor];
|
||||
self.scrimOverlay.backgroundColor = [UIColor clearColor];
|
||||
}
|
||||
}
|
||||
%end
|
||||
*/
|
||||
|
||||
// Video Controls Overlay Options
|
||||
// Hide CC / Hide Autoplay switch / Hide YTMusic Button / Enable Share Button / Enable Save to Playlist Button
|
||||
|
|
@ -744,7 +793,7 @@ BOOL isAd(YTIElementRenderer *self) {
|
|||
}
|
||||
%end
|
||||
|
||||
// Hide Fullscreen Button - @arichornlover
|
||||
// Hide Fullscreen Button - @arichornlover - PoomSmart's YouQuality tweak breaks when enabling this
|
||||
%hook YTInlinePlayerBarContainerView
|
||||
- (void)layoutSubviews {
|
||||
%orig;
|
||||
|
|
@ -827,15 +876,28 @@ BOOL isAd(YTIElementRenderer *self) {
|
|||
|
||||
// Bring back the Red Progress Bar and Gray Buffer Progress
|
||||
%group gRedProgressBar
|
||||
%hook YTInlinePlayerBarContainerView
|
||||
%hook YTSegmentableInlinePlayerBarView
|
||||
- (void)setBufferedProgressBarColor:(id)arg1 {
|
||||
[UIColor colorWithRed:1.00 green:1.00 blue:1.00 alpha:0.50];
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTInlinePlayerBarContainerView // Red Progress Bar - Old (Compatible for v17.33.2-v19.10.7)
|
||||
- (id)quietProgressBarColor {
|
||||
return [UIColor redColor];
|
||||
}
|
||||
%end
|
||||
|
||||
%hook YTSegmentableInlinePlayerBarView
|
||||
- (void)setBufferedProgressBarColor:(id)arg1 {
|
||||
[UIColor colorWithRed:1.00 green:1.00 blue:1.00 alpha:0.50];
|
||||
%hook YTPlayerBarRectangleDecorationView // Red Progress Bar - New (Compatible for v19.10.7-latest)
|
||||
- (void)drawRectangleDecorationWithSideMasks:(CGRect)rect {
|
||||
if (IS_ENABLED(@"redProgressBar_enabled")) {
|
||||
YTIPlayerBarDecorationModel *model = [self valueForKey:@"_model"];
|
||||
int overlayMode = model.playingState.overlayMode;
|
||||
model.playingState.overlayMode = 1;
|
||||
%orig;
|
||||
model.playingState.overlayMode = overlayMode;
|
||||
} else
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
%end
|
||||
|
|
@ -931,7 +993,7 @@ BOOL isAd(YTIElementRenderer *self) {
|
|||
}
|
||||
%end
|
||||
|
||||
// Red Subscribe Button - @arichorn
|
||||
// Red Subscribe Button - @arichornlover
|
||||
%hook ELMContainerNode
|
||||
- (void)setBackgroundColor:(id)color {
|
||||
NSString *description = [self description];
|
||||
|
|
@ -940,7 +1002,7 @@ BOOL isAd(YTIElementRenderer *self) {
|
|||
color = [UIColor redColor];
|
||||
}
|
||||
}
|
||||
// Hide the Button Containers under the Video Player - 17.x.x and up - @arichorn
|
||||
// Hide the Button Containers under the Video Player - 17.x.x and up - @arichornlover
|
||||
if (IS_ENABLED(@"hideButtonContainers_enabled")) {
|
||||
if ([description containsString:@"id.video.like.button"] ||
|
||||
[description containsString:@"id.video.dislike.button"] ||
|
||||
|
|
@ -1011,7 +1073,7 @@ BOOL isAd(YTIElementRenderer *self) {
|
|||
}
|
||||
%end
|
||||
|
||||
// Hide the (Connect / Thanks / Save / Report) Buttons under the Video Player - 17.x.x and up - @PoomSmart (inspired by @arichornlover) DEPRECATED METHOD ⚠️
|
||||
// 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 {
|
||||
%orig;
|
||||
|
|
@ -1245,7 +1307,7 @@ static BOOL findCell(ASNodeController *nodeController, NSArray <NSString *> *ide
|
|||
%end
|
||||
%end
|
||||
|
||||
// Hide Videos in Fullscreen - @arichorn
|
||||
// Hide Videos in Fullscreen - @arichornlover
|
||||
%group gNoVideosInFullscreen
|
||||
%hook YTFullScreenEngagementOverlayView
|
||||
- (void)setRelatedVideosView:(id)view {
|
||||
|
|
@ -1266,7 +1328,7 @@ static BOOL findCell(ASNodeController *nodeController, NSArray <NSString *> *ide
|
|||
%end
|
||||
%end
|
||||
|
||||
// iPhone Layout - @LillieH1000 & @arichorn
|
||||
// iPhone Layout - @LillieH1000 & @arichornlover
|
||||
%group giPhoneLayout
|
||||
%hook UIDevice
|
||||
- (long long)userInterfaceIdiom {
|
||||
|
|
@ -1290,7 +1352,7 @@ static BOOL findCell(ASNodeController *nodeController, NSArray <NSString *> *ide
|
|||
%end
|
||||
%end
|
||||
|
||||
// Hide Indicators - @Dayanch96 & @arichorn
|
||||
// Hide Indicators - @Dayanch96 & @arichornlover
|
||||
%group gHideSubscriptionsNotificationBadge
|
||||
%hook YTPivotBarIndicatorView
|
||||
- (void)didMoveToWindow {
|
||||
|
|
|
|||
|
|
@ -13,7 +13,15 @@
|
|||
#define SWITCH_ITEM2(t, d, k) [sectionItems addObject:[YTSettingsSectionItemClass switchItemWithTitle:t titleDescription:d accessibilityIdentifier:nil switchOn:IS_ENABLED(k) switchBlock:^BOOL (YTSettingsCell *cell, BOOL enabled) {[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:k];SHOW_RELAUNCH_YT_SNACKBAR;return YES;} settingItemId:0]]
|
||||
|
||||
static int contrastMode() {
|
||||
return [[NSUserDefaults standardUserDefaults] integerForKey:@"lcm"];
|
||||
NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
|
||||
NSComparisonResult result1 = [appVersion compare:@"17.33.2" options:NSNumericSearch];
|
||||
NSComparisonResult result2 = [appVersion compare:@"17.38.10" options:NSNumericSearch];
|
||||
|
||||
if (result1 != NSOrderedAscending && result2 != NSOrderedDescending) {
|
||||
return [[NSUserDefaults standardUserDefaults] integerForKey:@"lcm"];
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
static int appVersionSpoofer() {
|
||||
return [[NSUserDefaults standardUserDefaults] integerForKey:@"versionSpoofer"];
|
||||
|
|
@ -99,6 +107,19 @@ extern NSBundle *uYouPlusBundle();
|
|||
];
|
||||
[sectionItems addObject:bug];
|
||||
|
||||
YTSettingsSectionItem *developers = [%c(YTSettingsSectionItem)
|
||||
itemWithTitle:LOC(@"Support the Developers")
|
||||
titleDescription:LOC(@"MiRO92, PoomSmart, level3tjg, BandarHL, julioverne & Galactic-dev")
|
||||
accessibilityIdentifier:nil
|
||||
detailTextBlock:^NSString *() {
|
||||
return nil;
|
||||
}
|
||||
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
||||
return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/arichornlover/uYouEnhanced/blob/main/README.md#support-the-developers"]];
|
||||
}
|
||||
];
|
||||
[sectionItems addObject:developers];
|
||||
|
||||
YTSettingsSectionItem *exitYT = [%c(YTSettingsSectionItem)
|
||||
itemWithTitle:LOC(@"QUIT_YOUTUBE")
|
||||
titleDescription:nil
|
||||
|
|
@ -280,20 +301,55 @@ extern NSBundle *uYouPlusBundle();
|
|||
# pragma mark - UI interface options
|
||||
SECTION_HEADER(LOC(@"UI Interface Options"));
|
||||
|
||||
SWITCH_ITEM2(LOC(@"Low Contrast Mode"), LOC(@"This will lower the contrast of texts and buttons, similar to the old YouTube Interface. App restart is required."), @"lowContrastMode_enabled");
|
||||
YTSettingsSectionItem *lowContrastMode = [%c(YTSettingsSectionItem)
|
||||
itemWithTitle:@"Low Contrast Mode Selector"
|
||||
accessibilityIdentifier:nil
|
||||
detailTextBlock:^NSString *() {
|
||||
switch (contrastMode()) {
|
||||
case 1:
|
||||
return LOC(@"Custom Color");
|
||||
case 0:
|
||||
default:
|
||||
return LOC(@"Default");
|
||||
YTSettingsSectionItem *lowContrastMode = [YTSettingsSectionItemClass
|
||||
switchItemWithTitle:LOC(@"Low Contrast Mode")
|
||||
titleDescription:LOC(@"This will lower the contrast of texts and buttons, similar to the old YouTube Interface. App restart is required.")
|
||||
accessibilityIdentifier:nil
|
||||
switchOn:IS_ENABLED(@"lowContrastMode_enabled")
|
||||
switchBlock:^BOOL (YTSettingsCell *cell, BOOL enabled) {
|
||||
if (enabled) {
|
||||
NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
|
||||
NSComparisonResult result1 = [appVersion compare:@"17.33.2" options:NSNumericSearch];
|
||||
NSComparisonResult result2 = [appVersion compare:@"17.38.10" options:NSNumericSearch];
|
||||
if (result1 == NSOrderedAscending || result2 == NSOrderedDescending) {
|
||||
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Incompatibile" message:[NSString stringWithFormat:@"LowContrastMode is only available for app versions v17.33.2-v17.38.10. \nYou are currently using v%@. \n\nWorkaround: if you want to use this then I recommend enabling \"Fix LowContrastMode\" Option.", appVersion] preferredStyle:UIAlertControllerStyleAlert];
|
||||
UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
|
||||
[alert addAction:okAction];
|
||||
[settingsViewController presentViewController:alert animated:YES completion:nil];
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
||||
if (IS_ENABLED(@"fixLowContrastMode_enabled")) {
|
||||
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"lowContrastMode_enabled"];
|
||||
}
|
||||
[settingsViewController reloadData];
|
||||
SHOW_RELAUNCH_YT_SNACKBAR;
|
||||
return YES;
|
||||
}
|
||||
settingItemId:0
|
||||
];
|
||||
[sectionItems addObject:lowContrastMode];
|
||||
YTSettingsSectionItem *lowContrastModeButton = [%c(YTSettingsSectionItem)
|
||||
itemWithTitle:@"Low Contrast Mode Selector"
|
||||
accessibilityIdentifier:nil
|
||||
detailTextBlock:^NSString *() {
|
||||
switch (contrastMode()) {
|
||||
case 1:
|
||||
return LOC(@"Custom Color");
|
||||
case 0:
|
||||
default:
|
||||
return LOC(@"Default");
|
||||
}
|
||||
}
|
||||
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
||||
if (contrastMode() == 0) {
|
||||
NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
|
||||
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Incompatibile" message:[NSString stringWithFormat:@"LowContrastMode is only available for app versions v17.33.2-v17.38.10. \nYou are currently using v%@. \n\nWorkaround: if you want to use this then I recommend enabling \"Fix LowContrastMode\" Option.", appVersion] preferredStyle:UIAlertControllerStyleAlert];
|
||||
UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
|
||||
[alert addAction:okAction];
|
||||
[settingsViewController presentViewController:alert animated:YES completion:nil];
|
||||
return NO;
|
||||
} else {
|
||||
NSArray <YTSettingsSectionItem *> *rows = @[
|
||||
[YTSettingsSectionItemClass checkmarkItemWithTitle:LOC(@"Default") titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
||||
[[NSUserDefaults standardUserDefaults] setInteger:0 forKey:@"lcm"];
|
||||
|
|
@ -311,8 +367,9 @@ extern NSBundle *uYouPlusBundle();
|
|||
[settingsViewController pushViewController:picker];
|
||||
return YES;
|
||||
}
|
||||
];
|
||||
[sectionItems addObject:lowContrastMode];
|
||||
}
|
||||
];
|
||||
[sectionItems addObject:lowContrastModeButton];
|
||||
SWITCH_ITEM2(LOC(@"Fix LowContrastMode"), LOC(@"This will fix the LowContrastMode functionality by Spoofing to YouTube v17.38.10. App restart is required."), @"fixLowContrastMode_enabled");
|
||||
SWITCH_ITEM2(LOC(@"Disable Modern Buttons"), LOC(@"This will remove the new Modern / Chip Buttons in the YouTube App. but not all of them. App restart is required."), @"disableModernButtons_enabled");
|
||||
SWITCH_ITEM2(LOC(@"Disable Rounded Corners on Hints"), LOC(@"This will make the Hints in the App to not have Rounded Corners. App restart is required."), @"disableRoundedHints_enabled");
|
||||
|
|
|
|||
|
|
@ -22,7 +22,8 @@ jobs:
|
|||
run: |
|
||||
# git submodule add https://github.com/PoomSmart/FLEXing.git Tweaks/FLEXing
|
||||
git submodule add https://github.com/dayanch96/uYouLocalization.git Tweaks/uYouLocalization
|
||||
git submodule add https://github.com/arichorn/YTHoldForSpeed.git Tweaks/YTHoldForSpeed
|
||||
git submodule add https://github.com/arichornlover/YTHoldForSpeed.git Tweaks/YTHoldForSpeed
|
||||
git submodule add https://github.com/arichornlover/YouGroupSettings.git Tweaks/YouGroupSettings
|
||||
git add .
|
||||
git commit -m "added uYouEnhanced submodules"
|
||||
git push origin
|
||||
|
|
@ -55,6 +56,8 @@ jobs:
|
|||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YTABConfig
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YTClassicVideoQuality
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YTUHD
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YTVideoOverlay
|
||||
|
|
@ -65,6 +68,8 @@ jobs:
|
|||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YouQuality
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YouGroupSettings
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/YouTubeHeader
|
||||
git add .
|
||||
git submodule update --init --recursive --remote Tweaks/iSponsorBlock
|
||||
|
|
@ -81,6 +86,7 @@ jobs:
|
|||
ln -s ../Tweaks/MrBeastify/layout/Library/Application\ Support/MrBeastify.bundle MrBeastify.bundle
|
||||
ln -s ../Tweaks/uYouLocalization/layout/Library/Application\ Support/uYouLocalization.bundle uYouLocalization.bundle
|
||||
ln -s ../Tweaks/YTHoldForSpeed/layout/Library/Application\ Support/YTHoldForSpeed.bundle YTHoldForSpeed.bundle
|
||||
ln -s ../Tweaks/YouGroupSettings/layout/Library/Application\ Support/YouGroupSettings.bundle YouGroupSettings.bundle
|
||||
git add .
|
||||
git commit -m "Added bundles"
|
||||
git push origin
|
||||
|
|
@ -93,6 +99,7 @@ jobs:
|
|||
# rm -f MrBeastify.bundle
|
||||
# rm -f uYouLocalization.bundle
|
||||
# rm -f YTHoldForSpeed.bundle
|
||||
# rm -f YouGroupSettings.bundle
|
||||
# git add .
|
||||
# git commit -m "Deleted bundles"
|
||||
# git push origin
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit d2aec88d3e8c300983592d4e54f55eccad12c50d
|
||||
Subproject commit 8d90af33a8ace8f1e0adbaa863aed5da9a835fc4
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit d983151bcb0d86dc3cae17c8ffcc87661457ea5e
|
||||
Subproject commit e5f3cb2f3612332ae5c75ebcd7f25eb507b60750
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 85b7c0a2e3ba540106439f9c109e4e4842f56c76
|
||||
Subproject commit 9bf17bfdede78a236f5d67f780cf77709a9e5fdf
|
||||
1
Tweaks/YouGroupSettings
Submodule
1
Tweaks/YouGroupSettings
Submodule
|
|
@ -0,0 +1 @@
|
|||
Subproject commit 159da3e9569e8f156a73df80b153c57cccc1dad1
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit a2a753975962e51cb834ff8f86759593dac58eb4
|
||||
Subproject commit 591fe9dc1dcfbd4591b391fe5b25301beea5e5b7
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 9b6d8db494969546691e143aa1a1c4cbfbdcea03
|
||||
Subproject commit 304ec97e4cc9060a80f9128b713243c92a3215d9
|
||||
Loading…
Reference in a new issue