diff --git a/uYouPlus.xm b/uYouPlus.xm index 971a460..939334f 100644 --- a/uYouPlus.xm +++ b/uYouPlus.xm @@ -1,6 +1,7 @@ #import #import #import +#import "Header.h" #import "Tweaks/YouTubeHeader/YTVideoQualitySwitchOriginalController.h" #import "Tweaks/YouTubeHeader/YTSettingsSectionItem.h" #import "Tweaks/YouTubeHeader/YTPlayerViewController.h" @@ -12,27 +13,6 @@ #import "Tweaks/YouTubeHeader/YTIBrowseRequest.h" #include -@interface YTMainAppVideoPlayerOverlayView : UIView --(UIViewController *)_viewControllerForAncestor; -@end -@interface YTWatchMiniBarView : UIView -@end -@interface YTAsyncCollectionView : UIView -@end -@interface YTPlayerViewController (YTAFS) -- (void)autoFullscreen; -@end -@interface ASCollectionView : UIView -@end -@interface YTLightweightQTMButton : UIView -@end -@interface YTELMView : UIView -@end -@interface NIAttributedLabel : UIView -@end - -UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0]; - BOOL hideHUD() { return [[NSUserDefaults standardUserDefaults] boolForKey:@"hideHUD_enabled"]; } @@ -51,89 +31,37 @@ BOOL ReExplore() { BOOL bigYTMiniPlayer() { return [[NSUserDefaults standardUserDefaults] boolForKey:@"bigYTMiniPlayer_enabled"]; } +BOOL hideCC() { + return [[NSUserDefaults standardUserDefaults] boolForKey:@"hideCC_enabled"]; +} +BOOL hideAutoplaySwitch() { + return [[NSUserDefaults standardUserDefaults] boolForKey:@"hideAutoplaySwitch_enabled"]; +} +BOOL castConfirm() { + return [[NSUserDefaults standardUserDefaults] boolForKey:@"castConfirm_enabled"]; +} -//Settings -%hook YTSettingsViewController -- (void)setSectionItems:(NSMutableArray *)sectionItems forCategory:(NSInteger)category title:(NSString *)title titleDescription:(NSString *)titleDescription headerHidden:(BOOL)headerHidden { - if (category == 1) { - NSUInteger statsForNerdsIndex = [sectionItems indexOfObjectPassingTest:^BOOL (YTSettingsSectionItem *item, NSUInteger idx, BOOL *stop) { - return item.settingItemId == 265; - }]; - if (statsForNerdsIndex != NSNotFound) { - // - YTSettingsSectionItem *hoverCardItem = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"Show End screens hover cards (YTNoHoverCards)" titleDescription:@"Allows creator End screens (thumbnails) to appear at the end of videos."]; - hoverCardItem.hasSwitch = YES; - hoverCardItem.switchVisible = YES; - hoverCardItem.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"hover_cards_enabled"]; - hoverCardItem.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) { - [[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"hover_cards_enabled"]; - return YES; - }; - [sectionItems insertObject:hoverCardItem atIndex:statsForNerdsIndex + 1]; - // - YTSettingsSectionItem *reExplore = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"Replace Shorts tab with Explore tab (YTReExplore)" titleDescription:@"App restart is required."]; - reExplore.hasSwitch = YES; - reExplore.switchVisible = YES; - reExplore.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"reExplore_enabled"]; - reExplore.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) { - [[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"reExplore_enabled"]; - return YES; - }; - [sectionItems insertObject:reExplore atIndex:statsForNerdsIndex + 2]; - // - YTSettingsSectionItem *bigYTMiniPlayer = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"New miniplayer bar style (BigYTMiniPlayer)" titleDescription:@"App restart is required."]; - bigYTMiniPlayer.hasSwitch = YES; - bigYTMiniPlayer.switchVisible = YES; - bigYTMiniPlayer.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"bigYTMiniPlayer_enabled"]; - bigYTMiniPlayer.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) { - [[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"bigYTMiniPlayer_enabled"]; - return YES; - }; - [sectionItems insertObject:bigYTMiniPlayer atIndex:statsForNerdsIndex + 2]; - // - YTSettingsSectionItem *hideHUD = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"Hide HUD Messages" titleDescription:@"Example: CC is turned on/off, Video loop is on,... App restart is required."]; - hideHUD.hasSwitch = YES; - hideHUD.switchVisible = YES; - hideHUD.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"hideHUD_enabled"]; - hideHUD.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) { - [[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"hideHUD_enabled"]; - return YES; - }; - [sectionItems insertObject:hideHUD atIndex:statsForNerdsIndex + 1]; - // - YTSettingsSectionItem *autoFUll = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"Auto Full Screen (YTAutoFullScreen)" titleDescription:@"Autoplay videos at full screen."]; - autoFUll.hasSwitch = YES; - autoFUll.switchVisible = YES; - autoFUll.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"autofull_enabled"]; - autoFUll.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) { - [[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"autofull_enabled"]; - return YES; - }; - [sectionItems insertObject:autoFUll atIndex:statsForNerdsIndex + 2]; - // - YTSettingsSectionItem *Oleditem = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"OLED Dark mode (Experimental)" titleDescription:@"WARNING: You must set YouTube's appearance to Dark theme before enabling OLED dark mode (iPad is not supported). App restart is required."]; - Oleditem.hasSwitch = YES; - Oleditem.switchVisible = YES; - Oleditem.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"oled_enabled"]; - Oleditem.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) { - [[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"oled_enabled"]; - return YES; - }; - [sectionItems insertObject:Oleditem atIndex:statsForNerdsIndex + 1]; - } - } - %orig; - } +UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0]; + +// Hide CC / Autoplay switch +%hook YTMainAppControlsOverlayView +- (void)layoutSubviews { + %orig(); + if (hideAutoplaySwitch()) { + MSHookIvar(self, "_autonavSwitch").hidden = YES; + } + if (hideCC()) { + MSHookIvar(self, "_closedCaptionsOrSubtitlesButton").hidden = YES; + } +} %end // Hide HUD Messages %hook YTHUDMessageView - (id)initWithMessage:(id)arg1 dismissHandler:(id)arg2 { - if (hideHUD()) { + if (hideHUD()) { return NULL; - } - else - return %orig; + } else { return %orig; } } %end @@ -160,6 +88,42 @@ BOOL bigYTMiniPlayer() { %orig; } %end + +//YTCastConfirm: https://github.com/JamieBerghmans/YTCastConfirm +%hook MDXPlaybackRouteButtonController +-(void)didPressButton:(id)arg1 { + if (castConfirm()) { + UIAlertController* alertController = [%c(UIAlertController) alertControllerWithTitle:@"Casting" + message:@"Are you sure you want to start casting?" + preferredStyle:UIAlertControllerStyleAlert]; + UIAlertAction* defaultAction = [%c(UIAlertAction) actionWithTitle:@"Yes" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) { + %orig; + }]; + + UIAlertAction* noButton = [%c(UIAlertAction) + actionWithTitle:@"Cancel" + style:UIAlertActionStyleDefault + handler: ^(UIAlertAction * action) { + return; + }]; + + [alertController addAction:defaultAction]; + [alertController addAction:noButton]; + + id rootViewController = [%c(UIApplication) sharedApplication].delegate.window.rootViewController; + if([rootViewController isKindOfClass:[%c(UINavigationController) class]]) { + rootViewController = ((UINavigationController *)rootViewController).viewControllers.firstObject; + } + if([rootViewController isKindOfClass:[%c(UITabBarController) class]]) { + rootViewController = ((UITabBarController *)rootViewController).selectedViewController; + } + if ([rootViewController presentedViewController] != nil) { + rootViewController = [rootViewController presentedViewController]; + } + [rootViewController presentViewController:alertController animated:YES completion:nil]; + } else { return %orig; } +} +%end // Workaround for https://github.com/MiRO92/uYou-for-YouTube/issues/12 %hook YTAdsInnerTubeContextDecorator @@ -454,13 +418,6 @@ BOOL bigYTMiniPlayer() { - (void)layoutSubviews {} %end -%hook ASCollectionView --(void)layoutSubviews { - self.backgroundColor = oledColor; - %orig; -} -%end - %hook YTLightweightQTMButton -(void)setBackgroundColor:(id)arg1 { if([self.nextResponder isKindOfClass:%c(YTShareMainView)]) { @@ -514,6 +471,7 @@ BOOL bigYTMiniPlayer() { } %end +//// /* %hook YTShortsGalleryHeaderView // upload videos heaer (gallery) -(void)setBackgroundColor:(id)arg1 { @@ -529,6 +487,13 @@ BOOL bigYTMiniPlayer() { } %end +%hook ASCollectionView +-(void)layoutSubviews { + self.backgroundColor = oledColor; + %orig; +} +%end + %hook YTChannelProfileDescriptionEditorView // edit profile Description -(void)setBackgroundColor:(id)arg1 { arg1 = oledColor; @@ -620,7 +585,7 @@ static void replaceTab(YTIGuideResponse *response) { %ctor { %init; - if (oled()) { + if (oled() && ([[NSUserDefaults standardUserDefaults] integerForKey:@"page_style"] == 1)) { %init(gOLED); } if (ReExplore()) {