diff --git a/Makefile b/Makefile index 87d32e9..00601e8 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,4 @@ + ARCHS = armv7 arm64 include $(THEOS)/makefiles/common.mk @@ -9,4 +10,4 @@ include $(THEOS_MAKE_PATH)/tweak.mk after-install:: install.exec "killall -9 SpringBoard" SUBPROJECTS += exacttimeprefs -include $(THEOS_MAKE_PATH)/aggregate.mk +include $(THEOS)/makefiles/aggregate.mk diff --git a/Tweak.xm b/Tweak.xm index 05b1298..1c83600 100644 --- a/Tweak.xm +++ b/Tweak.xm @@ -1,75 +1,150 @@ +//IOS 10 @interface NCNotificationDateLabel @property (assign,nonatomic) NSString *text; -(void)sizeToFit; @end - +//IOS 10 @interface NCLookHeaderContentView -(void)_updateDateLabelFontForShortLook; @end +//IOS 11 +@interface BSUIRelativeDateLabel +@property (assign,nonatomic) NSString *text; +-(void)sizeToFit; +@end +//IOS 11 +@interface MTPlatterHeaderContentView +-(void)_updateTextAttributesForDateLabel; +@end + static bool is24h; static NSString *settingsPath = @"/var/mobile/Library/Preferences/com.gilshahar7.exacttimeprefs.plist"; +%group iOS10 + %hook NCLookHeaderContentView + -(void)_updateDateLabelFontForShortLook{ + %orig; + NSDate *date = MSHookIvar(self, "_date"); + NSInteger format = MSHookIvar(self, "_dateFormatStyle"); + NSMutableDictionary *prefs = [[NSMutableDictionary alloc] initWithContentsOfFile:settingsPath]; + CGFloat affectTime = [[prefs objectForKey:@"affectTime"] floatValue]; + if((date != nil) && (format == 1)){ + NCNotificationDateLabel *dateLabel = MSHookIvar(self, "_dateLabel"); + int timeSinceNow = (int)[date timeIntervalSinceNow]; + timeSinceNow = timeSinceNow*-1; + bool addMinutes = [[prefs objectForKey:@"addMinutes"] boolValue]; + bool addToCurrent = [[prefs objectForKey:@"addToCurrent"] boolValue]; + int hours = timeSinceNow / 3600; + int minutes = (timeSinceNow % 3600) / 60; + if(addMinutes){ + if(hours == 0){ + if(minutes == 0){ + }else{ + dateLabel.text = [NSString stringWithFormat:@"%im ago", minutes]; + } + }else{ + if(minutes == 0){ + dateLabel.text = [NSString stringWithFormat:@"%ih ago", hours]; + } else{ + dateLabel.text = [NSString stringWithFormat:@"%ih %im ago", hours, minutes]; + } + } + }else if(addToCurrent){ + if(hours == 0){ + if(minutes == 0){ + }else{ + dateLabel.text = [NSString stringWithFormat:@"%im ago", minutes]; + } + }else{ + dateLabel.text = [NSString stringWithFormat:@"%ih ago", hours]; + } + } + if((timeSinceNow/60) >= affectTime){ + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + if(is24h){ + [dateFormatter setDateFormat:@"HH:mm"]; + }else{ + [dateFormatter setDateFormat:@"h:mm a"]; + } + if(addToCurrent && !([dateLabel.text isEqualToString:[dateFormatter stringFromDate:date]])){ + dateLabel.text = [[dateLabel.text stringByAppendingString:@" • "] stringByAppendingString:[dateFormatter stringFromDate:date]]; + }else{ + dateLabel.text =[dateFormatter stringFromDate:date]; + } + [dateLabel sizeToFit]; + [dateFormatter release]; + } + } + } + -(void)dateLabelDidChange:(id)arg1{ + %orig(arg1); + [self _updateDateLabelFontForShortLook]; + } + %end +%end -%hook NCLookHeaderContentView --(void)_updateDateLabelFontForShortLook{ - %orig; - NSDate *date = MSHookIvar(self, "_date"); - NSInteger format = MSHookIvar(self, "_dateFormatStyle"); - NSMutableDictionary *prefs = [[NSMutableDictionary alloc] initWithContentsOfFile:settingsPath]; - CGFloat affectTime = [[prefs objectForKey:@"affectTime"] floatValue]; - if((date != nil) && (format == 1)){ - NCNotificationDateLabel *dateLabel = MSHookIvar(self, "_dateLabel"); - int timeSinceNow = (int)[date timeIntervalSinceNow]; - timeSinceNow = timeSinceNow*-1; - bool addMinutes = [[prefs objectForKey:@"addMinutes"] boolValue]; - bool addToCurrent = [[prefs objectForKey:@"addToCurrent"] boolValue]; - int hours = timeSinceNow / 3600; - int minutes = (timeSinceNow % 3600) / 60; - if(addMinutes){ - if(hours == 0){ - if(minutes == 0){ - }else{ - dateLabel.text = [NSString stringWithFormat:@"%im ago", minutes]; - } - }else{ - if(minutes == 0){ - dateLabel.text = [NSString stringWithFormat:@"%ih ago", hours]; - } else{ - dateLabel.text = [NSString stringWithFormat:@"%ih %im ago", hours, minutes]; - } - } - }else if(addToCurrent){ - if(hours == 0){ - if(minutes == 0){ - }else{ - dateLabel.text = [NSString stringWithFormat:@"%im ago", minutes]; - } - }else{ - dateLabel.text = [NSString stringWithFormat:@"%ih ago", hours]; - } - } - if((timeSinceNow/60) >= affectTime){ - NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; - if(is24h){ - [dateFormatter setDateFormat:@"HH:mm"]; - }else{ - [dateFormatter setDateFormat:@"h:mm a"]; - } - if(addToCurrent && !([dateLabel.text isEqualToString:[dateFormatter stringFromDate:date]])){ - dateLabel.text = [[dateLabel.text stringByAppendingString:@" • "] stringByAppendingString:[dateFormatter stringFromDate:date]]; - }else{ - dateLabel.text =[dateFormatter stringFromDate:date]; - } - [dateLabel sizeToFit]; - [dateFormatter release]; - } - } -} --(void)dateLabelDidChange:(id)arg1{ - %orig(arg1); - [self _updateDateLabelFontForShortLook]; -} +%group iOS11 + %hook MTPlatterHeaderContentView + -(void)_updateTextAttributesForDateLabel{ + %orig; + NSDate *date = MSHookIvar(self, "_date"); + NSInteger format = MSHookIvar(self, "_dateFormatStyle"); + NSMutableDictionary *prefs = [[NSMutableDictionary alloc] initWithContentsOfFile:settingsPath]; + CGFloat affectTime = [[prefs objectForKey:@"affectTime"] floatValue]; + if((date != nil) && (format == 1)){ + BSUIRelativeDateLabel *dateLabel = MSHookIvar(self, "_dateLabel"); + int timeSinceNow = (int)[date timeIntervalSinceNow]; + timeSinceNow = timeSinceNow*-1; + bool addMinutes = [[prefs objectForKey:@"addMinutes"] boolValue]; + bool addToCurrent = [[prefs objectForKey:@"addToCurrent"] boolValue]; + int hours = timeSinceNow / 3600; + int minutes = (timeSinceNow % 3600) / 60; + if(addMinutes){ + if(hours == 0){ + if(minutes == 0){ + }else{ + dateLabel.text = [NSString stringWithFormat:@"%im ago", minutes]; + } + }else{ + if(minutes == 0){ + dateLabel.text = [NSString stringWithFormat:@"%ih ago", hours]; + } else{ + dateLabel.text = [NSString stringWithFormat:@"%ih %im ago", hours, minutes]; + } + } + }else if(addToCurrent){ + if(hours == 0){ + if(minutes == 0){ + }else{ + dateLabel.text = [NSString stringWithFormat:@"%im ago", minutes]; + } + }else{ + dateLabel.text = [NSString stringWithFormat:@"%ih ago", hours]; + } + } + if((timeSinceNow/60) >= affectTime){ + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + if(is24h){ + [dateFormatter setDateFormat:@"HH:mm"]; + }else{ + [dateFormatter setDateFormat:@"h:mm a"]; + } + if(addToCurrent && !([dateLabel.text isEqualToString:[dateFormatter stringFromDate:date]])){ + dateLabel.text = [[dateLabel.text stringByAppendingString:@" • "] stringByAppendingString:[dateFormatter stringFromDate:date]]; + }else{ + dateLabel.text =[dateFormatter stringFromDate:date]; + } + [dateLabel sizeToFit]; + [dateFormatter release]; + } + } + } + -(void)dateLabelDidChange:(id)arg1{ + %orig(arg1); + [self _updateTextAttributesForDateLabel]; + } + %end %end %ctor{ @@ -82,4 +157,9 @@ static NSString *settingsPath = @"/var/mobile/Library/Preferences/com.gilshahar7 NSRange pmRange = [dateString rangeOfString:[formatter PMSymbol]]; is24h = (amRange.location == NSNotFound && pmRange.location == NSNotFound); [formatter release]; + if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9.0 && [[[UIDevice currentDevice] systemVersion] floatValue] < 11.0) { + %init(iOS10); + } else if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 11.0 && [[[UIDevice currentDevice] systemVersion] floatValue] < 12.0) { + %init(iOS11); + } } diff --git a/control b/control index 75e5388..f6fce07 100644 --- a/control +++ b/control @@ -1,7 +1,7 @@ Package: com.gilshahar7.exacttime Name: ExactTime Depends: mobilesubstrate -Version: 1.3 +Version: 1.4 Architecture: iphoneos-arm Description: Shows the exact time of a notification. Maintainer: gilshahar7