Advertisement
ItzNebbs

Grouped Sections - Genesis 3

Apr 14th, 2023
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. @implementation GENSpecifiers
  2. - (void)organizeSpecifiers:(NSArray *)specifiers {
  3.     if (hasRun) {
  4.         return;
  5.     } else {
  6.         self.origSpecifiers = specifiers;
  7.         self.allSpecifiers = specifiers;
  8.  
  9.         groupCell = [PSSpecifier preferenceSpecifierNamed:@"GENESIS_GROUP" target:NULL set:NULL get:NULL detail:NULL cell:PSGroupCell edit:nil];
  10.         groupCell.name = @"";
  11.  
  12.         hasRun = YES;
  13.     }
  14. }
  15. - (NSMutableArray *)mainSpecifiers {
  16.     NSArray<PSSpecifier *> *origSpecifiers = self.allSpecifiers;
  17.     NSMutableArray<PSSpecifier *> *mainSpecifiers = @[].mutableCopy;
  18.  
  19.     for (int i = 0; i < origSpecifiers.count; i++) {
  20.         PSSpecifier *specifier = origSpecifiers[i];
  21.  
  22.         if (kGENGroupedSections) {
  23.             if ([specifier.identifier isEqualToString:@"PRIMARY_APPLE_ACCOUNT_GROUP"]) {
  24.                 if (!kGENHideAccountCell) {
  25.                     [mainSpecifiers addObject:specifier];
  26.                 }
  27.             } else if ([specifier.identifier isEqualToString:@"APPLE_ACCOUNT"]) {
  28.                 if (!kGENHideAccountCell) {
  29.                     [mainSpecifiers addObject:specifier];
  30.                     [mainSpecifiers addObject:groupCell];
  31.                 }
  32.                
  33.                 PSSpecifier *tweakCell = [PSSpecifier preferenceSpecifierNamed:@"TWEAKS_CELL" target:NULL set:NULL get:NULL detail:%c(GENTweaksListController) cell:PSLinkCell edit:NULL];
  34.                 tweakCell.name = @"Tweaks";
  35.                 UIImage *tweakIcon = [UIImage imageWithContentsOfFile:@"/var/jb/Library/Tweak Support/Nebbs/Genesis 3/Images/tweaks.png"];
  36.                 [tweakCell setProperty:tweakIcon forKey:@"iconImage"];
  37.                 [mainSpecifiers addObject:tweakCell];
  38.                
  39.                 PSSpecifier *systemCell = [PSSpecifier preferenceSpecifierNamed:@"SYSTEM_CELL" target:NULL set:NULL get:NULL detail:%c(GENSystemListController) cell:PSLinkCell edit:NULL];
  40.                 systemCell.name = @"System";
  41.                 UIImage *systemIcon = [UIImage imageWithContentsOfFile:@"/var/jb/Library/Tweak Support/Nebbs/Genesis 3/Images/system.png"];
  42.                 [systemCell setProperty:systemIcon forKey:@"iconImage"];
  43.                 [mainSpecifiers addObject:systemCell];
  44.             } else {
  45.                 if ([specifier.identifier isEqualToString:@"AIRPLANE_MODE"]) {
  46.                     [mainSpecifiers addObject:groupCell];
  47.                     [mainSpecifiers addObject:specifier];
  48.                 } else if ([specifier.identifier isEqualToString:@"WIFI"]) {
  49.                     [mainSpecifiers addObject:specifier];
  50.                 } else if ([specifier.identifier isEqualToString:@"Bluetooth"]) {
  51.                     [mainSpecifiers addObject:specifier];
  52.                 } else if ([specifier.identifier isEqualToString:@"MOBILE_DATA_SETTINGS_ID"]) {
  53.                     [mainSpecifiers addObject:specifier];
  54.                 } else if ([specifier.identifier isEqualToString:@"NOTIFICATIONS_ID"]) {
  55.                     [mainSpecifiers addObject:groupCell];
  56.                     [mainSpecifiers addObject:specifier];
  57.                 } else if ([specifier.identifier isEqualToString:@"Sounds"]) {
  58.                     [mainSpecifiers addObject:specifier];
  59.                 } else if ([specifier.identifier isEqualToString:@"DO_NOT_DISTURB"]) {
  60.                     [mainSpecifiers addObject:specifier];
  61.                 } else if ([specifier.identifier isEqualToString:@"SCREEN_TIME"]) {
  62.                     [mainSpecifiers addObject:specifier];
  63.                 } else if ([specifier.identifier isEqualToString:@"General"]) {
  64.                     [mainSpecifiers addObject:groupCell];
  65.                     [mainSpecifiers addObject:specifier];
  66.                 } else if ([specifier.identifier isEqualToString:@"ControlCenter"]) {
  67.                     [mainSpecifiers addObject:specifier];
  68.                 } else if ([specifier.identifier isEqualToString:@"DISPLAY"]) {
  69.                     [mainSpecifiers addObject:specifier];
  70.                 } else if ([specifier.identifier isEqualToString:@"HOME_SCREEN"]) {
  71.                     [mainSpecifiers addObject:specifier];
  72.                 } else if ([specifier.identifier isEqualToString:@"ACCESSIBILITY"]) {
  73.                     [mainSpecifiers addObject:specifier];
  74.                 } else if ([specifier.identifier isEqualToString:@"Wallpaper"]) {
  75.                     [mainSpecifiers addObject:specifier];
  76.                 } else if ([specifier.identifier isEqualToString:@"SIRI"]) {
  77.                     [mainSpecifiers addObject:specifier];
  78.                 } else if ([specifier.identifier isEqualToString:@"PASSCODE"]) {
  79.                     [mainSpecifiers addObject:specifier];
  80.                 } else if ([specifier.identifier isEqualToString:@"EMERGENCY_SOS"]) {
  81.                     [mainSpecifiers addObject:specifier];
  82.                 } else if ([specifier.identifier isEqualToString:@"EXPOSURE_NOTIFICATION"]) {
  83.                     [mainSpecifiers addObject:specifier];
  84.                 } else if ([specifier.identifier isEqualToString:@"BATTERY_USAGE"]) {
  85.                     [mainSpecifiers addObject:specifier];
  86.                 } else if ([specifier.identifier isEqualToString:@"Privacy"]) {
  87.                     [mainSpecifiers addObject:specifier];
  88.                 }
  89.             }
  90.         } else {
  91.             if (kGENHideAccountCell) {
  92.                 if ([specifier.identifier isEqualToString:@"PRIMARY_APPLE_ACCOUNT_GROUP"]) {
  93.                     // Do Nothing
  94.                 } else if ([specifier.identifier isEqualToString:@"APPLE_ACCOUNT"]) {
  95.                     // Do Nothing
  96.                 } else {
  97.                     [mainSpecifiers addObject:specifier];
  98.                 }
  99.             } else {
  100.                 [mainSpecifiers addObject:specifier];
  101.             }
  102.         }
  103.     }
  104.  
  105.     if (!kGENGroupedSections) {
  106.         [mainSpecifiers addObject:groupCell];
  107.         [mainSpecifiers addObjectsFromArray:[self tweakSpecifiers]];
  108.     }
  109.    
  110.     return mainSpecifiers;
  111. }
  112. - (NSMutableArray *)tweakSpecifiers {
  113.     NSMutableArray *tweakSpecifiers = [NSMutableArray new];
  114.    
  115.     NSString *iconName;
  116.     NSString *iconPath;
  117.     NSString *tweakName;
  118.     NSString *bundleIdentifier;
  119.  
  120.     NSString *detailController;
  121.  
  122.     NSMutableArray *unsortedTweaksArray = (NSMutableArray *)[[NSFileManager defaultManager] contentsOfDirectoryAtPath:ROOT_PATH_NS(@"/Library/PreferenceBundles/") error:nil];
  123.     NSMutableArray *unsortedPlistsArray = (NSMutableArray *)[[NSFileManager defaultManager] contentsOfDirectoryAtPath:ROOT_PATH_NS(@"/Library/PreferenceLoader/Preferences/") error:nil];
  124.     NSString *libhbangprefs = @"libhbangprefs.bundle";
  125.     NSString *cephei = @"Cephei.bundle";
  126.  
  127.     [unsortedTweaksArray removeObject:libhbangprefs];
  128.     [unsortedTweaksArray removeObject:cephei];
  129.        
  130.     NSMutableArray *tweaksArray = (NSMutableArray *)[unsortedTweaksArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
  131.     NSMutableArray *plistsArray = (NSMutableArray *)[unsortedPlistsArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
  132.  
  133.     if (tweaksArray.count > 0) {
  134.         for (NSString *file in tweaksArray) {
  135.             NSString *finalFile = [file stringByReplacingOccurrencesOfString:@".bundle" withString:@""];
  136.             NSDictionary *farDictionary;
  137.  
  138.             for (NSString *plistFile in plistsArray) {
  139.                 if ([finalFile containsString:[plistFile stringByReplacingOccurrencesOfString:@".plist" withString:@""]]) {
  140.                     farDictionary = [NSDictionary dictionaryWithContentsOfFile:[NSString stringWithFormat:ROOT_PATH_NS(@"/Library/PreferenceLoader/Preferences/%@"), plistFile]];
  141.                     NSEnumerator *farEnumerator = [farDictionary objectEnumerator];
  142.                     id value;
  143.  
  144.                     while (value = [farEnumerator nextObject]) {
  145.                         iconName = [value valueForKey:@"icon"];
  146.                         detailController = [value valueForKey:@"detail"];
  147.                         tweakName = [value valueForKey:@"label"];
  148.                     }
  149.  
  150.                     if (iconName) {
  151.                         iconPath = [NSString stringWithFormat:ROOT_PATH_NS(@"/Library/PreferenceBundles/%@/%@"), file, iconName];
  152.                     }
  153.  
  154.                     NSDictionary *mainDictionary = [NSDictionary dictionaryWithContentsOfFile:[NSString stringWithFormat:ROOT_PATH_NS(@"/Library/PreferenceBundles/%@/Info.plist"), file]];
  155.                     bundleIdentifier = [mainDictionary valueForKey:@"CFBundleIdentifier"];
  156.  
  157.                     NSString *bundlePath = [NSString stringWithFormat:ROOT_PATH_NS(@"/Library/PreferenceBundles/%@"), file];
  158.                     NSBundle *bundle = [NSBundle bundleWithPath:bundlePath];
  159.                     [bundle load];
  160.  
  161.                     if (detailController) {
  162.                         [tweakSpecifiers addObject:({
  163.                             PSSpecifier *specifier = [PSSpecifier preferenceSpecifierNamed:tweakName target:self set:NULL get:NULL detail:NSClassFromString(detailController) cell:PSLinkCell edit:nil];
  164.                            
  165.                             [specifier setProperty:@YES forKey:@"enabled"];
  166.                             [specifier setProperty:finalFile forKey:@"bundle"];
  167.                             [specifier setProperty:@"lazyLoadBundle:" forKey:@"loadAction"];
  168.  
  169.                             [specifier setProperty:[UIImage imageWithContentsOfFile:@"/var/jb/Library/Tweak Support/Nebbs/Genesis 3/Images/tweaks.png"] forKey:@"iconImage"];
  170.  
  171.                             if (iconName) {
  172.                                 [specifier setProperty:[UIImage imageWithContentsOfFile:iconPath] forKey:@"iconImage"];
  173.                             }
  174.  
  175.                             specifier;
  176.                         })];
  177.                     }
  178.                 }
  179.             }
  180.         }
  181.     }
  182.  
  183.     return tweakSpecifiers;
  184. }
  185. - (NSMutableArray *)systemSpecifiers {
  186.     NSArray<PSSpecifier *> *origSpecifiers = self.allSpecifiers;
  187.     NSMutableArray<PSSpecifier *> *systemSpecifiers = @[].mutableCopy;
  188.    
  189.     PSSpecifier *storeCell;
  190.     PSSpecifier *passwordsCell;
  191.     PSSpecifier *walletCell;
  192.  
  193.     PSSpecifier *booksCell;
  194.     PSSpecifier *calendarCell;
  195.     PSSpecifier *compassCell;
  196.     PSSpecifier *contactsCell;
  197.     PSSpecifier *facetimeCell;
  198.     PSSpecifier *gamecenterCell;
  199.     PSSpecifier *healthCell;
  200.     PSSpecifier *mailCell;
  201.     PSSpecifier *mapsCell;
  202.     PSSpecifier *measureCell;
  203.     PSSpecifier *messagesCell;
  204.     PSSpecifier *newsCell;
  205.     PSSpecifier *notesCell;
  206.     PSSpecifier *phoneCell;
  207.     PSSpecifier *remindersCell;
  208.     PSSpecifier *safariCell;
  209.     PSSpecifier *shortcutsCell;
  210.     PSSpecifier *stocksCell;
  211.     PSSpecifier *translateCell;
  212.     PSSpecifier *memosCell;
  213.  
  214.     PSSpecifier *cameraCell;
  215.     PSSpecifier *musicCell;
  216.     PSSpecifier *photosCell;
  217.     PSSpecifier *tvCell;
  218.     PSSpecifier *providerCell;
  219.  
  220.     for (int i = 0; i < origSpecifiers.count; i++) {
  221.         PSSpecifier *specifier = origSpecifiers[i];
  222.  
  223.         if ([specifier.identifier isEqualToString:@"STORE"]) {
  224.             storeCell = specifier;
  225.         } else if ([specifier.identifier isEqualToString:@"PASSWORDS"]) {
  226.             passwordsCell = specifier;
  227.         } else if ([specifier.identifier isEqualToString:@"PASSBOOK"]) {
  228.             passwordsCell = specifier;
  229.         } else if ([specifier.identifier isEqualToString:@"IBOOKS"]) {
  230.             booksCell = specifier;
  231.         } else if ([specifier.identifier isEqualToString:@"CALENDAR"]) {
  232.             calendarCell = specifier;
  233.         } else if ([specifier.identifier isEqualToString:@"COMPASS"]) {
  234.             compassCell = specifier;
  235.         } else if ([specifier.identifier isEqualToString:@"CONTACTS"]) {
  236.             contactsCell = specifier;
  237.         } else if ([specifier.identifier isEqualToString:@"FACETIME"]) {
  238.             facetimeCell = specifier;
  239.         } else if ([specifier.identifier isEqualToString:@"GAMECENTER"]) {
  240.             gamecenterCell = specifier;
  241.         } else if ([specifier.identifier isEqualToString:@"HEALTH"]) {
  242.             healthCell = specifier;
  243.         } else if ([specifier.identifier isEqualToString:@"MAIL"]) {
  244.             mailCell = specifier;
  245.         } else if ([specifier.identifier isEqualToString:@"MAPS"]) {
  246.             mapsCell = specifier;
  247.         } else if ([specifier.identifier isEqualToString:@"MEASURE"]) {
  248.             measureCell = specifier;
  249.         } else if ([specifier.identifier isEqualToString:@"MESSAGES"]) {
  250.             messagesCell = specifier;
  251.         } else if ([specifier.identifier isEqualToString:@"NEWS"]) {
  252.             newsCell = specifier;
  253.         } else if ([specifier.identifier isEqualToString:@"NOTES"]) {
  254.             notesCell = specifier;
  255.         } else if ([specifier.identifier isEqualToString:@"Phone"]) {
  256.             phoneCell = specifier;
  257.         } else if ([specifier.identifier isEqualToString:@"REMINDERS"]) {
  258.             remindersCell = specifier;
  259.         } else if ([specifier.identifier isEqualToString:@"SAFARI"]) {
  260.             safariCell = specifier;
  261.         } else if ([specifier.identifier isEqualToString:@"SHORTCUTS"]) {
  262.             shortcutsCell = specifier;
  263.         } else if ([specifier.identifier isEqualToString:@"STOCKS"]) {
  264.             stocksCell = specifier;
  265.         } else if ([specifier.identifier isEqualToString:@"TRANSLATE"]) {
  266.             translateCell = specifier;
  267.         } else if ([specifier.identifier isEqualToString:@"VOICE_MEMOS"]) {
  268.             memosCell = specifier;
  269.         } else if ([specifier.identifier isEqualToString:@"CAMERA"]) {
  270.             cameraCell = specifier;
  271.         } else if ([specifier.identifier isEqualToString:@"MUSIC"]) {
  272.             musicCell = specifier;
  273.         } else if ([specifier.identifier isEqualToString:@"Photos"]) {
  274.             photosCell = specifier;
  275.         } else if ([specifier.identifier isEqualToString:@"TVAPP"]) {
  276.             tvCell = specifier;
  277.         } else if ([specifier.identifier isEqualToString:@"VIDEO_SUBSCRIBER"]) {
  278.             providerCell = specifier;
  279.         }
  280.     }
  281.  
  282.     [systemSpecifiers addObject:groupCell];
  283.  
  284.     if (storeCell != nil) {
  285.         [systemSpecifiers addObject:storeCell];
  286.     }
  287.    
  288.     if (passwordsCell != nil) {
  289.         [systemSpecifiers addObject:passwordsCell];
  290.     }
  291.  
  292.     if (walletCell != nil) {
  293.         [systemSpecifiers addObject:walletCell];
  294.     }
  295.  
  296.     [systemSpecifiers addObject:groupCell];
  297.  
  298.     if (booksCell != nil) {
  299.         [systemSpecifiers addObject:booksCell];
  300.     }
  301.    
  302.     if (calendarCell != nil) {
  303.         [systemSpecifiers addObject:calendarCell];
  304.     }
  305.  
  306.     if (compassCell != nil) {
  307.         [systemSpecifiers addObject:compassCell];
  308.     }
  309.  
  310.     if (contactsCell != nil) {
  311.         [systemSpecifiers addObject:contactsCell];
  312.     }
  313.    
  314.     if (facetimeCell != nil) {
  315.         [systemSpecifiers addObject:facetimeCell];
  316.     }
  317.  
  318.     if (gamecenterCell != nil) {
  319.         [systemSpecifiers addObject:gamecenterCell];
  320.     }
  321.  
  322.     if (healthCell != nil) {
  323.         [systemSpecifiers addObject:healthCell];
  324.     }
  325.    
  326.     if (mailCell != nil) {
  327.         [systemSpecifiers addObject:mailCell];
  328.     }
  329.  
  330.     if (mapsCell != nil) {
  331.         [systemSpecifiers addObject:mapsCell];
  332.     }
  333.  
  334.     if (measureCell != nil) {
  335.         [systemSpecifiers addObject:measureCell];
  336.     }
  337.    
  338.     if (messagesCell != nil) {
  339.         [systemSpecifiers addObject:messagesCell];
  340.     }
  341.  
  342.     if (newsCell != nil) {
  343.         [systemSpecifiers addObject:newsCell];
  344.     }
  345.  
  346.     if (notesCell != nil) {
  347.         [systemSpecifiers addObject:notesCell];
  348.     }
  349.    
  350.     if (phoneCell != nil) {
  351.         [systemSpecifiers addObject:phoneCell];
  352.     }
  353.  
  354.     if (remindersCell != nil) {
  355.         [systemSpecifiers addObject:remindersCell];
  356.     }
  357.  
  358.     if (safariCell != nil) {
  359.         [systemSpecifiers addObject:safariCell];
  360.     }
  361.    
  362.     if (shortcutsCell != nil) {
  363.         [systemSpecifiers addObject:shortcutsCell];
  364.     }
  365.  
  366.     if (stocksCell != nil) {
  367.         [systemSpecifiers addObject:stocksCell];
  368.     }
  369.  
  370.     if (translateCell != nil) {
  371.         [systemSpecifiers addObject:translateCell];
  372.     }
  373.  
  374.     if (memosCell != nil) {
  375.         [systemSpecifiers addObject:memosCell];
  376.     }
  377.  
  378.     [systemSpecifiers addObject:groupCell];
  379.  
  380.     if (cameraCell != nil) {
  381.         [systemSpecifiers addObject:cameraCell];
  382.     }
  383.    
  384.     if (musicCell != nil) {
  385.         [systemSpecifiers addObject:musicCell];
  386.     }
  387.  
  388.     if (photosCell != nil) {
  389.         [systemSpecifiers addObject:photosCell];
  390.     }
  391.  
  392.     if (tvCell != nil) {
  393.         [systemSpecifiers addObject:tvCell];
  394.     }
  395.    
  396.     if (providerCell != nil) {
  397.         [systemSpecifiers addObject:providerCell];
  398.     }
  399.  
  400.     return systemSpecifiers;
  401. }
  402. @end
  403.  
  404. static GENSpecifiers *GENSpecs = [GENSpecifiers new];
  405.  
  406. @implementation GENTweaksListController
  407. - (NSArray *)specifiers {
  408.     if (!_specifiers) {
  409.         _specifiers = [GENSpecs tweakSpecifiers];
  410.     }
  411.  
  412.     return _specifiers;
  413. }
  414. - (void)viewDidLoad {
  415.     [super viewDidLoad];
  416.     [self reloadSpecifiers];
  417. }
  418. - (NSString *)title {
  419.     return @"Tweaks";
  420. }
  421. @end
  422.  
  423. @implementation GENSystemListController
  424. - (NSArray *)specifiers {
  425.     if (!_specifiers) {
  426.         _specifiers = [GENSpecs systemSpecifiers];
  427.     }
  428.     return _specifiers;
  429. }
  430. - (void)viewDidLoad {
  431.     [super viewDidLoad];
  432.     [self reloadSpecifiers];
  433. }
  434. - (NSString *)title {
  435.     return @"System";
  436. }
  437. @end
  438.  
  439. %hook PSUIPrefsListController
  440. - (NSMutableArray<PSSpecifier *> *)specifiers {
  441.     NSArray<PSSpecifier *> *origSpecifiers = %orig;
  442.  
  443.     if (kGENGroupedSections || kGENHideAccountCell) {
  444.         [GENSpecs organizeSpecifiers:origSpecifiers];
  445.  
  446.         NSMutableArray<PSSpecifier *> *specifiers = [GENSpecs mainSpecifiers];
  447.  
  448.         static dispatch_once_t onceToken;
  449.  
  450.         dispatch_once(&onceToken, ^{
  451.             MSHookIvar<id>(self, "_specifiers") = specifiers;
  452.             NSMutableDictionary *dict = @{}.mutableCopy;
  453.  
  454.             for (PSSpecifier *specifier in specifiers) {
  455.                 if (specifier.identifier) {
  456.                     dict[specifier.identifier] = specifier;
  457.                 }
  458.             }
  459.  
  460.             MSHookIvar<id>(self, "_specifiersByID") = dict;
  461.         });
  462.  
  463.         return specifiers;
  464.     } else {
  465.         return %orig;
  466.     }
  467. }
  468. - (BOOL)_exposureNotificationAvailable {
  469.     if (kGENGroupedSections) {
  470.         return NO;
  471.     } else {
  472.         return %orig;
  473.     }
  474. }
  475. - (void)insertSpecifier:(PSSpecifier *)specifier atIndex:(NSInteger)index animated:(BOOL)animated {
  476.     if (kGENGroupedSections) {
  477.         if ([specifier.identifier isEqualToString:@"VPN"]) {
  478.             %orig;
  479.         } else if ([specifier.identifier isEqualToString:@"EMERGENCY_SOS"]) {
  480.             // Do Nothing
  481.         } else if ([specifier.identifier isEqualToString:@"PASSBOOK"]) {
  482.             // Do Nothing
  483.         } else if ([specifier.identifier isEqualToString:@"HOMEKIT"]) {
  484.             // Do Nothing
  485.         } else if ([specifier.identifier isEqualToString:@"com.apple.podcasts"]) {
  486.             // Do Nothing
  487.         } else if ([specifier.identifier isEqualToString:@"VIDEO_SUBSCRIBER"]) {
  488.             // Do Nothing
  489.         }
  490.     } else {
  491.         %orig;
  492.     }
  493. }
  494. - (void)reloadSpecifiers {
  495.     if (!kGENHideAccountCell) {
  496.         %orig;
  497.     }
  498. }
  499. %end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement