From ef4eddb8b799cc234914082d0da8f9e025d219aa Mon Sep 17 00:00:00 2001 From: Burrit0z Date: Sat, 23 May 2020 21:17:22 -0400 Subject: [PATCH] soon --- KAIBatteryCell.h | 3 + KAIBatteryStack.mm | 146 +++++++++++++++++++-------------------------- Kai.xm | 41 ++++--------- 3 files changed, 78 insertions(+), 112 deletions(-) diff --git a/KAIBatteryCell.h b/KAIBatteryCell.h index f2cb2f6..d8219e5 100644 --- a/KAIBatteryCell.h +++ b/KAIBatteryCell.h @@ -31,6 +31,7 @@ @property (nonatomic, assign) BOOL batterySaverModeActive; @property (nonatomic, strong) NSString *identifier; -(id)glyph; +-(id)kaiCellForDevice; @end @interface KAIBatteryCell : UIView @@ -39,6 +40,8 @@ @property (nonatomic, strong) UILabel *percentLabel; @property (nonatomic, strong) UIImageView *glyphView; @property (nonatomic, strong) _UIBatteryView *battery; +@property (nonatomic, strong) NSLayoutConstraint *width; +@property (nonatomic, strong) NSLayoutConstraint *height; -(instancetype)initWithFrame:(CGRect)arg1 device:(BCBatteryDevice *)device; -(void)updateInfo; +(instancetype)cellForDeviceIfExists:(BCBatteryDevice *)device frameToCreateNew:(CGRect)arg2; diff --git a/KAIBatteryStack.mm b/KAIBatteryStack.mm index c6763be..8f75cc9 100644 --- a/KAIBatteryStack.mm +++ b/KAIBatteryStack.mm @@ -25,7 +25,6 @@ long long batteryPercentage; long long lastPercentage; -(void)updateBattery { - /* self.spacing = spacing; dispatch_async(dispatch_get_main_queue(), ^{ //NSLog(@"kai: battery platter called to update"); @@ -33,87 +32,72 @@ long long lastPercentage; //NSLog(@"kai: IS Updating"); self.isUpdating = YES; //self.number = 0; - float y = 0; + //float y = 0; BCBatteryDeviceController *bcb = [BCBatteryDeviceController sharedInstance]; - NSArray *devices = MSHookIvar(bcb, "_sortedDevices"); - if([devices count]!=0) { - //NSLog(@"kai: info is good, will proceed"); + NSArray *devices = MSHookIvar(bcb, "_sortedDevices"); - float ytwo = 0; - - for(KAIBatteryCell *cell in self.subviews) { - if([cell respondsToSelector:@selector(updateInfo)] && ![devices containsObject:cell.device]) { //to confirm is a cell and battery device does not exist - //dispatch_async(dispatch_get_main_queue(), ^{ - [UIView animateWithDuration:0.2 animations:^{ - cell.alpha = 0; - } completion:^(BOOL finished){ - [cell removeFromSuperview]; - }]; - //}); - } else if([cell respondsToSelector:@selector(updateInfo)]) { - cell.frame = CGRectMake(0, y, self.frame.size.width, bannerHeight); - [cell updateInfo]; - ytwo+= bannerHeight + spacing; - } - } - - - 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"); - - BOOL shouldAdd = NO; - - if(showAll) { - shouldAdd = YES; - //NSLog(@"Kai: SHOULD ADD"); - } else if(!showAll && charging) { - shouldAdd = YES; - //NSLog(@"Kai: SHOULD ADD"); - } - - KAIBatteryCell *cell = [KAIBatteryCell cellForDeviceIfExists:device frameToCreateNew:CGRectMake(0, y, self.frame.size.width, bannerHeight)]; - cell.frame = CGRectMake(0, y, self.frame.size.width, bannerHeight); - - if(cell) { - cell.device = device; - //cell.frame = cell.frame = CGRectMake(0, y, self.frame.size.width, bannerHeight); //bro im like creating my own stack view - //[cell updateInfo]; - } - - if(shouldAdd && [deviceName length]!=0) { - if(![self.subviews containsObject:cell]) { - cell.frame = CGRectMake(0, y, self.frame.size.width, bannerHeight); - cell.alpha = 0; - [self addSubview:cell]; - [UIView animateWithDuration:0.3 animations:^{ - cell.alpha = 1; - }]; - } - y+=bannerHeight + spacing; - - } else if(!shouldAdd) { - //dispatch_async(dispatch_get_main_queue(), ^{ - [UIView animateWithDuration:0.2 animations:^{ - cell.alpha = 0; - } completion:^(BOOL finished){ - [cell removeFromSuperview]; - }]; - //}); - } - } - //[self.heightAnchor constraintEqualToConstant:(self.number * 85)].active = YES; - self.number = [self.subviews count]; - //[(CSAdjunctListView *)self.superview.superview KaiUpdate]; - } - self.isUpdating = NO; - //NSLog(@"kai: finished update"); - //[(CSAdjunctListView *)self.superview.superview KaiUpdate]; - [(CSAdjunctListView *)self.superview.superview performSelector:@selector(KaiUpdate) withObject:(CSAdjunctListView *)self.superview.superview afterDelay:0.2]; + NSLog(@"kai: devices are %@", devices); + + for(KAIBatteryCell *cell in self.subviews) { + //BCBatteryDevice *device = cell.device; + [cell updateInfo]; } - });*/ + + for (BCBatteryDevice *device in devices) { + KAIBatteryCell *cell = [device kaiCellForDevice]; + + [cell updateInfo]; + BOOL shouldAdd = NO; + + if(showAll) { + shouldAdd = YES; + } else if(!showAll && device.charging) { + shouldAdd = YES; + } + + if(![self.subviews containsObject:cell] && shouldAdd && [devices containsObject:device]) { + [cell setFrame:CGRectMake(0,0,self.frame.size.width, bannerHeight + spacing)]; + [self addArrangedSubview:cell]; + } else { + [self removeArrangedSubview:cell]; + } + + if(!cell.height) { + + cell.height.active = NO; + cell.height = [cell.heightAnchor constraintEqualToConstant:(bannerHeight + spacing)]; + cell.height.active = YES; + + } else { + int height = (bannerHeight + spacing); + cell.height.constant = height; + + UIStackView *s = self; + s.frame = CGRectMake(s.frame.origin.x, s.frame.origin.y, s.frame.size.width, (s.frame.size.height - 1)); + } + + if(!cell.width) { + + cell.width.active = NO; + cell.width = [cell.widthAnchor constraintEqualToConstant:(self.frame.size.width)]; + cell.width.active = YES; + + } else { + int width = self.frame.size.width; + cell.width.constant = width; + + UIStackView *s = self; + s.frame = CGRectMake(s.frame.origin.x, s.frame.origin.y, s.frame.size.width, (s.frame.size.height - 1)); + } + + } + self.number = [self.subviews count]; + } + self.isUpdating = NO; + //NSLog(@"kai: finished update"); + //[(CSAdjunctListView *)self.superview.superview KaiUpdate]; + [(CSAdjunctListView *)self.superview.superview performSelector:@selector(KaiUpdate) withObject:(CSAdjunctListView *)self.superview.superview afterDelay:0.2]; + }); self.number = [self.subviews count]; } @@ -126,10 +110,6 @@ long long lastPercentage; } } [KAIBatteryCell resetArray]; - - //self.displayingDevices = [[NSMutableArray alloc] init]; - - //addedCells = nil; [self updateBattery]; } diff --git a/Kai.xm b/Kai.xm index a99a8e6..0c7db0a 100644 --- a/Kai.xm +++ b/Kai.xm @@ -38,6 +38,7 @@ //add kai to the stack view [arg1 addArrangedSubview:battery]; } + [battery updateBattery]; //send the adjusted stackview as arg1 %orig(arg1); @@ -61,9 +62,9 @@ } else { int height = (battery.number * (bannerHeight + spacing)); //big brain math - battery.heightConstraint.active = NO; //deactivation + //battery.heightConstraint.active = NO; //deactivation battery.heightConstraint.constant = height; - battery.heightConstraint.active = YES; //forcing reactivation + //battery.heightConstraint.active = YES; //forcing reactivation UIStackView *s = [self stackView]; s.frame = CGRectMake(s.frame.origin.x, s.frame.origin.y, s.frame.size.width, (s.frame.size.height - 1)); @@ -110,41 +111,23 @@ } -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ - @try { - if([self isMemberOfClass:[objc_getClass("BCBatteryDevice") class]] && [self respondsToSelector:@selector(_kaiCell)]) { - dispatch_async(dispatch_get_main_queue(), ^{ - - if(self && self.kaiCell == nil) { - self.kaiCell = [[KAIBatteryCell alloc] initWithFrame:CGRectMake(0,0,[KAIBatteryStack sharedInstance].frame.size.width,0) device:self]; } - ((KAIBatteryCell *)self.kaiCell).translatesAutoresizingMaskIntoConstraints = NO; - [((KAIBatteryCell *)self.kaiCell).heightAnchor constraintEqualToConstant:bannerHeight + spacing].active = YES; + if([self isMemberOfClass:[objc_getClass("BCBatteryDevice") class]] && [self respondsToSelector:@selector(_kaiCell)] && object == self && ([keyPath isEqualToString:@"charging"] || [keyPath isEqualToString:@"percentCharge"] || [keyPath isEqualToString:@"batterySaverModeActive"])) { //sends the noti to update battery info [[NSNotificationCenter defaultCenter] postNotificationName:@"KaiInfoChanged" object:nil userInfo:nil]; - [(KAIBatteryCell *)self.kaiCell updateInfo]; - - BOOL shouldAdd = NO; - - if(showAll) { - shouldAdd = YES; - } else if(!showAll && self.charging) { - shouldAdd = YES; - } - - if(![[KAIBatteryStack sharedInstance].subviews containsObject:self.kaiCell] && shouldAdd) { - [[KAIBatteryStack sharedInstance] addArrangedSubview:self.kaiCell]; - } else if([[KAIBatteryStack sharedInstance].subviews containsObject:self.kaiCell] && !shouldAdd) { - [[KAIBatteryStack sharedInstance] removeArrangedSubview:self.kaiCell]; - } - - }); } - } @catch (NSException *exc) {} } %new --(id)_kaiCell { +-(id)kaiCellForDevice { + if(self && self.kaiCell == nil) { + self.kaiCell = [[KAIBatteryCell alloc] initWithFrame:CGRectMake(0,0,[KAIBatteryStack sharedInstance].frame.size.width,0) device:self]; } + ((KAIBatteryCell *)self.kaiCell).translatesAutoresizingMaskIntoConstraints = NO; + [((KAIBatteryCell *)self.kaiCell).heightAnchor constraintEqualToConstant:bannerHeight + spacing].active = YES; + + [(KAIBatteryCell *)self.kaiCell updateInfo]; + return self.kaiCell; } %end