mirror of
				https://github.com/SoPat712/YTLitePlus.git
				synced 2025-11-03 21:09:22 -05:00 
			
		
		
		
	added files via upload
This commit is contained in:
		
							
								
								
									
										186
									
								
								Tweaks/YouPiP/Settings.x
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										186
									
								
								Tweaks/YouPiP/Settings.x
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,186 @@
 | 
			
		||||
#import <version.h>
 | 
			
		||||
#import "Header.h"
 | 
			
		||||
#import "../YouTubeHeader/YTAlertView.h"
 | 
			
		||||
#import "../YouTubeHeader/YTHotConfig.h"
 | 
			
		||||
#import "../YouTubeHeader/YTSettingsViewController.h"
 | 
			
		||||
#import "../YouTubeHeader/YTSettingsSectionItem.h"
 | 
			
		||||
#import "../YouTubeHeader/YTSettingsSectionItemManager.h"
 | 
			
		||||
#import "../YouTubeHeader/YTAppSettingsSectionItemActionController.h"
 | 
			
		||||
 | 
			
		||||
#define LOC(x) [tweakBundle localizedStringForKey:x value:nil table:nil]
 | 
			
		||||
 | 
			
		||||
#define FEATURE_CUTOFF_VERSION @"16.46.5"
 | 
			
		||||
 | 
			
		||||
static const NSInteger YouPiPSection = 200;
 | 
			
		||||
 | 
			
		||||
@interface YTSettingsSectionItemManager (YouPiP)
 | 
			
		||||
- (void)updateYouPiPSectionWithEntry:(id)entry;
 | 
			
		||||
@end
 | 
			
		||||
 | 
			
		||||
extern BOOL TweakEnabled();
 | 
			
		||||
extern BOOL UsePiPButton();
 | 
			
		||||
extern BOOL UseTabBarPiPButton();
 | 
			
		||||
extern BOOL NoMiniPlayerPiP();
 | 
			
		||||
extern BOOL LegacyPiP();
 | 
			
		||||
extern BOOL NonBackgroundable();
 | 
			
		||||
extern BOOL FakeVersion();
 | 
			
		||||
 | 
			
		||||
extern NSBundle *YouPiPBundle();
 | 
			
		||||
 | 
			
		||||
NSString *currentVersion;
 | 
			
		||||
 | 
			
		||||
static NSString *YouPiPWarnVersionKey = @"YouPiPWarnVersionKey";
 | 
			
		||||
 | 
			
		||||
%hook YTAppSettingsPresentationData
 | 
			
		||||
 | 
			
		||||
