|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360 |
- #include "KAIRootListController.h"
-
- KAIRootListController *controller;
- NSBundle *tweakBundle;
-
- // thank god for renai
- static inline NSString *getPackageVersion() {
- NSString *packageVersion = [NSString stringWithFormat:@"${%@}", @"Version"];
- int status;
-
- NSMutableArray<NSString *> *argsv0 = [NSMutableArray array];
- for (NSString *string in @[
- @"/usr/bin/dpkg-query", @"-Wf", packageVersion, @"com.burritoz.kai"
- ]) {
- [argsv0
- addObject:
- [NSString
- stringWithFormat:
- @"'%@'",
- [string
- stringByReplacingOccurrencesOfString:@"'"
- withString:@"\\'"
- options:
- NSRegularExpressionSearch
- range:
- NSMakeRange(
- 0,
- string
- .length)]]];
- }
-
- NSString *argsv1 = [argsv0 componentsJoinedByString:@" "];
- FILE *file = popen(argsv1.UTF8String, "r");
- if (!file) {
- return nil;
- }
-
- char data[1024];
- NSMutableString *output = [NSMutableString string];
-
- while (fgets(data, 1024, file) != NULL) {
- [output appendString:[NSString stringWithUTF8String:data]];
- }
-
- int result = pclose(file);
- status = result;
-
- if (status == 0) {
- return output ?: @"🏴☠️ Pirated";
- }
-
- return @"🏴☠️ Pirated";
- }
-
- ////////
-
- static void respringNeeded() {
- UIAlertController *alert = [UIAlertController
- alertControllerWithTitle:@"Respring"
- message:@"Changing this requires a respring for it to "
- @"take effect. Would you like to respring now?"
- preferredStyle:UIAlertControllerStyleActionSheet];
-
- UIAlertAction *defaultAction =
- [UIAlertAction actionWithTitle:@"No"
- style:UIAlertActionStyleCancel
- handler:^(UIAlertAction *action){
- }];
-
- UIAlertAction *yes = [UIAlertAction
- actionWithTitle:@"Respring"
- style:UIAlertActionStyleDestructive
- handler:^(UIAlertAction *action) {
- NSTask *t = [[NSTask alloc] init];
- [t setLaunchPath:@"usr/bin/killall"];
- [t setArguments:[NSArray arrayWithObjects:@"backboardd", nil]];
- [t launch];
- }];
-
- [alert addAction:defaultAction];
- [alert addAction:yes];
- [controller presentViewController:alert animated:YES completion:nil];
- }
-
- static void applyPrefs() {
- CFNotificationCenterPostNotification(
- CFNotificationCenterGetDarwinNotifyCenter(),
- CFSTR("com.burritoz.kaiprefs/reload"), nil, nil, true);
- }
-
- @implementation KAIRootListController
-
- - (NSArray *)specifiers {
- if (!_specifiers) {
- _specifiers = [self loadSpecifiersFromPlistName:@"Root" target:self];
- }
-
- return _specifiers;
- }
-
- - (void)viewWillAppear:(BOOL)arg1 {
- [[UISegmentedControl
- appearanceWhenContainedInInstancesOfClasses:@[ self.class ]]
- setTintColor:[UIColor colorWithRed:0.00 green:0.82 blue:1.00 alpha:1.00]];
- [[UISwitch appearanceWhenContainedInInstancesOfClasses:@[ self.class ]]
- setOnTintColor:[UIColor colorWithRed:0.00
- green:0.82
- blue:1.00
- alpha:1.00]];
- [[UISlider appearanceWhenContainedInInstancesOfClasses:@[ self.class ]]
- setTintColor:[UIColor colorWithRed:0.00 green:0.82 blue:1.00 alpha:1.00]];
- }
-
- - (void)viewWillDisappear:(BOOL)arg1 {
- [super viewWillDisappear:arg1];
- }
-
- - (void)viewDidLoad {
- [super viewDidLoad];
-
- self.navigationItem.titleView = [UIView new];
- self.titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 10, 10)];
- self.titleLabel.font = [UIFont systemFontOfSize:17.5];
- self.titleLabel.translatesAutoresizingMaskIntoConstraints = NO;
- self.titleLabel.text = @"kai";
- self.titleLabel.alpha = 0.0;
- self.titleLabel.textAlignment = NSTextAlignmentCenter;
- [self.navigationItem.titleView addSubview:self.titleLabel];
-
- self.iconView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 10, 10)];
- self.iconView.contentMode = UIViewContentModeScaleAspectFit;
- self.iconView.image =
- [UIImage imageWithContentsOfFile:
- @"/Library/PreferenceBundles/kaiPrefs.bundle/icon.png"];
- self.iconView.translatesAutoresizingMaskIntoConstraints = NO;
- self.iconView.alpha = 1.0;
- [self.navigationItem.titleView addSubview:self.iconView];
-
- [NSLayoutConstraint activateConstraints:@[
- [self.titleLabel.topAnchor
- constraintEqualToAnchor:self.navigationItem.titleView.topAnchor],
- [self.titleLabel.leadingAnchor
- constraintEqualToAnchor:self.navigationItem.titleView.leadingAnchor],
- [self.titleLabel.trailingAnchor
- constraintEqualToAnchor:self.navigationItem.titleView.trailingAnchor],
- [self.titleLabel.bottomAnchor
- constraintEqualToAnchor:self.navigationItem.titleView.bottomAnchor],
- [self.iconView.topAnchor
- constraintEqualToAnchor:self.navigationItem.titleView.topAnchor],
- [self.iconView.leadingAnchor
- constraintEqualToAnchor:self.navigationItem.titleView.leadingAnchor],
- [self.iconView.trailingAnchor
- constraintEqualToAnchor:self.navigationItem.titleView.trailingAnchor],
- [self.iconView.bottomAnchor
- constraintEqualToAnchor:self.navigationItem.titleView.bottomAnchor],
- ]];
-
- UIAlertController *alert = [UIAlertController
- alertControllerWithTitle:@"Pirated :("
- message:@"Please install kai from Chariz repository."
- preferredStyle:UIAlertControllerStyleAlert];
-
- if ([[NSFileManager defaultManager]
- fileExistsAtPath:@"/var/lib/dpkg/info/com.burritoz.kai.list"] &&
- [[NSFileManager defaultManager]
- fileExistsAtPath:@"/var/lib/dpkg/info/com.burritoz.kai.md5sums"]) {
- // nothing
- } else {
- [self presentViewController:alert animated:YES completion:nil];
- }
-
- CFNotificationCenterAddObserver(
- CFNotificationCenterGetDarwinNotifyCenter(), NULL,
- (CFNotificationCallback)respringNeeded,
- CFSTR("com.burritoz.kaiprefs.respringneeded"), NULL,
- CFNotificationSuspensionBehaviorDeliverImmediately);
-
- CFNotificationCenterAddObserver(
- CFNotificationCenterGetDarwinNotifyCenter(), NULL,
- (CFNotificationCallback)applyPrefs, CFSTR("com.burritoz.kaiprefs.apply"),
- NULL, CFNotificationSuspensionBehaviorDeliverImmediately);
-
- controller = self;
- }
-
- - (void)resetPrefs:(id)sender {
- UIAlertController *alert = [UIAlertController
- alertControllerWithTitle:@"Reset Preferences"
- message:@"Are you sure you want to reset all of your "
- @"preferences? This action CANNOT be undone! "
- @"Your device will respring."
- preferredStyle:UIAlertControllerStyleAlert];
-
- UIAlertAction *defaultAction =
- [UIAlertAction actionWithTitle:@"No"
- style:UIAlertActionStyleDefault
- handler:^(UIAlertAction *action){
- }];
- UIAlertAction *yes = [UIAlertAction
- actionWithTitle:@"Yes"
- style:UIAlertActionStyleDestructive
- handler:^(UIAlertAction *action) {
- NSUserDefaults *prefs =
- [[NSUserDefaults standardUserDefaults] init];
- [prefs removePersistentDomainForName:@"com.burritoz.kaiprefs"];
-
- NSTask *f = [[NSTask alloc] init];
- [f setLaunchPath:@"/usr/bin/killall"];
- [f setArguments:[NSArray arrayWithObjects:@"backboardd", nil]];
- [f launch];
- }];
-
- [alert addAction:defaultAction];
- [alert addAction:yes];
- [self presentViewController:alert animated:YES completion:nil];
- }
-
- - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
- CGFloat offsetY = scrollView.contentOffset.y;
-
- if (offsetY > 120) {
- [UIView animateWithDuration:0.2
- animations:^{
- self.iconView.alpha = 1.0;
- self.titleLabel.alpha = 0.0;
- }];
- } else {
- [UIView animateWithDuration:0.2
- animations:^{
- self.iconView.alpha = 0.0;
- self.titleLabel.alpha = 1.0;
- }];
- }
- }
-
- - (void)followMeRen {
- [[UIApplication sharedApplication]
- openURL:[NSURL URLWithString:@"https://twitter.com/ren7995"]];
- }
-
- - (void)followMeOnTwitterThomz {
- [[UIApplication sharedApplication]
- openURL:[NSURL URLWithString:@"https://twitter.com/thomzi07"]];
- }
-
- @end
-
- @implementation KaiHeaderCell // Header Cell
-
- - (instancetype)initWithStyle:(UITableViewCellStyle)style
- reuseIdentifier:(id)reuseIdentifier
- specifier:(id)specifier {
- self = [super initWithStyle:style
- reuseIdentifier:reuseIdentifier
- specifier:specifier];
-
- if (self) {
- UILabel *tweakLabel = [[UILabel alloc]
- initWithFrame:CGRectMake(20, 30,
- self.contentView.bounds.size.width + 30, 50)];
- [tweakLabel setTextAlignment:NSTextAlignmentLeft];
- [tweakLabel setFont:[UIFont systemFontOfSize:50
- weight:UIFontWeightRegular]];
- tweakLabel.text = @"kai";
-
- UILabel *devLabel = [[UILabel alloc]
- initWithFrame:CGRectMake(20, 70,
- self.contentView.bounds.size.width + 30, 50)];
- [devLabel setTextAlignment:NSTextAlignmentLeft];
- [devLabel setFont:[UIFont systemFontOfSize:20 weight:UIFontWeightMedium]];
- devLabel.alpha = 0.8;
- devLabel.text = getPackageVersion();
-
- NSBundle *bundle = [[NSBundle alloc]
- initWithPath:@"/Library/PreferenceBundles/kaiPrefs.bundle"];
- UIImage *logo =
- [UIImage imageWithContentsOfFile:[bundle pathForResource:@"iconFullSize"
- ofType:@"png"]];
- UIImageView *icon = [[UIImageView alloc] initWithImage:logo];
- icon.frame =
- CGRectMake(self.contentView.bounds.size.width - 35, 35, 70, 70);
- icon.translatesAutoresizingMaskIntoConstraints = NO;
-
- [self addSubview:tweakLabel];
- [self addSubview:devLabel];
- [self addSubview:icon];
-
- [icon.rightAnchor constraintEqualToAnchor:self.rightAnchor constant:-20]
- .active = YES;
- [icon.centerYAnchor constraintEqualToAnchor:self.centerYAnchor].active =
- YES;
- [icon.widthAnchor constraintEqualToConstant:70].active = YES;
- [icon.heightAnchor constraintEqualToConstant:70].active = YES;
-
- icon.layer.masksToBounds = YES;
- icon.layer.cornerRadius = 15;
- }
-
- return self;
- }
-
- - (instancetype)initWithSpecifier:(PSSpecifier *)specifier {
- return [self initWithStyle:UITableViewCellStyleDefault
- reuseIdentifier:@"KaiHeaderCell"
- specifier:specifier];
- }
-
- - (void)setFrame:(CGRect)frame {
- frame.origin.x = 0;
- [super setFrame:frame];
- }
-
- - (CGFloat)preferredHeightForWidth:(CGFloat)arg1 {
- return 140.0f;
- }
-
- @end
-
- @implementation Thomz_TwitterCell // lil copy of HBTwitterCell from Cephei
- - (instancetype)initWithStyle:(UITableViewCellStyle)style
- reuseIdentifier:(NSString *)reuseIdentifier
- specifier:(PSSpecifier *)specifier {
- self = [super initWithStyle:style
- reuseIdentifier:reuseIdentifier
- specifier:specifier];
-
- if (self) {
- UILabel *User = [[UILabel alloc] initWithFrame:CGRectMake(70, 15, 200, 20)];
- [User setText:specifier.properties[@"user"]];
- [User setFont:[User.font fontWithSize:15]];
-
- UILabel *Description =
- [[UILabel alloc] initWithFrame:CGRectMake(70, 35, 200, 20)];
- [Description setText:specifier.properties[@"description"]];
- [Description setFont:[Description.font fontWithSize:10]];
-
- NSBundle *bundle = [[NSBundle alloc]
- initWithPath:@"/Library/PreferenceBundles/kaiPrefs.bundle"];
-
- UIImage *profilePicture;
- profilePicture = [UIImage
- imageWithContentsOfFile:[bundle
- pathForResource:specifier
- .properties[@"image"]
- ofType:@"jpg"]];
- UIImageView *profilePictureView =
- [[UIImageView alloc] initWithImage:profilePicture];
- [profilePictureView.layer setMasksToBounds:YES];
- [profilePictureView.layer setCornerRadius:20];
- [profilePictureView setFrame:CGRectMake(15, 15, 40, 40)];
-
- [self addSubview:User];
- [self addSubview:Description];
- [self addSubview:profilePictureView];
- }
-
- return self;
- }
-
- @end
|