diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa361f8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ + +*.deb +.DS_Store diff --git a/DragonMake b/DragonMake new file mode 100644 index 0000000..b4ea722 --- /dev/null +++ b/DragonMake @@ -0,0 +1,10 @@ +--- +package_name: kai +install_command: sbreload + +kai: + type: tweak + logos_files: + - Kai.xm + frameworks: + - BatteryCenter diff --git a/KAIBattery.h b/KAIBattery.h new file mode 100644 index 0000000..8758a9f --- /dev/null +++ b/KAIBattery.h @@ -0,0 +1,29 @@ +#import +#import + +@interface _UIBatteryView : UIView +@property (nonatomic, assign) CGFloat chargePercent; +@property (nonatomic, assign) CGFloat bodyColorAlpha; +@property (nonatomic, assign) CGFloat pinColorAlpha; +@property (nonatomic, assign) BOOL showsPercentage; +@property (nonatomic, assign) BOOL saverModeActive; +@property (nonatomic, assign) BOOL showsInlineChargingIndicator; +@property (nonatomic, assign) NSInteger chargingState; +@end + +@interface BCBatteryDeviceController +@property (nonatomic, strong) NSArray *sortedDevices; +-(id)_sortedDevices; ++(id)sharedInstance; +@end + +@interface BCBatteryDevice : BCBatteryDeviceController +-(id)glyph; +@end + +@interface KAIBattery : UIView +@property (nonatomic, strong) NSArray *devices; +@property (nonatomic, assign) NSInteger number; +-(instancetype)initWithFrame:(CGRect)arg1; +-(void)updateBattery; +@end \ No newline at end of file diff --git a/KAIBattery.mm b/KAIBattery.mm new file mode 100644 index 0000000..64f7a77 --- /dev/null +++ b/KAIBattery.mm @@ -0,0 +1,99 @@ +#import "KAIBattery.h" + +@implementation KAIBattery + +-(instancetype)initWithFrame:(CGRect)arg1 { + self = [super initWithFrame:arg1]; + if (self) { + /*self.batteryLabel = [[UILabel alloc]initWithFrame:CGRectMake(25,-10,220,120)]; + [self.batteryLabel setFont:[UIFont systemFontOfSize:13]]; + [self.batteryLabel setTextColor:[UIColor whiteColor]]; + self.batteryLabel.lineBreakMode = NSLineBreakByWordWrapping; + self.batteryLabel.numberOfLines = 0;*/ + [self updateBattery]; + //[self addSubview:self.batteryLabel]; + } + return self; +} + +long long batteryPercentage; +long long lastPercentage; + +-(void)updateBattery { + self.number = 0; + NSArray* subViews = self.subviews; + for( UIView *view in subViews ) { + @try { + [view removeFromSuperview]; + } @catch (NSException *exception) { + //Panik + } + } + BCBatteryDeviceController *bcb = [BCBatteryDeviceController sharedInstance]; + NSArray *devices = MSHookIvar(bcb, "_sortedDevices"); + + for (BCBatteryDevice *device in devices) { + NSString *deviceName = MSHookIvar(device, "_name"); + double batteryPercentage = MSHookIvar(device, "_percentCharge"); + BOOL charging = MSHookIvar(device, "_charging"); + BOOL LPM = MSHookIvar(device, "_batterySaverModeActive"); + + float y; + if(charging) { + + UIVisualEffectView *blank = [[UIVisualEffectView alloc] initWithEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]]; + blank.frame = CGRectMake(0, 0 + y, self.frame.size.width, 80); + blank.layer.masksToBounds = YES; + blank.layer.cornerRadius = 18; + //[blank setBackgroundColor:[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1]]; + [self addSubview:blank]; + + NSString *labelText = [NSString stringWithFormat:@"%@", deviceName]; + + UILabel *label = [[UILabel alloc] init]; + [label setFont:[UIFont systemFontOfSize:16]]; + [label setTextColor:[UIColor whiteColor]]; + label.lineBreakMode = NSLineBreakByWordWrapping; + label.numberOfLines = 0; + [label setText:labelText]; + + [self addSubview:label]; + + _UIBatteryView *battery = [[_UIBatteryView alloc] init]; + battery.chargePercent = (batteryPercentage*0.01); + UILabel *percentLabel = [[UILabel alloc] init]; + battery.showsPercentage = NO; + [percentLabel setFont:[UIFont systemFontOfSize:14]]; + [percentLabel setTextColor:[UIColor whiteColor]]; + percentLabel.lineBreakMode = NSLineBreakByWordWrapping; + [percentLabel setTextAlignment:NSTextAlignmentRight]; + percentLabel.numberOfLines = 0; + [percentLabel setText:[NSString stringWithFormat:@"%ld%%", (long)((NSInteger) batteryPercentage)]]; + [self addSubview:percentLabel]; + if(charging) battery.chargingState = 1; + battery.showsInlineChargingIndicator = YES; + if(LPM) battery.saverModeActive = YES; + if(kCFCoreFoundationVersionNumber > 1600) { + [battery setBodyColorAlpha:1.0]; + [battery setPinColorAlpha:1.0]; + } + [self addSubview:battery]; + + UIImage *glyph = [device glyph]; + UIImageView *glyphView = [[UIImageView alloc] init]; + glyphView.contentMode = UIViewContentModeScaleAspectFit; + [glyphView setImage:glyph]; + [self addSubview:glyphView]; + + label.frame = CGRectMake(57.5,27.5 + y,275,25); + glyphView.frame = CGRectMake(12.5,18.5 + y,40,40); + battery.frame = CGRectMake(310,35 + y,20,10); + percentLabel.frame = CGRectMake(265,35 + y,36,12); + + y+=90; + self.number +=1; + } + } +} + +@end \ No newline at end of file diff --git a/Kai.plist b/Kai.plist new file mode 100644 index 0000000..10dc654 --- /dev/null +++ b/Kai.plist @@ -0,0 +1 @@ +{ Filter = { Bundles = ( "com.apple.springboard" ); }; } diff --git a/Kai.xm b/Kai.xm new file mode 100644 index 0000000..d70242b --- /dev/null +++ b/Kai.xm @@ -0,0 +1,150 @@ +#include +#import +#include +#import +#import + +#import "KAIBattery.mm" +BOOL setFrame = NO; +KAIBattery *batteryWidget; +CGRect original; + +/* +- (void)addObserver:(NSObject *)observer + forKeyPath:(NSString *)keyPath + options:(NSKeyValueObservingOptions)options + context:(void *)context*/ + + +@interface UIApplication (Kai) ++(id)sharedApplication; +-(BOOL)launchApplicationWithIdentifier:(id)arg1 suspended:(BOOL)arg2; +@end + +@interface CSMainPageView : UIView +@property (nonatomic, strong) KAIBattery *battery; +-(void)updateForPresentation:(id)arg1; +@end +/* +%hook BCBatterDeviceController + ++(id)sharedInstance { + [%orig addObserver:self forKeyPath:@"sortedDevices" options:NSKeyValueObservingOptionNew context:nil]; + return %orig; +} + +-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ + + if ([keyPath isEqualToString:@"sortedDevices"]) { + [[UIApplication sharedApplication] launchApplicationWithIdentifier:@"com.apple.weather" suspended:NO]; + } + + +} + +%end*/ + +%hook SBCoverSheetPrimarySlidingViewController + +-(void)viewWillAppear:(BOOL)arg1 { + %orig; + [batteryWidget updateBattery]; +} + +%end + + +%hook CSMainPageView +%property (nonatomic, strong) KAIBattery *battery; + +-(void)updateForPresentation:(id)arg1 { + %orig; + UIView *object = self; + if(!setFrame) { + original = self.frame; + + self.battery = [[KAIBattery alloc] initWithFrame:CGRectMake(8, 155, object.frame.size.width - 16, object.frame.size.height)]; + [self addSubview:self.battery]; + setFrame = YES; + batteryWidget = self.battery; + } + + object.frame = CGRectMake( + original.origin.x, + original.origin.y - (self.battery.number * 90), + original.size.width, + original.size.height + (self.battery.number * 90) + ); + + //[self.battery updateBattery]; +/* + NSArray* subViews = self.subviews; + for( UIView *view in subViews ) { + if([view isMemberOfClass:[objc_getClass("UILabel") class]] || [view isMemberOfClass:[objc_getClass("_UIBatteryView") class]] || [view isKindOfClass:[objc_getClass("UIImageView") class]]) { + @try { + [view removeFromSuperview]; + } @catch (NSException *exception) { + //Panik + } + } + } + + /*BCBatteryDeviceController *bcb = [BCBatteryDeviceController sharedInstance]; + NSArray *devices = MSHookIvar(bcb, "_sortedDevices"); + for (BCBatteryDevice *device in devices) { + NSString *deviceName = MSHookIvar(device, "_name"); + double batteryPercentage = MSHookIvar(device, "_percentCharge"); + BOOL charging = MSHookIvar(device, "_charging"); + BOOL LPM = MSHookIvar(device, "_batterySaverModeActive"); + if(charging) { + + NSString *labelText = [NSString stringWithFormat:@"%@", deviceName]; + + UILabel *label = [[UILabel alloc] init]; + [label setFont:[UIFont systemFontOfSize:18]]; + [label setTextColor:[UIColor whiteColor]]; + label.lineBreakMode = NSLineBreakByWordWrapping; + label.numberOfLines = 0; + [label setText:labelText]; + + [self addSubview:label]; + + _UIBatteryView *battery = [[_UIBatteryView alloc] init]; + battery.chargePercent = (batteryPercentage*0.01); + UILabel *percentLabel = [[UILabel alloc] init]; + //if(self.percentEnabled) { + // battery.showsPercentage = YES; + // } else { + battery.showsPercentage = NO; + [percentLabel setFont:[UIFont systemFontOfSize:14]]; + [percentLabel setTextColor:[UIColor whiteColor]]; + percentLabel.lineBreakMode = NSLineBreakByWordWrapping; + [percentLabel setTextAlignment:NSTextAlignmentRight]; + percentLabel.numberOfLines = 0; + [percentLabel setText:[NSString stringWithFormat:@"%ld%%", (long)((NSInteger) batteryPercentage)]]; + [self addSubview:percentLabel]; + //} + if(charging) battery.chargingState = 2; + if(LPM) battery.saverModeActive = YES; + if(kCFCoreFoundationVersionNumber > 1600) { + [battery setBodyColorAlpha:1.0]; + [battery setPinColorAlpha:1.0]; + } + [self addSubview:battery]; + + UIImage *glyph = [device glyph]; + UIImageView *glyphView = [[UIImageView alloc] init]; + //if(self.glyphsEnabled) { + glyphView.contentMode = UIViewContentModeScaleAspectFit; + [glyphView setImage:glyph]; + [self addSubview:glyphView]; + //} + + label.frame = CGRectMake(10,20,275,25); + glyphView.frame = CGRectMake(27,25,17,15); + battery.frame = CGRectMake(325,25,20,10); + percentLabel.frame = CGRectMake(285,25,36,12); + } + }*/ +} +%end \ No newline at end of file diff --git a/backup.mm b/backup.mm new file mode 100644 index 0000000..6446372 --- /dev/null +++ b/backup.mm @@ -0,0 +1,91 @@ +#import "KAIBattery.h" + +@implementation KAIBattery + +-(instancetype)initWithFrame:(CGRect)arg1 { + self = [super initWithFrame:arg1]; + if (self) { + /*self.batteryLabel = [[UILabel alloc]initWithFrame:CGRectMake(25,-10,220,120)]; + [self.batteryLabel setFont:[UIFont systemFontOfSize:13]]; + [self.batteryLabel setTextColor:[UIColor whiteColor]]; + self.batteryLabel.lineBreakMode = NSLineBreakByWordWrapping; + self.batteryLabel.numberOfLines = 0;*/ + [self updateBattery]; + //[self addSubview:self.batteryLabel]; + } + return self; +} + +long long batteryPercentage; +long long lastPercentage; + +-(void)updateBattery { + NSArray* subViews = self.subviews; + for( UIView *view in subViews ) { + @try { + [view removeFromSuperview]; + } @catch (NSException *exception) { + //Panik + } + BCBatteryDeviceController *bcb = [BCBatteryDeviceController sharedInstance]; + NSArray *devices = MSHookIvar(bcb, "_sortedDevices"); + + for (BCBatteryDevice *device in devices) { + NSString *deviceName = MSHookIvar(device, "_name"); + double batteryPercentage = MSHookIvar(device, "_percentCharge"); + BOOL charging = MSHookIvar(device, "_charging"); + BOOL LPM = MSHookIvar(device, "_batterySaverModeActive"); + + NSString *labelText = [NSString stringWithFormat:@"%@", deviceName]; + + UILabel *label = [[UILabel alloc] init]; + if([devices count]>=4) { + [label setFont:[UIFont systemFontOfSize:19]]; + } + [label setTextColor:[UIColor whiteColor]]; + label.lineBreakMode = NSLineBreakByWordWrapping; + label.numberOfLines = 0; + [label setText:labelText]; + + [self addSubview:label]; + + _UIBatteryView *battery = [[_UIBatteryView alloc] init]; + battery.chargePercent = (batteryPercentage*0.01); + UILabel *percentLabel = [[UILabel alloc] init]; + battery.showsPercentage = NO; + [percentLabel setFont:[UIFont systemFontOfSize:14]]; + [percentLabel setTextColor:[UIColor whiteColor]]; + percentLabel.lineBreakMode = NSLineBreakByWordWrapping; + [percentLabel setTextAlignment:NSTextAlignmentRight]; + percentLabel.numberOfLines = 0; + [percentLabel setText:[NSString stringWithFormat:@"%ld%%", (long)((NSInteger) batteryPercentage)]]; + [self addSubview:percentLabel]; + if(charging) battery.chargingState = 1; + if(LPM) battery.saverModeActive = YES; + if(kCFCoreFoundationVersionNumber > 1600) { + [battery setBodyColorAlpha:1.0]; + [battery setPinColorAlpha:1.0]; + } + [self addSubview:battery]; + + UIImage *glyph = [device glyph]; + UIImageView *glyphView = [[UIImageView alloc] init]; + glyphView.contentMode = UIViewContentModeScaleAspectFit; + [glyphView setImage:glyph]; + [self addSubview:glyphView]; + + label.frame = CGRectMake(57.5,27.5,275,25); + glyphView.frame = CGRectMake(12.5,18.5,40,40); + battery.frame = CGRectMake(310,35,20,10); + percentLabel.frame = CGRectMake(265,35,36,12); + } + } +} + +/* +label.frame = CGRectMake(57.5,27.5,275,25); + glyphView.frame = CGRectMake(12.5,18.5,40,40); + battery.frame = CGRectMake(310,35,20,10); + percentLabel.frame = CGRectMake(265,35,36,12);*/ + +@end \ No newline at end of file diff --git a/control b/control new file mode 100644 index 0000000..1bdadc4 --- /dev/null +++ b/control @@ -0,0 +1,9 @@ +Package: com.burritoz.kai +Name: Kai +Version: 0.0.1 +Architecture: iphoneos-arm +Description: An awesome MobileSubstrate tweak! +Maintainer: burrit0z +Author: burrit0z +Section: Tweaks +Depends: mobilesubstrate (>= 0.9.5000)