+ (NSArray *)settingsCategoryOrder {
 | 
			
		||||
    NSArray *order = %orig;
 | 
			
		||||
    NSMutableArray *mutableOrder = [order mutableCopy];
 | 
			
		||||
    NSUInteger insertIndex = [order indexOfObject:@(1)];
 | 
			
		||||
    if (insertIndex != NSNotFound)
 | 
			
		||||
        [mutableOrder insertObject:@(YouPiPSection) atIndex:insertIndex + 1]; // Add YouPiP under General (ID: 1) section
 | 
			
		||||
    return mutableOrder;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
%end
 | 
			
		||||
 | 
			
		||||
%hook YTSettingsSectionItemManager
 | 
			
		||||
 | 
			
		||||
%new(v@:@)
 | 
			
		||||
- (void)updateYouPiPSectionWithEntry:(id)entry {
 | 
			
		||||
    YTSettingsViewController *delegate = [self valueForKey:@"_dataDelegate"];
 | 
			
		||||
    NSMutableArray *sectionItems = [NSMutableArray array];
 | 
			
		||||
    NSBundle *tweakBundle = YouPiPBundle();
 | 
			
		||||
    YTSettingsSectionItem *enabled = [%c(YTSettingsSectionItem) switchItemWithTitle:LOC(@"ENABLED")
 | 
			
		||||
        titleDescription:LOC(@"ENABLED_DESC")
 | 
			
		||||
        accessibilityIdentifier:nil
 | 
			
		||||
        switchOn:TweakEnabled()
 | 
			
		||||
        switchBlock:^BOOL (YTSettingsCell *cell, BOOL enabled) {
 | 
			
		||||
            [[NSUserDefaults standardUserDefaults] setBool:enabled forKey:EnabledKey];
 | 
			
		||||
            return YES;
 | 
			
		||||
        }
 | 
			
		||||
        settingItemId:0];
 | 
			
		||||
    [sectionItems addObject:enabled];
 | 
			
		||||
    YTSettingsSectionItem *activationMethod = [%c(YTSettingsSectionItem) switchItemWithTitle:LOC(@"USE_PIP_BUTTON")
 | 
			
		||||
        titleDescription:LOC(@"USE_PIP_BUTTON_DESC")
 | 
			
		||||
        accessibilityIdentifier:nil
 | 
			
		||||
        switchOn:UsePiPButton()
 | 
			
		||||
        switchBlock:^BOOL (YTSettingsCell *cell, BOOL enabled) {
 | 
			
		||||
            [[NSUserDefaults standardUserDefaults] setBool:enabled forKey:PiPActivationMethodKey];
 | 
			
		||||
            return YES;
 | 
			
		||||
        }
 | 
			
		||||
        settingItemId:0];
 | 
			
		||||
    [sectionItems addObject:activationMethod];
 | 
			
		||||
    YTSettingsSectionItem *activationMethod2 = [%c(YTSettingsSectionItem) switchItemWithTitle:LOC(@"USE_TAB_BAR_PIP_BUTTON")
 | 
			
		||||
        titleDescription:LOC(@"USE_TAB_BAR_PIP_BUTTON_DESC")
 | 
			
		||||
        accessibilityIdentifier:nil
 | 
			
		||||
        switchOn:UseTabBarPiPButton()
 | 
			
		||||
        switchBlock:^BOOL (YTSettingsCell *cell, BOOL enabled) {
 | 
			
		||||
            [[NSUserDefaults standardUserDefaults] setBool:enabled forKey:PiPActivationMethod2Key];
 | 
			
		||||
            return YES;
 | 
			
		||||
        }
 | 
			
		||||
        settingItemId:0];
 | 
			
		||||
    [sectionItems addObject:activationMethod2];
 | 
			
		||||
    YTSettingsSectionItem *miniPlayer = [%c(YTSettingsSectionItem) switchItemWithTitle:LOC(@"DISABLE_PIP_MINI_PLAYER")
 | 
			
		||||
        titleDescription:LOC(@"DISABLE_PIP_MINI_PLAYER_DESC")
 | 
			
		||||
        accessibilityIdentifier:nil
 | 
			
		||||
        switchOn:NoMiniPlayerPiP()
 | 
			
		||||
        switchBlock:^BOOL (YTSettingsCell *cell, BOOL enabled) {
 | 
			
		||||
            [[NSUserDefaults standardUserDefaults] setBool:enabled forKey:NoMiniPlayerPiPKey];
 | 
			
		||||
            return YES;
 | 
			
		||||
        }
 | 
			
		||||
        settingItemId:0];
 | 
			
		||||
    [sectionItems addObject:miniPlayer];
 | 
			
		||||
    if (IS_IOS_OR_NEWER(iOS_13_0) && [currentVersion compare:@"15.33.4" options:NSNumericSearch] == NSOrderedDescending) {
 | 
			
		||||
        YTSettingsSectionItem *legacyPiP = [%c(YTSettingsSectionItem) switchItemWithTitle:LOC(@"LEGACY_PIP")
 | 
			
		||||
            titleDescription:LOC(@"LEGACY_PIP_DESC")
 | 
			
		||||
            accessibilityIdentifier:nil
 | 
			
		||||
            switchOn:LegacyPiP()
 | 
			
		||||
            switchBlock:^BOOL (YTSettingsCell *cell, BOOL enabled) {
 | 
			
		||||
                [[NSUserDefaults standardUserDefaults] setBool:enabled forKey:CompatibilityModeKey];
 | 
			
		||||
                return YES;
 | 
			
		||||
            }
 | 
			
		||||
            settingItemId:0];
 | 
			
		||||
        [sectionItems addObject:legacyPiP];
 | 
			
		||||
    }
 | 
			
		||||
    YTAppSettingsSectionItemActionController *sectionItemActionController = [delegate valueForKey:@"_sectionItemActionController"];
 | 
			
		||||
    YTSettingsSectionItemManager *sectionItemManager = [sectionItemActionController valueForKey:@"_sectionItemManager"];
 | 
			
		||||
    YTHotConfig *hotConfig;
 | 
			
		||||
    @try {
 | 
			
		||||
        hotConfig = [sectionItemManager valueForKey:@"_hotConfig"];
 | 
			
		||||
    } @catch (id ex) {
 | 
			
		||||
        hotConfig = [sectionItemManager.gimme instanceForType:%c(YTHotConfig)];
 | 
			
		||||
    }
 | 
			
		||||
    YTIIosMediaHotConfig *iosMediaHotConfig = hotConfig.hotConfigGroup.mediaHotConfig.iosMediaHotConfig;
 | 
			
		||||
    if ([iosMediaHotConfig respondsToSelector:@selector(setEnablePipForNonBackgroundableContent:)]) {
 | 
			
		||||
        YTSettingsSectionItem *nonBackgroundable = [%c(YTSettingsSectionItem) switchItemWithTitle:LOC(@"NON_BACKGROUNDABLE_PIP")
 | 
			
		||||
            titleDescription:LOC(@"NON_BACKGROUNDABLE_PIP_DESC")
 | 
			
		||||
            accessibilityIdentifier:nil
 | 
			
		||||
            switchOn:NonBackgroundable()
 | 
			
		||||
            switchBlock:^BOOL (YTSettingsCell *cell, BOOL enabled) {
 | 
			
		||||
                [[NSUserDefaults standardUserDefaults] setBool:enabled forKey:NonBackgroundableKey];
 | 
			
		||||
                return YES;
 | 
			
		||||
            }
 | 
			
		||||
            settingItemId:0];
 | 
			
		||||
        [sectionItems addObject:nonBackgroundable];
 | 
			
		||||
    }
 | 
			
		||||
    if ([currentVersion compare:FEATURE_CUTOFF_VERSION options:NSNumericSearch] == NSOrderedDescending) {
 | 
			
		||||
        YTSettingsSectionItem *fakeVersion = [%c(YTSettingsSectionItem) switchItemWithTitle:LOC(@"FAKE_YT_VERSION")
 | 
			
		||||
            titleDescription:[NSString stringWithFormat:LOC(@"FAKE_YT_VERSION_DESC"), FEATURE_CUTOFF_VERSION]
 | 
			
		||||
            accessibilityIdentifier:nil
 | 
			
		||||
            switchOn:FakeVersion()
 | 
			
		||||
            switchBlock:^BOOL (YTSettingsCell *cell, BOOL enabled) {
 | 
			
		||||
                [[NSUserDefaults standardUserDefaults] setBool:enabled forKey:FakeVersionKey];
 | 
			
		||||
                return YES;
 | 
			
		||||
            }
 | 
			
		||||
            settingItemId:0];
 | 
			
		||||
        [sectionItems addObject:fakeVersion];
 | 
			
		||||
    }
 | 
			
		||||
    [delegate setSectionItems:sectionItems forCategory:YouPiPSection title:TweakName titleDescription:nil headerHidden:NO];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)updateSectionForCategory:(NSUInteger)category withEntry:(id)entry {
 | 
			
		||||
    if (category == YouPiPSection) {
 | 
			
		||||
        [self updateYouPiPSectionWithEntry:entry];
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    %orig;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
%end
 | 
			
		||||
 | 
			
		||||
BOOL loadWatchNextRequest = NO;
 | 
			
		||||
 | 
			
		||||
%hook YTVersionUtils
 | 
			
		||||
 | 
			
		||||
+ (NSString *)appVersion {
 | 
			
		||||
    return FakeVersion() && loadWatchNextRequest ? FEATURE_CUTOFF_VERSION : %orig;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
%end
 | 
			
		||||
 | 
			
		||||
%hook YTWatchNextViewController
 | 
			
		||||
 | 
			
		||||
- (void)loadWatchNextRequest:(id)arg1 withInitialWatchNextResponse:(id)arg2 disableUnloadModel:(BOOL)arg3 {
 | 
			
		||||
    loadWatchNextRequest = YES;
 | 
			
		||||
    %orig;
 | 
			
		||||
    loadWatchNextRequest = NO;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
%end
 | 
			
		||||
 | 
			
		||||
%ctor {
 | 
			
		||||
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
 | 
			
		||||
    currentVersion = [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleVersionKey];
 | 
			
		||||
    if (![defaults boolForKey:YouPiPWarnVersionKey] && [currentVersion compare:@(OS_STRINGIFY(MIN_YOUTUBE_VERSION)) options:NSNumericSearch] != NSOrderedDescending) {
 | 
			
		||||
        [defaults setBool:YES forKey:YouPiPWarnVersionKey];
 | 
			
		||||
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
 | 
			
		||||
            NSBundle *tweakBundle = YouPiPBundle();
 | 
			
		||||
            YTAlertView *alertView = [%c(YTAlertView) infoDialog];
 | 
			
		||||
            alertView.title = TweakName;
 | 
			
		||||
            alertView.subtitle = [NSString stringWithFormat:LOC(@"UNSUPPORTED_YT_VERSION"), currentVersion, @(OS_STRINGIFY(MIN_YOUTUBE_VERSION))];
 | 
			
		||||
            [alertView show];
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
    %init;
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user