Device battery indicators on your Lock Screen
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
преди 4 години
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. #import "Kai.h"
  2. %hook KAITarget //This class is defined in %ctor, KAITarget is not a class name.
  3. %property (nonatomic, assign) BOOL hasKai;
  4. -(void)_layoutStackView {
  5. //NSInteger lastSlot = [[self stackView].subviews count] -1;
  6. //this code is used to determine if kai is at the bottom of the stack view
  7. //if([[self stackView].subviews objectAtIndex:lastSlot] != [KAIBattery sharedInstance] && belowMusic) {
  8. //if it is not, but the option to have kai below music is on, i simply remove from it's current pos.
  9. //and insert into last slot.
  10. //[[self stackView] removeArrangedSubview:[KAIBattery sharedInstance]];
  11. //[[self stackView] insertArrangedSubview:[KAIBattery sharedInstance] atIndex:lastSlot];
  12. //}
  13. //makes kai lay itself out when the stack does
  14. [self KaiUpdate];
  15. %orig;
  16. }
  17. -(void)setStackView:(UIStackView *)arg1 {
  18. if(!KAISelf.hasKai) {
  19. KAIBattery *battery = [[KAIBattery alloc] init];
  20. //Add noti observer
  21. [[NSNotificationCenter defaultCenter] addObserver:self
  22. selector:@selector(KaiInfo)
  23. name:@"KaiInfoChanged"
  24. object:nil];
  25. KAISelf.hasKai = YES;
  26. if(![arg1.subviews containsObject:battery]) { //if not added
  27. //add kai to the stack view
  28. [arg1 addArrangedSubview:battery];
  29. }
  30. //send the adjusted stackview as arg1
  31. %orig(arg1);
  32. }
  33. }
  34. %new
  35. -(void)KaiUpdate {
  36. KAIBattery *battery = [KAIBattery sharedInstance];
  37. [UIView animateWithDuration:0.3 animations:^{
  38. if(!battery.heightConstraint) {
  39. battery.heightConstraint.active = NO;
  40. battery.heightConstraint = [battery.heightAnchor constraintEqualToConstant:85];
  41. //set an initial constraint
  42. battery.heightConstraint.active = YES;
  43. } else {
  44. int height = (battery.number * (bannerHeight + spacing)); //big brain math
  45. battery.heightConstraint.active = NO; //deactivation
  46. battery.heightConstraint.constant = height;
  47. battery.heightConstraint.active = YES; //forcing reactivation
  48. UIStackView *s = [self stackView];
  49. s.frame = CGRectMake(s.frame.origin.x, s.frame.origin.y, s.frame.size.width, (s.frame.size.height - 1));
  50. //literally does nothing but makes the stack view lay itself out (doesnt adjust frame because translatesAutoreszingMaskIntoConstraints = NO on stack views)
  51. }
  52. }];
  53. }
  54. %new
  55. -(void)KaiInfo {
  56. if(!isUpdating) {
  57. isUpdating = YES;
  58. [[KAIBattery sharedInstance] updateBattery];
  59. [self KaiUpdate];
  60. isUpdating = NO;
  61. /*isUpdating = YES;
  62. [UIView animateWithDuration:0.3 animations:^{
  63. //nice fade out
  64. [KAIBattery sharedInstance].alpha = 0;
  65. } completion:^(BOOL finished){
  66. [[KAIBattery sharedInstance] updateBattery];
  67. [self KaiUpdate];
  68. [UIView animateWithDuration:0.35 animations:^{
  69. //fade back in
  70. [KAIBattery sharedInstance].alpha = 1;
  71. } completion:^(BOOL finished){
  72. isUpdating = NO;
  73. }];
  74. }];*/
  75. }
  76. }
  77. %end
  78. %hook BCBatteryDevice
  79. - (id)initWithIdentifier:(id)arg1 vendor:(long long)arg2 productIdentifier:(long long)arg3 parts:(unsigned long long)arg4 matchIdentifier:(id)arg5 {
  80. //Posts a notification to self when these keys change
  81. [self addObserver:self forKeyPath:@"charging" options:NSKeyValueObservingOptionNew context:nil];
  82. [self addObserver:self forKeyPath:@"batterySaverModeActive" options:NSKeyValueObservingOptionNew context:nil];
  83. [self addObserver:self forKeyPath:@"percentCharge" options:NSKeyValueObservingOptionNew context:nil];
  84. return %orig;
  85. }
  86. -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
  87. dispatch_async(dispatch_get_main_queue(), ^{
  88. //sends the noti to update battery info
  89. [[NSNotificationCenter defaultCenter] postNotificationName:@"KaiInfoChanged" object:nil userInfo:nil];
  90. });
  91. }
  92. %end
  93. %hook KAICSTarget //Again, not a class
  94. -(void)_transitionChargingViewToVisible:(BOOL)arg1 showBattery:(BOOL)arg2 animated:(BOOL)arg3 {
  95. if(hideChargingAnimation) {
  96. //Yeah bro this just makes the method never call to show the charging thing
  97. %orig(NO,NO,NO);
  98. }
  99. }
  100. -(void)_transitionChargingViewToVisible:(BOOL)arg1 showBattery:(BOOL)arg2 animated:(BOOL)arg3 force:(BOOL)arg4 { //might just be ios12
  101. if(hideChargingAnimation) {
  102. //Same idea
  103. %orig(NO,NO,NO,NO);
  104. }
  105. }
  106. %end
  107. %ctor {
  108. preferencesChanged();
  109. CFNotificationCenterAddObserver(
  110. CFNotificationCenterGetDarwinNotifyCenter(),
  111. &observer,
  112. (CFNotificationCallback)applyPrefs,
  113. kSettingsChangedNotification,
  114. NULL,
  115. CFNotificationSuspensionBehaviorDeliverImmediately
  116. );
  117. //Bro Muirey helped me figure out a logical way to do this because iOS 12-13 classes have changed
  118. Class cls = kCFCoreFoundationVersionNumber > 1600 ? ([objc_getClass("CSAdjunctListView") class]) : ([objc_getClass("SBDashBoardAdjunctListView") class]);
  119. Class CSCls = kCFCoreFoundationVersionNumber > 1600 ? ([objc_getClass("CSCoverSheetViewController") class]) : ([objc_getClass("SBDashBoardViewController") class]);
  120. if(enabled) {
  121. %init(KAITarget = cls, KAICSTarget = CSCls); //BIG BRAIN BRO!!
  122. }
  123. }