//Please note, in order to use MSHookIvar, this file needs to be .xm #import #import @interface SBCoverSheetPrimarySlidingViewController : UIViewController - (void)viewDidDisappear:(BOOL)arg1; - (void)viewDidAppear:(BOOL)arg1; @end @interface SBIconListGridLayoutConfiguration @property (nonatomic, assign) NSString *location; - (NSString *)findLocation; - (NSUInteger)numberOfPortraitColumns; - (NSUInteger)numberOfPortraitRows; @end //Set up variables for use with Cephei static BOOL tweakEnabled; static BOOL transparent; static BOOL hidden; static double setHeight; static double customOpacity; static NSInteger setIconNumber; //nepeta like drm BOOL dpkgInvalid = NO; HBPreferences *preferences; %group allVersions %hook SBCoverSheetPrimarySlidingViewController - (void)viewDidDisappear:(BOOL)arg1 { %orig; // Thanks to Nepeta for the DRM if (!dpkgInvalid) return; UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Pirate Detected!" message:@"Seriously? Pirating a free Tweak is awful!\nPiracy repo's Tweaks could contain Malware if you didn't know that, so go ahead and get Dockify from the official Source https://Burrit0z.github.io/repo/.\nIf you're seeing this but you got it from the official source then make sure to add https://Burrit0z.github.io/repo to Cydia or Sileo." preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Aww man" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * action) { UIApplication *application = [UIApplication sharedApplication]; [application openURL:[NSURL URLWithString:@"https://Burrit0z.github.io/repo"] options:@{} completionHandler:nil]; }]; [alertController addAction:cancelAction]; [self presentViewController:alertController animated:YES completion:nil]; } %end %end %group version12 //hook the dock %hook SBDockView //ios 12 -(double)dockHeight { if (hidden) { return (0); } else { return (%orig*setHeight); //sets custom height if dock is not set to hidden } } //this deals with everything adjusting opacity/transparency //ios 12 and 13 -(void)setBackgroundAlpha:(double)arg1 { if (transparent == NO && hidden == NO) { //if not transparent and not hidden %orig(customOpacity); }else if (transparent || hidden) { // Note: || means or in objc %orig(0.0); //hides background of the dock (transparent) } else { NSLog(@"Dock not Transparent/hidden, no custom opacity\n"); } } %end //NEW HOOK FOR ICON STATE %hook SBDockIconListView //ios 12 required piece +(NSInteger)maxIcons { if (hidden) { return (0); } else { return (setIconNumber); } } %end %end //NEW GROUP FOR ios13 %group version13 %hook SBDockView //ios 13 -(double)dockHeight { if (hidden) { return (0); } else { return (%orig*setHeight); //sets custom height if dock is not set to hidden } } //this deals with everything adjusting opacity/transparency //ios 12 and 13 -(void)setBackgroundAlpha:(double)arg1 { if (transparent == NO && hidden == NO) { //if not transparent and not hidden %orig(customOpacity); }else if (transparent || hidden) { // Note: || means or in objc %orig(0.0); //hides background of the dock (transparent) } else { NSLog(@"Dock not Transparent/hidden, no custom opacity\n"); } } %end %hook SBDockIconListView - (NSUInteger)iconColumnsForCurrentOrientation { if (hidden) { return (0); } else { return (setIconNumber); } } %end //fix for icons being off the page ios 13 %hook SBIconListGridLayoutConfiguration %property (nonatomic, assign) NSString *location; %new //Modeled off of Kritanta's solution with ivars - (NSString *)findLocation { if (self.location) return self.location; else { NSUInteger rows = MSHookIvar(self, "_numberOfPortraitRows"); NSUInteger columns = MSHookIvar(self, "_numberOfPortraitColumns"); // dock if (rows <= 2 && columns == 4) { self.location = @"Dock"; } else if (rows == 3 && columns == 3) { self.location = @"Folder"; } else { self.location = @"Root"; } } return self.location; } - (NSUInteger)numberOfPortraitColumns { [self findLocation]; if ([self.location isEqualToString:@"Dock"]) { if (hidden) { return (0); } else { return (setIconNumber); } } else { return (%orig); } } %end %end // Thanks to Nepeta for the DRM, and thanks to Litten as well %ctor { dpkgInvalid = ![[NSFileManager defaultManager] fileExistsAtPath:@"/var/lib/dpkg/info/com.burritoz.dockify.list"]; if (!dpkgInvalid) dpkgInvalid = ![[NSFileManager defaultManager] fileExistsAtPath:@"/var/lib/dpkg/info/com.burritoz.dockify.md5sums"]; preferences = [[HBPreferences alloc] initWithIdentifier:@"com.burritoz.dockifyprefs"]; [preferences registerDefaults:@ { //defaults for prefernces @"tweakEnabled": @YES, @"setHeight": @1, @"customOpacity": @1, @"hidden": @NO, @"setIconNumber": @4, }]; [preferences registerBool:&tweakEnabled default:YES forKey:@"tweakEnabled"]; [preferences registerBool:&transparent default:YES forKey:@"transparent"]; //registering transparent as a Boolean [preferences registerBool:&hidden default:NO forKey:@"hidden"]; //registering hidden as a Boolean [preferences registerDouble:(double *)&setHeight default:1 forKey:@"setHeight"]; //registering setHeigt as a double (number) [preferences registerDouble:(double *)&customOpacity default:1 forKey:@"customOpacity"]; //registering customOpacity as a double (number) [preferences registerInteger:(NSInteger *)&setIconNumber default:4 forKey:@"setIconNumber"]; //Integer of how many icons to allow if (tweakEnabled) { %init(allVersions); if (kCFCoreFoundationVersionNumber < 1600) //This means version < 12 { %init(version12); } else { %init(version13); } } }