@@ -50,4 +50,11 @@ | |||
1.3.1: | |||
- Fix very unoptimized code, made it more-ish optimized | |||
- Below music option now moves kai just below the media controls, and not to the very bottom. | |||
- Fixed kai going below Axon with below music player option on | |||
- Fixed kai going below Axon with below music player option on | |||
1.4.0: | |||
- Adds iOS 14 support | |||
1.5.0: | |||
- Replace the code that handles hiding kai when media plays | |||
- Fix edge cases where battery info would not update completely until an update was called for again |
@@ -17,9 +17,9 @@ | |||
if (bannerStyle == 1) { | |||
if (kCFCoreFoundationVersionNumber > 1600 && kCFCoreFoundationVersionNumber < 1740) { | |||
blur = [[[objc_getClass("MTMaterialView") class] alloc] _initWithRecipe:1 configuration:1 initialWeighting:1 scaleAdjustment:nil]; | |||
} else if (kCFCoreFoundationVersionNumber < 1600) { //ios 12 | |||
} else if (kCFCoreFoundationVersionNumber < 1600) { // ios 12 | |||
blur = [[UIVisualEffectView alloc] initWithEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]]; | |||
} else if(kCFCoreFoundationVersionNumber >= 1740) { //ios 14 :fr: | |||
} else if(kCFCoreFoundationVersionNumber >= 1740) { // ios 14 :fr: | |||
blur = [[UIVisualEffectView alloc] initWithEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleRegular]]; | |||
} | |||
} else if (bannerStyle == 2) { | |||
@@ -92,13 +92,13 @@ | |||
[self addSubview:self.battery]; | |||
[self addSubview:self.glyphView]; | |||
// Blur Platter | |||
// Blur Platter | |||
blurPlatter.translatesAutoresizingMaskIntoConstraints = NO; | |||
if (bannerAlign == 2) { //center | |||
if (bannerAlign == 2) { // center | |||
[blurPlatter.centerXAnchor constraintEqualToAnchor:self.centerXAnchor].active = YES; | |||
} else if (bannerAlign == 1) { //left | |||
} else if (bannerAlign == 1) { // left | |||
[blurPlatter.leftAnchor constraintEqualToAnchor:self.leftAnchor].active = YES; | |||
} else if (bannerAlign == 3) { //right | |||
} else if (bannerAlign == 3) { // right | |||
[blurPlatter.rightAnchor constraintEqualToAnchor:self.rightAnchor].active = YES; | |||
} | |||
[NSLayoutConstraint activateConstraints:@[ | |||
@@ -109,7 +109,7 @@ | |||
[self.widthAnchor constraintEqualToAnchor:blurPlatter.widthAnchor].active = YES; | |||
// Blur | |||
// Blur | |||
blur.translatesAutoresizingMaskIntoConstraints = NO; | |||
[NSLayoutConstraint activateConstraints:@[ | |||
[blur.centerXAnchor constraintEqualToAnchor:blurPlatter.centerXAnchor], | |||
@@ -118,7 +118,7 @@ | |||
[blur.heightAnchor constraintEqualToAnchor:blurPlatter.heightAnchor] | |||
]]; | |||
// Percent label | |||
// Percent label | |||
self.percentLabel.translatesAutoresizingMaskIntoConstraints = NO; | |||
[NSLayoutConstraint activateConstraints:@[ | |||
[self.percentLabel.centerYAnchor constraintEqualToAnchor:blurPlatter.centerYAnchor], | |||
@@ -126,7 +126,7 @@ | |||
[self.percentLabel.heightAnchor constraintEqualToConstant:12] | |||
]]; | |||
// Label | |||
// Label | |||
self.label.translatesAutoresizingMaskIntoConstraints = NO; | |||
[NSLayoutConstraint activateConstraints:@[ | |||
[self.label.leftAnchor constraintEqualToAnchor:self.glyphView.rightAnchor | |||
@@ -140,7 +140,7 @@ | |||
[self.label.rightAnchor constraintEqualToAnchor:self.label.leftAnchor].active = YES; | |||
} | |||
// Glyph View | |||
// Glyph View | |||
self.glyphView.translatesAutoresizingMaskIntoConstraints = NO; | |||
[NSLayoutConstraint activateConstraints:@[ | |||
[self.glyphView.leftAnchor constraintEqualToAnchor:blurPlatter.leftAnchor | |||
@@ -150,7 +150,7 @@ | |||
[self.glyphView.heightAnchor constraintEqualToConstant:glyphSize] | |||
]]; | |||
// Battery | |||
// Battery | |||
self.battery.translatesAutoresizingMaskIntoConstraints = NO; | |||
if (!hideBatteryIcon) { | |||
[self.battery.widthAnchor constraintEqualToConstant:20].active = YES; | |||
@@ -231,4 +231,4 @@ | |||
[super removeFromSuperview]; | |||
} | |||
@end | |||
@end |
@@ -29,7 +29,7 @@ NSMutableArray *cellsForDeviceNames = [[NSMutableArray alloc] init]; | |||
[self setContentSize:self.stack.frame.size]; | |||
[self resetOffset]; | |||
//Add noti observer | |||
// Add noti observer | |||
[[NSNotificationCenter defaultCenter] addObserver:self | |||
selector:@selector(resetOffset) | |||
name:@"KaiResetOffset" | |||
@@ -41,11 +41,11 @@ NSMutableArray *cellsForDeviceNames = [[NSMutableArray alloc] init]; | |||
[self.stackHolder.centerYAnchor constraintEqualToAnchor:self.centerYAnchor].active = YES; | |||
if (kaiAlign == 0) { | |||
if (bannerAlign == 2) { //center | |||
if (bannerAlign == 2) { // center | |||
self.subviewAligner = [self.stack.centerXAnchor constraintEqualToAnchor:self.stackHolder.centerXAnchor constant:horizontalOffset]; | |||
} else if (bannerAlign == 1) { //left | |||
} else if (bannerAlign == 1) { // left | |||
self.subviewAligner = [self.stack.leftAnchor constraintEqualToAnchor:self.stackHolder.leftAnchor constant:horizontalOffset]; | |||
} else if (bannerAlign == 3) { //right | |||
} else if (bannerAlign == 3) { // right | |||
self.subviewAligner = [self.stack.rightAnchor constraintEqualToAnchor:self.stackHolder.rightAnchor constant:horizontalOffset]; | |||
} | |||
@@ -57,39 +57,33 @@ NSMutableArray *cellsForDeviceNames = [[NSMutableArray alloc] init]; | |||
return self; | |||
} | |||
- (void)resetOffset { | |||
- (void)resetOffset { // holy fucking shit i just read this method, what is this garbage???? | |||
if (kaiAlign != 0 && reAlignSelf) { | |||
[UIView animateWithDuration:0.2 | |||
animations:^{ | |||
if (bannerAlign == 1) { //left | |||
[self setContentOffset:CGPointMake(0 + horizontalOffset, self.contentOffset.y)]; | |||
self.contentInset = UIEdgeInsetsMake(0, 0, 0, 0); | |||
} else if (bannerAlign == 2) { //center | |||
[self setContentOffset:CGPointMake(((-1 * self.stackHolder.frame.size.width) / 2) + (self.stack.frame.size.width / 2) + horizontalOffset, self.contentOffset.y)]; | |||
CGFloat top = 0, left = 0; | |||
if (self.contentSize.width < self.bounds.size.width) { | |||
left = (self.bounds.size.width - self.contentSize.width) * 0.5f; | |||
} | |||
if (self.contentSize.height < self.bounds.size.height) { | |||
top = (self.bounds.size.height - self.contentSize.height) * 0.5f; | |||
} | |||
self.contentInset = UIEdgeInsetsMake(top, left, top, left); | |||
} else if (bannerAlign == 3) { //right | |||
[self setContentOffset:CGPointMake((-1 * self.stackHolder.frame.size.width) + self.stack.frame.size.width + horizontalOffset, self.contentOffset.y)]; | |||
CGFloat top = 0, left = 0; | |||
if (self.contentSize.width < self.bounds.size.width) { | |||
left = (self.bounds.size.width - self.contentSize.width); | |||
} | |||
if (self.contentSize.height < self.bounds.size.height) { | |||
top = (self.bounds.size.height - self.contentSize.height); | |||
} | |||
self.contentInset = UIEdgeInsetsMake(top, left, top, left); | |||
} | |||
}]; | |||
[UIView animateWithDuration:0.2 animations:^{ | |||
if (bannerAlign == 1) { // left | |||
[self setContentOffset:CGPointMake(0 + horizontalOffset, self.contentOffset.y)]; | |||
self.contentInset = UIEdgeInsetsMake(0, 0, 0, 0); | |||
} else if (bannerAlign == 2) { // center | |||
[self setContentOffset:CGPointMake(((-1 * self.stackHolder.frame.size.width) / 2) + (self.stack.frame.size.width / 2) + horizontalOffset, self.contentOffset.y)]; | |||
CGFloat top = 0, left = 0; | |||
if (self.contentSize.width < self.bounds.size.width) left = (self.bounds.size.width - self.contentSize.width) * 0.5f; | |||
if (self.contentSize.height < self.bounds.size.height) top = (self.bounds.size.height - self.contentSize.height) * 0.5f; | |||
self.contentInset = UIEdgeInsetsMake(top, left, top, left); | |||
} else if (bannerAlign == 3) { // right | |||
[self setContentOffset:CGPointMake((-1 * self.stackHolder.frame.size.width) + self.stack.frame.size.width + horizontalOffset, self.contentOffset.y)]; | |||
CGFloat top = 0, left = 0; | |||
if(self.contentSize.width < self.bounds.size.width) left = (self.bounds.size.width - self.contentSize.width); | |||
if(self.contentSize.height < self.bounds.size.height) top = (self.bounds.size.height - self.contentSize.height); | |||
self.contentInset = UIEdgeInsetsMake(top, left, top, left); | |||
} | |||
}]; | |||
} | |||
} | |||
@@ -98,6 +92,11 @@ NSMutableArray *cellsForDeviceNames = [[NSMutableArray alloc] init]; | |||
} | |||
- (void)updateBattery { | |||
if(self.isUpdating == YES) { | |||
self.queued = YES; | |||
return; | |||
} | |||
dispatch_async(dispatch_get_main_queue(), ^{ | |||
BCBatteryDeviceController *bcb = [BCBatteryDeviceController sharedInstance]; | |||
NSArray *devices = [bcb connectedDevices]; | |||
@@ -110,7 +109,6 @@ NSMutableArray *cellsForDeviceNames = [[NSMutableArray alloc] init]; | |||
} | |||
if (!self.isUpdating && self.oldCountOfDevices != 0 && ([devices count] + 1 == self.oldCountOfDevices || [devices count] - 1 == self.oldCountOfDevices || [devices count] == self.oldCountOfDevices)) { | |||
//if(!self.isUpdating) { | |||
self.isUpdating = YES; | |||
@@ -193,7 +191,7 @@ NSMutableArray *cellsForDeviceNames = [[NSMutableArray alloc] init]; | |||
} | |||
for (KAIBatteryCell *cell in self.stack.subviews) { | |||
if (![devices containsObject:cell.device] || cell.device == nil) { //not existing, remove | |||
if (![devices containsObject:cell.device] || cell.device == nil) { // not existing, remove | |||
NSString *deviceName = cell.label.text; | |||
[UIView animateWithDuration:0.3 | |||
animations:^{ | |||
@@ -209,12 +207,11 @@ NSMutableArray *cellsForDeviceNames = [[NSMutableArray alloc] init]; | |||
} | |||
} | |||
// isUpdating is set to NO in this block | |||
// adds a cooldown, essentially | |||
queueTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(dispatchQueue) userInfo:nil repeats:NO]; | |||
//self.isUpdating = NO; | |||
} else if (self.isUpdating) { | |||
self.queued = YES; | |||
} | |||
} | |||
self.oldCountOfDevices = [devices count]; | |||
@@ -230,7 +227,7 @@ NSMutableArray *cellsForDeviceNames = [[NSMutableArray alloc] init]; | |||
} | |||
- (void)setContentOffset:(CGPoint)arg1 { | |||
[self setContentSize:self.stack.frame.size]; //sometimes the view gets "stuck", this fixes it | |||
[self setContentSize:self.stack.frame.size]; // sometimes the view gets "stuck", this fixes it | |||
[super setContentOffset:CGPointMake(arg1.x, 0)]; | |||
} | |||
@@ -244,7 +241,7 @@ NSMutableArray *cellsForDeviceNames = [[NSMutableArray alloc] init]; | |||
[self removeFromSuperview]; | |||
} else if (self.number != 0 && self.superview == nil && shouldBeAdded == YES) { | |||
[[[[objc_getClass("CSAdjunctListView") class] sharedListViewForKai] stackView] addArrangedSubview:self]; | |||
//[self performSelector:@selector(calculateHeight) withObject:self afterDelay:0.1]; | |||
// [self performSelector:@selector(calculateHeight) withObject:self afterDelay:0.1]; | |||
} | |||
[UIView animateWithDuration:0.3 | |||
@@ -270,7 +267,7 @@ NSMutableArray *cellsForDeviceNames = [[NSMutableArray alloc] init]; | |||
int height = (self.number * (bannerHeight + spacing)); | |||
int extra = extraPaddingAfter ? spacing : 0; | |||
if (kaiAlign == 0) { | |||
//self.stack.widthConstraint.constant = bannerWidthFactor; | |||
// self.stack.widthConstraint.constant = bannerWidthFactor; | |||
} else { | |||
height = bannerHeight + spacing; | |||
} | |||
@@ -282,11 +279,11 @@ NSMutableArray *cellsForDeviceNames = [[NSMutableArray alloc] init]; | |||
} | |||
self.heightConstraint.constant = height; | |||
self.stack.heightConstraint.constant = height - extra; //minus extra because it will stretch cell spacing otherwise | |||
self.stack.heightConstraint.constant = height - extra; // minus extra because it will stretch cell spacing otherwise | |||
UIStackView *s = (UIStackView *)(self.superview); | |||
s.frame = CGRectMake(s.frame.origin.x, s.frame.origin.y, s.frame.size.width, (s.frame.size.height - 1)); | |||
//literally does nothing but makes the stack view lay itself out (doesnt adjust frame because translatesAutoreszingMaskIntoConstraints = NO on stack views) | |||
// literally does nothing but makes the stack view lay itself out (doesnt adjust frame because translatesAutoreszingMaskIntoConstraints = NO on stack views) | |||
} | |||
[self setContentSize:self.stack.frame.size]; | |||
@@ -306,7 +303,7 @@ NSMutableArray *cellsForDeviceNames = [[NSMutableArray alloc] init]; | |||
@try { | |||
[view removeFromSuperview]; | |||
} @catch (NSException *exception) { | |||
//Panik | |||
// Panik | |||
} | |||
} | |||
@@ -318,11 +315,11 @@ NSMutableArray *cellsForDeviceNames = [[NSMutableArray alloc] init]; | |||
if (kaiAlign == 0) { | |||
self.subviewAligner.active = NO; | |||
if (bannerAlign == 2) { //center | |||
if (bannerAlign == 2) { // center | |||
self.subviewAligner = [self.stack.centerXAnchor constraintEqualToAnchor:self.stackHolder.centerXAnchor constant:horizontalOffset]; | |||
} else if (bannerAlign == 1) { //left | |||
} else if (bannerAlign == 1) { // left | |||
self.subviewAligner = [self.stack.leftAnchor constraintEqualToAnchor:self.stackHolder.leftAnchor constant:horizontalOffset]; | |||
} else if (bannerAlign == 3) { //right | |||
} else if (bannerAlign == 3) { // right | |||
self.subviewAligner = [self.stack.rightAnchor constraintEqualToAnchor:self.stackHolder.rightAnchor constant:horizontalOffset]; | |||
} | |||
@@ -336,26 +333,27 @@ NSMutableArray *cellsForDeviceNames = [[NSMutableArray alloc] init]; | |||
} | |||
- (void)dispatchQueue { | |||
[queueTimer invalidate]; | |||
queueTimer = nil; | |||
self.isUpdating = NO; | |||
if (self.queued) { | |||
self.queued = NO; | |||
[self updateBattery]; | |||
if ([self.superview.superview.superview respondsToSelector:@selector(fixComplicationsViewFrame)]) { | |||
[(NCNotificationListView *)(self.superview.superview.superview) fixComplicationsViewFrame]; | |||
} | |||
self.queued = NO; | |||
} | |||
[queueTimer invalidate]; | |||
queueTimer = nil; | |||
} | |||
+ (KAIBatteryPlatter *)sharedInstance { | |||
return instance; | |||
} | |||
//This is for compatibility (did i spell that right?) | |||
//basically this fixes it crashing in landscape: | |||
// This is for compatibility (did i spell that right?) | |||
// basically this fixes it crashing in landscape: | |||
- (void)setSizeToMimic:(CGSize)arg1 { | |||
} | |||
@end | |||
@end |
@@ -32,8 +32,8 @@ | |||
@property (nonatomic, assign, getter=isInternal) BOOL internal; | |||
@property (nonatomic, assign, getter=isBatterySaverModeActive) BOOL batterySaverModeActive; | |||
@property (nonatomic, strong) NSString *identifier; | |||
- (id)glyph; //ios 13 | |||
- (id)batteryWidgetGlyph; //ios 14 | |||
- (id)glyph; // ios 13 | |||
- (id)batteryWidgetGlyph; // ios 14 | |||
- (id)kaiCellForDevice; | |||
- (void)resetKaiCellForNewPrefs; | |||
@end | |||
@@ -72,4 +72,4 @@ | |||
@interface UIView (kai) | |||
- (void)_didRemoveSubview:(UIView *)arg1; | |||
@end | |||
@end |
@@ -3,8 +3,7 @@ | |||
#import <UIKit/UIKit.h> | |||
#import <objc/runtime.h> | |||
#define KAISelf ((CSAdjunctListView *)self) //for use when calling self in KAITarget | |||
#define afterMusicIndex(cls, obj) [[[cls sharedListViewForKai] stackView].subviews indexOfObject:obj] | |||
#define KAISelf ((CSAdjunctListView *)self) // for use when calling self in KAITarget | |||
@interface CSAdjunctListView : UIView | |||
@property (nonatomic, assign) BOOL hasKai; | |||
@@ -12,6 +11,12 @@ | |||
- (void)_layoutStackView; | |||
- (void)setStackView:(UIStackView *)arg1; | |||
+ (id)sharedListViewForKai; | |||
+ (void)reorderKai; | |||
@end | |||
@interface SBMediaController : NSObject | |||
@property (nonatomic, strong) id nowPlayingApplication; | |||
- (BOOL)isPlaying; | |||
@end | |||
@interface CALayer (kai) | |||
@@ -35,7 +40,7 @@ BOOL ios13 = NO; | |||
BOOL isUpdating = NO; | |||
BOOL shouldBeAdded = YES; | |||
//prefs | |||
// prefs | |||
BOOL enabled; | |||
BOOL disableGlyphs; | |||
BOOL hidePercent; | |||
@@ -62,7 +67,7 @@ double bannerAlpha; | |||
double kaiAlign; | |||
double spacingHorizontal; | |||
//by importing here, I can use vars in the .mm files | |||
// by importing here, I can use vars in the .mm files | |||
#import "KAIBatteryCell.mm" | |||
#import "KAIBatteryPlatter.mm" | |||
#import "KAIStackView.mm" | |||
@@ -141,9 +146,9 @@ static void applyPrefs() { | |||
isUpdating = YES; | |||
[[KAIBatteryPlatter sharedInstance] refreshForPrefs]; //so hard (not) | |||
[[KAIBatteryPlatter sharedInstance] refreshForPrefs]; // so hard (not) | |||
[(CSAdjunctListView *)([KAIBatteryPlatter sharedInstance].superview.superview) _layoutStackView]; | |||
[[NSNotificationCenter defaultCenter] postNotificationName:@"KaiResetOffset" object:nil userInfo:nil]; | |||
isUpdating = NO; | |||
} | |||
} |
@@ -1,54 +1,43 @@ | |||
#import "Kai.h" | |||
CSAdjunctListView *list; | |||
Class mediaClass; | |||
%group main | |||
%hook Media | |||
%hook SBMediaController | |||
- (void)dealloc { | |||
%orig; | |||
if(removeForMedia) { | |||
shouldBeAdded = YES; | |||
[[KAIBatteryPlatter sharedInstance] updateBattery]; | |||
Class cls = kCFCoreFoundationVersionNumber > 1600 ? ([objc_getClass("CSAdjunctListView") class]) : ([objc_getClass("SBDashBoardAdjunctListView") class]); | |||
- (BOOL)isPlaying { | |||
Class cls = kCFCoreFoundationVersionNumber > 1600 ? ([objc_getClass("CSAdjunctListView") class]) : ([objc_getClass("SBDashBoardAdjunctListView") class]); | |||
BOOL playing = %orig; | |||
if(!belowMusic) { //cursed | |||
[[[cls sharedListViewForKai] stackView] removeArrangedSubview:[KAIBatteryPlatter sharedInstance]]; | |||
[[[cls sharedListViewForKai] stackView] insertArrangedSubview:[KAIBatteryPlatter sharedInstance] atIndex:0]; | |||
} | |||
if(!removeForMedia) { | |||
[cls reorderKai]; | |||
return playing; | |||
} | |||
} | |||
- (void)didMoveToSuperview { | |||
%orig; | |||
Class cls = kCFCoreFoundationVersionNumber > 1600 ? ([objc_getClass("CSAdjunctListView") class]) : ([objc_getClass("SBDashBoardAdjunctListView") class]); | |||
// if removeForMedia | |||
if(self.nowPlayingApplication && shouldBeAdded) { | |||
// a valid playing app, and it was shown | |||
shouldBeAdded = NO; | |||
if([[[cls sharedListViewForKai] stackView].arrangedSubviews containsObject:self]) { | |||
if(belowMusic) {//cursed | |||
[[[cls sharedListViewForKai] stackView] removeArrangedSubview:[KAIBatteryPlatter sharedInstance]]; | |||
[[[cls sharedListViewForKai] stackView] insertArrangedSubview:[KAIBatteryPlatter sharedInstance] atIndex:afterMusicIndex(cls, self)]; | |||
} else { | |||
[[[cls sharedListViewForKai] stackView] removeArrangedSubview:[KAIBatteryPlatter sharedInstance]]; | |||
[[[cls sharedListViewForKai] stackView] insertArrangedSubview:[KAIBatteryPlatter sharedInstance] atIndex:0]; | |||
} | |||
[[KAIBatteryPlatter sharedInstance] removeFromSuperview]; | |||
[[[cls sharedListViewForKai] stackView] removeArrangedSubview:[KAIBatteryPlatter sharedInstance]]; | |||
if(removeForMedia) { | |||
shouldBeAdded = NO; | |||
return playing; | |||
} else if(!playing && self.nowPlayingApplication == nil) { | |||
// not playing and the app is nil | |||
shouldBeAdded = YES; | |||
[[KAIBatteryPlatter sharedInstance] removeFromSuperview]; | |||
[[[cls sharedListViewForKai] stackView] removeArrangedSubview:[KAIBatteryPlatter sharedInstance]]; | |||
} | |||
// if we don't want to hide kai, fix its order | |||
[cls reorderKai]; | |||
} | |||
return playing; | |||
} | |||
%end | |||
%hook KAITarget //This class is defined in %ctor, KAITarget is not a class name. | |||
%hook KAITarget // This class is defined in %ctor, KAITarget is not a class name. | |||
%property (nonatomic, assign) BOOL hasKai; | |||
@@ -65,20 +54,20 @@ Class mediaClass; | |||
KAIBatteryPlatter *battery = [[KAIBatteryPlatter alloc] initWithFrame:[self stackView].frame]; | |||
//Add noti observer | |||
// Add noti observer | |||
[[NSNotificationCenter defaultCenter] addObserver:self | |||
selector:@selector(KaiInfo) | |||
name:@"KaiInfoChanged" | |||
object:nil]; | |||
KAISelf.hasKai = YES; | |||
if(![arg1.subviews containsObject:battery]) { //if not added | |||
//add kai to the stack view | |||
if(![arg1.subviews containsObject:battery]) { // if not added | |||
// add kai to the stack view | |||
[arg1 addArrangedSubview:battery]; | |||
} | |||
[battery updateBattery]; | |||
//send the adjusted stackview as arg1 | |||
// send the adjusted stackview as arg1 | |||
%orig(arg1); | |||
} | |||
@@ -91,7 +80,6 @@ Class mediaClass; | |||
isUpdating = YES; | |||
//NSLog(@"kai: kai info will update"); | |||
dispatch_async(dispatch_get_main_queue(), ^{ | |||
[[KAIBatteryPlatter sharedInstance] updateBattery]; | |||
@@ -118,6 +106,19 @@ Class mediaClass; | |||
return list; | |||
} | |||
%new | |||
+ (void)reorderKai { | |||
NSLog(@"[Kai]: Reordering kai"); | |||
UIStackView *stack = [[self sharedListViewForKai] stackView]; | |||
if(belowMusic) { // cursed | |||
[stack removeArrangedSubview:[KAIBatteryPlatter sharedInstance]]; | |||
[stack addArrangedSubview:[KAIBatteryPlatter sharedInstance]]; | |||
} else { | |||
[stack removeArrangedSubview:[KAIBatteryPlatter sharedInstance]]; | |||
[stack insertArrangedSubview:[KAIBatteryPlatter sharedInstance] atIndex:0]; | |||
} | |||
} | |||
%end | |||
%hook SBCoverSheetPrimarySlidingViewController | |||
@@ -140,21 +141,21 @@ Class mediaClass; | |||
%property (nonatomic, strong) KAIBatteryCell *kaiCell; | |||
- (void)setCharging:(BOOL)arg1 { | |||
//sends the noti to update battery info | |||
// sends the noti to update battery info | |||
[[NSNotificationCenter defaultCenter] postNotificationName:@"KaiInfoChanged" object:nil userInfo:nil]; | |||
%orig; | |||
} | |||
- (void)setBatterySaverModeActive:(BOOL)arg1 { | |||
//sends the noti to update battery info | |||
// sends the noti to update battery info | |||
[[NSNotificationCenter defaultCenter] postNotificationName:@"KaiInfoChanged" object:nil userInfo:nil]; | |||
%orig; | |||
} | |||
- (void)setPercentCharge:(NSInteger)arg1 { | |||
//sends the noti to update battery info | |||
if(arg1!=0) { | |||
[[NSNotificationCenter defaultCenter] postNotificationName:@"KaiInfoChanged" object:nil userInfo:nil]; | |||
// sends the noti to update battery info | |||
if(arg1 != 0) { | |||
[[NSNotificationCenter defaultCenter] postNotificationName:@"KaiInfoChanged" object:nil userInfo:nil]; | |||
} | |||
%orig; | |||
} | |||
@@ -176,25 +177,29 @@ Class mediaClass; | |||
%new | |||
- (void)resetKaiCellForNewPrefs { | |||
self.kaiCell = [[KAIBatteryCell alloc] initWithFrame:CGRectMake(0,0,[KAIBatteryPlatter sharedInstance].frame.size.width,0) device:self]; | |||
self.kaiCell = [[KAIBatteryCell alloc] initWithFrame:CGRectMake(0,0,[KAIBatteryPlatter sharedInstance].frame.size.width,0) device:self]; | |||
((KAIBatteryCell *)self.kaiCell).translatesAutoresizingMaskIntoConstraints = NO; | |||
[(KAIBatteryCell *)self.kaiCell updateInfo]; | |||
} | |||
%end | |||
%hook KAICSTarget //Again, not a class | |||
%hook KAICSTarget // Again, not a class | |||
- (void)_transitionChargingViewToVisible:(BOOL)arg1 showBattery:(BOOL)arg2 animated:(BOOL)arg3 { | |||
if(hideChargingAnimation) { | |||
//Yeah bro this just makes the method never call to show the charging thing | |||
// Yeah bro this just makes the method never call to show the charging thing | |||
%orig(NO,NO,NO); | |||
} else { | |||
%orig(arg1, arg2, arg3); | |||
} | |||
} | |||
- (void)_transitionChargingViewToVisible:(BOOL)arg1 showBattery:(BOOL)arg2 animated:(BOOL)arg3 force:(BOOL)arg4 { //might just be ios12 | |||
- (void)_transitionChargingViewToVisible:(BOOL)arg1 showBattery:(BOOL)arg2 animated:(BOOL)arg3 force:(BOOL)arg4 { // might just be ios12 | |||
if(hideChargingAnimation) { | |||
//Same idea | |||
// Same idea | |||
%orig(NO,NO,NO,NO); | |||
} else { | |||
%orig(arg1, arg2, arg3, arg4); | |||
} | |||
} | |||
@@ -213,20 +218,18 @@ Class mediaClass; | |||
CFNotificationSuspensionBehaviorDeliverImmediately | |||
); | |||
//Bro Muirey helped me figure out a logical way to do this because iOS 12-13 classes have changed | |||
mediaClass = kCFCoreFoundationVersionNumber > 1600 ? %c(CSAdjunctItemView) : %c(SBDashBoardAdjunctItemView); | |||
// Bro Muirey helped me figure out a logical way to do this because iOS 12-13 classes have changed | |||
Class cls = kCFCoreFoundationVersionNumber > 1600 ? %c(CSAdjunctListView) : %c(SBDashBoardAdjunctListView); | |||
Class CSCls = kCFCoreFoundationVersionNumber > 1600 ? %c(CSCoverSheetViewController) : %c(SBDashBoardViewController); | |||
if(kCFCoreFoundationVersionNumber < 1740) { | |||
ios13 = YES; //wow very pog version you have | |||
ios13 = YES; // wow very pog version you have | |||
} | |||
if(enabled) { | |||
%init(main, Media = mediaClass, KAITarget = cls, KAICSTarget = CSCls); //BIG BRAIN BRO!! | |||
%init(main, KAITarget = cls, KAICSTarget = CSCls); // BIG BRAIN BRO!! | |||
} | |||
NSLog(@"[kai]: loaded into %@", [NSBundle mainBundle].bundleIdentifier); |
@@ -1,6 +1,6 @@ | |||
Package: com.burritoz.kai | |||
Name: Kai | |||
Version: 1.4.0 | |||
Version: 1.5.0 | |||
Architecture: iphoneos-arm | |||
Description: Device battery indicators on your lock screen! | |||
Maintainer: burrit0z |