Files
main/Tweaks/DontEatMyContent/Settings.x
2023-06-27 09:54:41 +02:00

167 lines
6.8 KiB
Plaintext

#import "Tweak.h"
// Adapted from
// https://github.com/PoomSmart/YouPiP/blob/bd04bf37be3d01540db418061164ae17a8f0298e/Settings.x
// https://github.com/qnblackcat/uYouPlus/blob/265927b3900d886e2085d05bfad7cd4157be87d2/Settings.xm
extern void DEMC_showSnackBar(NSString *text);
extern NSBundle *DEMC_getTweakBundle();
extern CGFloat constant;
static const NSInteger sectionId = 517; // DontEatMyContent's section ID (just a random number)
// Category for additional functions
@interface YTSettingsSectionItemManager (_DEMC)
- (void)updateDEMCSectionWithEntry:(id)entry;
@end
%group DEMC_Settings
%hook YTAppSettingsPresentationData
+ (NSArray *)settingsCategoryOrder {
NSArray *order = %orig;
NSMutableArray *mutableOrder = [order mutableCopy];
NSUInteger insertIndex = [order indexOfObject:@(1)]; // Index of Settings > General
if (insertIndex != NSNotFound)
[mutableOrder insertObject:@(sectionId) atIndex:insertIndex + 1]; // Insert DontEatMyContent settings under General
return mutableOrder;
}
%end
%hook YTSettingsSectionItemManager
%new
- (void)updateDEMCSectionWithEntry:(id)entry {
YTSettingsViewController *delegate = [self valueForKey:@"_dataDelegate"];
NSMutableArray *sectionItems = [NSMutableArray array]; // Create autoreleased array
NSBundle *bundle = DEMC_getTweakBundle();
// Enabled
YTSettingsSectionItem *enabled = [%c(YTSettingsSectionItem) switchItemWithTitle:LOCALIZED_STRING(@"ENABLED")
titleDescription:LOCALIZED_STRING(@"TWEAK_DESC")
accessibilityIdentifier:nil
switchOn:IS_TWEAK_ENABLED
switchBlock:^BOOL (YTSettingsCell *cell, BOOL enabled) {
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:ENABLED_KEY];
YTAlertView *alert = [%c(YTAlertView) confirmationDialogWithAction:^
{
// https://stackoverflow.com/a/17802404/19227228
[[UIApplication sharedApplication] performSelector:@selector(suspend)];
[NSThread sleepForTimeInterval:0.5];
exit(0);
}
actionTitle:LOCALIZED_STRING(@"EXIT")
cancelTitle:LOCALIZED_STRING(@"LATER")
];
alert.title = DEMC;
alert.subtitle = LOCALIZED_STRING(@"EXIT_YT_DESC");
[alert show];
return YES;
}
settingItemId:0
];
[sectionItems addObject:enabled];
// Safe area constant
YTSettingsSectionItem *constraintConstant = [%c(YTSettingsSectionItem) itemWithTitle:LOCALIZED_STRING(@"SAFE_AREA_CONST")
titleDescription:LOCALIZED_STRING(@"SAFE_AREA_CONST_DESC")
accessibilityIdentifier:nil
detailTextBlock:^NSString *() {
return [NSString stringWithFormat:@"%.1f", constant];
}
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger sectionItemIndex) {
__block YTSettingsViewController *settingsViewController = [self valueForKey:@"_settingsViewControllerDelegate"];
NSMutableArray *rows = [NSMutableArray array];
float currentConstant = 20.0;
float storedConstant = [[NSUserDefaults standardUserDefaults] floatForKey:SAFE_AREA_CONSTANT_KEY];;
UInt8 index = 0, selectedIndex = 0;
while (currentConstant <= 25.0) {
NSString *title = [NSString stringWithFormat:@"%.1f", currentConstant];
if (currentConstant == DEFAULT_CONSTANT)
title = [NSString stringWithFormat:@"%.1f (%@)", currentConstant, LOCALIZED_STRING(@"DEFAULT")];
if (currentConstant == storedConstant)
selectedIndex = index;
[rows addObject:[%c(YTSettingsSectionItem) checkmarkItemWithTitle:title
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger sectionItemIndex) {
[[NSUserDefaults standardUserDefaults] setFloat:currentConstant forKey:SAFE_AREA_CONSTANT_KEY];
constant = currentConstant;
[settingsViewController reloadData]; // Refresh section's detail text (constant)
DEMC_showSnackBar(LOCALIZED_STRING(@"SAFE_AREA_CONST_MESSAGE"));
return YES;
}
]];
currentConstant += 0.5; index++;
}
YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOCALIZED_STRING(@"SAFE_AREA_CONST")
pickerSectionTitle:nil
rows:rows
selectedItemIndex:selectedIndex
parentResponder:[self parentResponder]
];
[settingsViewController pushViewController:picker];
return YES;
}
];
if (IS_TWEAK_ENABLED) [sectionItems addObject:constraintConstant];
// Color views
YTSettingsSectionItem *colorViews = [%c(YTSettingsSectionItem) switchItemWithTitle:LOCALIZED_STRING(@"COLOR_VIEWS")
titleDescription:LOCALIZED_STRING(@"COLOR_VIEWS_DESC")
accessibilityIdentifier:nil
switchOn:IS_COLOR_VIEWS_ENABLED
switchBlock:^BOOL (YTSettingsCell *cell, BOOL enabled) {
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:COLOR_VIEWS_ENABLED_KEY];
DEMC_showSnackBar(LOCALIZED_STRING(@"CHANGES_SAVED"));
return YES;
}
settingItemId:0
];
if (IS_TWEAK_ENABLED) [sectionItems addObject:colorViews];
// Report an issue
YTSettingsSectionItem *reportIssue = [%c(YTSettingsSectionItem) itemWithTitle:LOCALIZED_STRING(@"REPORT_ISSUE")
titleDescription:nil
accessibilityIdentifier:nil
detailTextBlock:nil
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger sectionItemIndex) {
return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/therealFoxster/DontEatMyContent/issues/new"]];
}
];
[sectionItems addObject:reportIssue];
// View source code
YTSettingsSectionItem *sourceCode = [%c(YTSettingsSectionItem) itemWithTitle:LOCALIZED_STRING(@"SOURCE_CODE")
titleDescription:nil
accessibilityIdentifier:nil
detailTextBlock:nil
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger sectionItemIndex) {
return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/therealFoxster/DontEatMyContent"]];
}
];
[sectionItems addObject:sourceCode];
[delegate setSectionItems:sectionItems
forCategory:sectionId
title:DEMC
titleDescription:nil
headerHidden:NO
];
}
- (void)updateSectionForCategory:(NSUInteger)category withEntry:(id)entry {
if (category == sectionId) {
[self updateDEMCSectionWithEntry:entry];
return;
}
%orig;
}
%end
%end // group DEMC_Settings
%ctor {
%init(DEMC_Settings);
}