diff --git a/KAIBattery.mm b/KAIBattery.mm index 874764c..333cb4b 100644 --- a/KAIBattery.mm +++ b/KAIBattery.mm @@ -1,7 +1,7 @@ #import "KAIBattery.h" KAIBattery *instance; -NSMutableArray *addedCells = [[NSMutableArray alloc] init]; +//NSMutableArray *showingCells = [[NSMutableArray alloc] init]; @implementation KAIBattery @@ -21,7 +21,7 @@ long long lastPercentage; -(void)updateBattery { dispatch_async(dispatch_get_main_queue(), ^{ - NSLog(@"kai: battery platter called to update"); + //NSLog(@"kai: battery platter called to update"); if(!self.isUpdating) { self.isUpdating = YES; self.number = 0; @@ -29,30 +29,15 @@ long long lastPercentage; BCBatteryDeviceController *bcb = [BCBatteryDeviceController sharedInstance]; NSArray *devices = MSHookIvar(bcb, "_sortedDevices"); - /*for( UIView *view in self.subviews ) { - @try { - [view removeFromSuperview]; - } @catch (NSException *exception) { - //Panik - } - }*/ - - for(KAIBatteryCell *cell in addedCells) { - if(cell.device!=nil) { - NSString *cellName = MSHookIvar(cell.device, "_name"); - if(![addedCells containsObject:cellName]) { - cell.device = nil; - [cell removeFromSuperview]; - [self.displayingDevices removeObject:cell.label.text]; //lmaoo - } else { - [cell updateInfo]; - } - } else { - //[cell removeFromSuperview]; - //[addedCells removeObject:cell]; + 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 + [cell removeFromSuperview]; + } else if([cell respondsToSelector:@selector(updateInfo)]) { + [cell updateInfo]; } } + for (BCBatteryDevice *device in devices) { NSString *deviceName = MSHookIvar(device, "_name"); //double batteryPercentage = MSHookIvar(device, "_percentCharge"); @@ -63,41 +48,23 @@ long long lastPercentage; if(showAll) { shouldAdd = YES; - NSLog(@"Kai: SHOULD ADD"); + //NSLog(@"Kai: SHOULD ADD"); } else if(!showAll && charging) { shouldAdd = YES; - NSLog(@"Kai: SHOULD ADD"); + //NSLog(@"Kai: SHOULD ADD"); } - KAIBatteryCell *cell = [KAIBatteryCell cellForDeviceIfExists:device]; - - /* - @property (nonatomic, assign) BOOL lastChargingState; - @property (nonatomic, assign) BOOL lastLPM; - @property (nonatomic, assign) double lastPercent; - */ + KAIBatteryCell *cell = [KAIBatteryCell cellForDeviceIfExists:device frameToCreateNew:CGRectMake(0, y, self.frame.size.width, bannerHeight)]; if(shouldAdd && [deviceName length]!=0) { - - if(cell==nil && ![self.displayingDevices containsObject:deviceName]) { - KAIBatteryCell *newCell = [[KAIBatteryCell alloc] initWithFrame:CGRectMake(0, y, self.frame.size.width, bannerHeight) device:device]; - [self addSubview:newCell]; - [self.displayingDevices addObject:deviceName]; - [addedCells addObject:newCell]; - //y+=bannerHeight + spacing; + if(![self.subviews containsObject:cell]) { + cell.frame = CGRectMake(0, y, self.frame.size.width, bannerHeight); + [self addSubview:cell]; } - //self.number +=1; y+=bannerHeight + spacing; } else if(!shouldAdd) { - - if([self.displayingDevices containsObject:deviceName]) { - cell.device = nil; - [cell removeFromSuperview]; - [self.displayingDevices removeObject:deviceName]; - [addedCells removeObject:cell]; - } - + [cell removeFromSuperview]; } } //[self.heightAnchor constraintEqualToConstant:(self.number * 85)].active = YES; @@ -116,9 +83,9 @@ long long lastPercentage; } } - self.displayingDevices = [[NSMutableArray alloc] init]; + //self.displayingDevices = [[NSMutableArray alloc] init]; - addedCells = nil; + //addedCells = nil; [self updateBattery]; } diff --git a/KAIBatteryCell.h b/KAIBatteryCell.h index 3248217..88a317b 100644 --- a/KAIBatteryCell.h +++ b/KAIBatteryCell.h @@ -24,6 +24,7 @@ @end @interface BCBatteryDevice : NSObject +@property (nonatomic, strong) NSString *accessoryIdentifier; -(id)glyph; @end @@ -35,5 +36,5 @@ @property (nonatomic, strong) _UIBatteryView *battery; -(instancetype)initWithFrame:(CGRect)arg1 device:(BCBatteryDevice *)device; -(void)updateInfo; -+(instancetype)cellForDeviceIfExists:(BCBatteryDevice *)device; ++(instancetype)cellForDeviceIfExists:(BCBatteryDevice *)device frameToCreateNew:(CGRect)arg2; @end \ No newline at end of file diff --git a/KAIBatteryCell.mm b/KAIBatteryCell.mm index 566bca1..81c1452 100644 --- a/KAIBatteryCell.mm +++ b/KAIBatteryCell.mm @@ -120,7 +120,7 @@ NSMutableArray *deviceInstances = [[NSMutableArray alloc] init]; } -(void)updateInfo { - NSLog(@"kai: updating cell info"); + //NSLog(@"kai: updating cell info"); NSString *deviceName = MSHookIvar(self.device, "_name"); double batteryPercentage = MSHookIvar(self.device, "_percentCharge"); @@ -142,29 +142,30 @@ NSMutableArray *deviceInstances = [[NSMutableArray alloc] init]; [self.glyphView setImage:[self.device glyph]]; - [deviceInstances addObject:self]; - } --(void)removeFromSuperview { - [super removeFromSuperview]; - [deviceInstances removeObject:self]; -} - -+(instancetype)cellForDeviceIfExists:(BCBatteryDevice *)device { ++(instancetype)cellForDeviceIfExists:(BCBatteryDevice *)device frameToCreateNew:(CGRect)arg2 { KAIBatteryCell *foundCell; - NSString *deviceName = MSHookIvar(device, "_name"); + //NSString *deviceName = MSHookIvar(device, "_name"); for(KAIBatteryCell *cell in deviceInstances) { - if(cell.label.text == deviceName) { + if(cell.device == device || [cell.device.accessoryIdentifier isEqualToString:device.accessoryIdentifier]) { foundCell = cell; break; } } + if(foundCell == nil) { + foundCell = [[KAIBatteryCell alloc] initWithFrame:arg2 device:device]; + } + return foundCell; //return deviceInstances; } ++(id)array { + return deviceInstances; +} + @end \ No newline at end of file diff --git a/Kai.xm b/Kai.xm index dffeafc..55bcf57 100644 --- a/Kai.xm +++ b/Kai.xm @@ -80,7 +80,7 @@ isUpdating = YES; - NSLog(@"kai: kai info will update"); + //NSLog(@"kai: kai info will update"); [[KAIBattery sharedInstance] updateBattery]; [self KaiUpdate];