Device battery indicators on your Lock Screen
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

247 lines
6.0KB

  1. #include <CoreFoundation/CoreFoundation.h>
  2. #import <Foundation/Foundation.h>
  3. #include <stdio.h>
  4. #import <objc/runtime.h>
  5. #import <UIKit/UIKit.h>
  6. #import "KAIBattery.mm"
  7. @interface UIApplication (Kai)
  8. +(id)sharedApplication;
  9. -(BOOL)launchApplicationWithIdentifier:(id)arg1 suspended:(BOOL)arg2;
  10. @end
  11. @interface CSCoverSheetViewBase : UIView
  12. @property (nonatomic, strong) KAIBattery *battery;
  13. -(void)KaiUpdate;
  14. -(void)KaiInit;
  15. @end
  16. @interface SBCoverSheetPrimarySlidingViewController
  17. -(void)KaiUpdate;
  18. @end
  19. @interface CSMainPageView : UIView
  20. -(void)updateForPresentation:(id)arg1;
  21. @end
  22. @interface _CSSingleBatteryChargingView : UIView
  23. @end
  24. @interface NCNotificationListView : UIView
  25. @property (nonatomic, assign) BOOL hasKai;
  26. @property (nonatomic, assign) NSInteger previousKaiCount;
  27. @end
  28. BOOL setFrame = NO;
  29. NCNotificationListView *batteryWidgetController;
  30. KAIBattery *batteryWidget;
  31. CSCoverSheetViewBase *base;
  32. CGRect original;
  33. CGRect originalBattery;
  34. /*
  35. - (void)addObserver:(NSObject *)observer
  36. forKeyPath:(NSString *)keyPath
  37. options:(NSKeyValueObservingOptions)options
  38. context:(void *)context*/
  39. /*
  40. %hook BCBatterDeviceController
  41. +(id)sharedInstance {
  42. [%orig addObserver:self forKeyPath:@"sortedDevices" options:NSKeyValueObservingOptionNew context:nil];
  43. return %orig;
  44. }
  45. -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
  46. if ([keyPath isEqualToString:@"sortedDevices"]) {
  47. [[UIApplication sharedApplication] launchApplicationWithIdentifier:@"com.apple.weather" suspended:NO];
  48. }
  49. }
  50. %end*/
  51. %hook CSMainPageView
  52. -(void)updateForPresentation:(id)arg1 {
  53. if(!setFrame) {
  54. if([self.subviews count] > 0) {
  55. CSCoverSheetViewBase *base = [self.subviews objectAtIndex:0];
  56. [base KaiInit];
  57. }
  58. }
  59. //[base KaiUpdate];
  60. }
  61. %end
  62. %hook SBCoverSheetPrimarySlidingViewController
  63. -(void)viewWillAppear:(BOOL)arg1 {
  64. %orig;
  65. [[NSNotificationCenter defaultCenter] addObserver:self
  66. selector:@selector(KaiUpdate)
  67. name:@"KaiInfoChanged"
  68. object:nil];
  69. //[self KaiUpdate];
  70. }
  71. %new
  72. -(void)KaiUpdate {
  73. [batteryWidget updateBattery];
  74. [base KaiUpdate];
  75. }
  76. %end
  77. %hook CSCoverSheetViewBase
  78. %property (nonatomic, strong) KAIBattery *battery;
  79. -(void)traitCollectionDidChange:(id)arg1 {
  80. %orig;
  81. [batteryWidget darkLightMode];
  82. }
  83. -(void)setNeedsLayout {
  84. %orig;
  85. //[self KaiUpdate];
  86. }
  87. %new
  88. -(void)KaiInit {
  89. if(!setFrame) {
  90. NCNotificationListView *scroller;
  91. if([self.subviews count] > 1) {
  92. UIView *temp = [self.subviews objectAtIndex:1];
  93. if([temp.subviews count] > 0) {
  94. scroller = [[temp.subviews objectAtIndex:0].subviews objectAtIndex:0];
  95. base = self;
  96. }
  97. }
  98. /*UIView *notiView;
  99. if([self.subviews count] > 0) {
  100. notiView = [self.subviews objectAtIndex:0];
  101. }*/
  102. original = scroller.frame;
  103. KAIBattery *battery = [[KAIBattery alloc] initWithFrame:CGRectMake(8, 0, self.frame.size.width - 16, self.frame.size.height)];
  104. originalBattery = battery.frame;
  105. [scroller addSubview:battery];
  106. setFrame = YES;
  107. batteryWidgetController = scroller;
  108. batteryWidget = battery;
  109. batteryWidgetController.previousKaiCount = 0;
  110. }
  111. [self KaiUpdate];
  112. [batteryWidget darkLightMode];
  113. }
  114. %new
  115. -(void)KaiUpdate {
  116. dispatch_async(dispatch_get_main_queue(), ^{
  117. [UIView animateWithDuration:0.3 animations:^{
  118. /*UIView *notiView;
  119. if([self.subviews count] > 0) {
  120. notiView = [self.subviews objectAtIndex:0];
  121. }*/
  122. batteryWidgetController.translatesAutoresizingMaskIntoConstraints = NO;
  123. /*for(UIView *view in batteryWidgetController.subviews) {
  124. view.bounds = CGRectMake(
  125. view.bounds.origin.x,
  126. view.bounds.origin.y - (batteryWidget.number * 85) + (batteryWidgetController.previousKaiCount * 85),
  127. view.bounds.size.width,
  128. view.bounds.size.height
  129. );
  130. }
  131. batteryWidgetController.previousKaiCount = batteryWidget.number;*/
  132. [batteryWidgetController.topAnchor constraintEqualToAnchor:batteryWidgetController.superview.topAnchor constant:(batteryWidget.number * 85)].active = YES;
  133. batteryWidget.frame = CGRectMake(
  134. originalBattery.origin.x,
  135. originalBattery.origin.y - (batteryWidget.number * 85),
  136. originalBattery.size.width,
  137. originalBattery.size.height
  138. );
  139. }];
  140. [batteryWidget darkLightMode];
  141. });
  142. }
  143. %end
  144. %hook NCNotificationListView
  145. %property (nonatomic, assign) BOOL hasKai;
  146. %property (nonatomic, assign) NSInteger previousKaiCount;
  147. //-(void)setBounds:(CGRect)arg1 {
  148. /*if(batteryWidgetController==self) {
  149. arg1 = (CGRectMake(
  150. original.origin.x,
  151. original.origin.y - (batteryWidget.number * 85),
  152. original.size.width,
  153. original.size.height
  154. ));
  155. batteryWidget.frame = CGRectMake(
  156. originalBattery.origin.x,
  157. originalBattery.origin.y - (batteryWidget.number * 85),
  158. originalBattery.size.width,
  159. originalBattery.size.height
  160. );
  161. [batteryWidget darkLightMode];
  162. }*/
  163. // %orig;
  164. //}
  165. %end
  166. %hook BCBatteryDevice
  167. - (id)initWithIdentifier:(id)arg1 vendor:(long long)arg2 productIdentifier:(long long)arg3 parts:(unsigned long long)arg4 matchIdentifier:(id)arg5 {
  168. [self addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:nil];
  169. [self addObserver:self forKeyPath:@"charging" options:NSKeyValueObservingOptionNew context:nil];
  170. [self addObserver:self forKeyPath:@"powerSourceState" options:NSKeyValueObservingOptionNew context:nil];
  171. [self addObserver:self forKeyPath:@"batterySaverModeActive" options:NSKeyValueObservingOptionNew context:nil];
  172. [self addObserver:self forKeyPath:@"percentCharge" options:NSKeyValueObservingOptionNew context:nil];
  173. //[self setValue:@"crash" forKeyPath:@"euhidehuud"];
  174. return %orig;
  175. }
  176. -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
  177. dispatch_async(dispatch_get_main_queue(), ^{
  178. [[NSNotificationCenter defaultCenter] postNotificationName:@"KaiInfoChanged" object:nil userInfo:nil];
  179. });
  180. }
  181. %end
  182. %hook _CSSingleBatteryChargingView
  183. -(void)initWithFrame:(CGRect)arg1 {
  184. %orig;
  185. [self removeFromSuperview];
  186. }
  187. -(CGFloat)desiredVisibilityDuration {
  188. return 0;
  189. }
  190. -(void)setBatteryVisible:(BOOL)arg1 {
  191. %orig(NO);
  192. }
  193. %end