Clean up ahead of PR.

pull/1/head
Matthew Chen 7 years ago
parent abba24988c
commit 45cb1ec510

@ -192,6 +192,9 @@ const NSUInteger kHomeViewAvatarHSpacing = 12;
[self updateNameLabel]; [self updateNameLabel];
[self updateAvatarView]; [self updateAvatarView];
// We update the fonts every time this cell is configured to ensure that
// changes to the dynamic type settings are reflected.
self.snippetLabel.font = [self snippetFont];
self.snippetLabel.attributedText = self.snippetLabel.attributedText =
[self attributedSnippetForThread:thread blockedPhoneNumberSet:blockedPhoneNumberSet]; [self attributedSnippetForThread:thread blockedPhoneNumberSet:blockedPhoneNumberSet];
self.dateTimeLabel.attributedText = [self attributedStringForDate:thread.lastMessageDate]; self.dateTimeLabel.attributedText = [self attributedStringForDate:thread.lastMessageDate];
@ -204,6 +207,7 @@ const NSUInteger kHomeViewAvatarHSpacing = 12;
NSUInteger unreadCount = [[OWSMessageUtils sharedManager] unreadMessagesInThread:thread]; NSUInteger unreadCount = [[OWSMessageUtils sharedManager] unreadMessagesInThread:thread];
if (unreadCount > 0) { if (unreadCount > 0) {
self.unreadBadge.hidden = NO; self.unreadBadge.hidden = NO;
self.unreadLabel.font = [UIFont ows_dynamicTypeCaption1Font];
self.unreadLabel.text = [OWSFormat formatInt:MIN(99, (int)unreadCount)]; self.unreadLabel.text = [OWSFormat formatInt:MIN(99, (int)unreadCount)];
[self.viewConstraints addObjectsFromArray:@[ [self.viewConstraints addObjectsFromArray:@[
@ -304,7 +308,7 @@ const NSUInteger kHomeViewAvatarHSpacing = 12;
dateTimeString = [[DateUtil dateFormatter] stringFromDate:date]; dateTimeString = [[DateUtil dateFormatter] stringFromDate:date];
} else if ([DateUtil dateIsOlderThanOneWeek:date]) { } else if ([DateUtil dateIsOlderThanOneWeek:date]) {
dateTimeString = [[DateUtil monthAndDayFormatter] stringFromDate:date]; dateTimeString = [[DateUtil monthAndDayFormatter] stringFromDate:date];
} else if ([DateUtil dateIsOlderThanOneDay:date]) { } else if ([DateUtil dateIsOlderThanToday:date]) {
dateTimeString = [[DateUtil shortDayOfWeekFormatter] stringFromDate:date]; dateTimeString = [[DateUtil shortDayOfWeekFormatter] stringFromDate:date];
} else { } else {
dateTimeString = [[DateUtil timeFormatter] stringFromDate:date]; dateTimeString = [[DateUtil timeFormatter] stringFromDate:date];
@ -382,6 +386,8 @@ const NSUInteger kHomeViewAvatarHSpacing = 12;
{ {
OWSAssertIsOnMainThread(); OWSAssertIsOnMainThread();
self.nameLabel.font = self.nameFont;
TSThread *thread = self.thread; TSThread *thread = self.thread;
if (thread == nil) { if (thread == nil) {
OWSFail(@"%@ thread should not be nil", self.logTag); OWSFail(@"%@ thread should not be nil", self.logTag);

@ -11,10 +11,11 @@ NS_ASSUME_NONNULL_BEGIN
+ (NSDateFormatter *)monthAndDayFormatter; + (NSDateFormatter *)monthAndDayFormatter;
+ (NSDateFormatter *)shortDayOfWeekFormatter; + (NSDateFormatter *)shortDayOfWeekFormatter;
+ (BOOL)dateIsOlderThanOneDay:(NSDate *)date; + (BOOL)dateIsOlderThanToday:(NSDate *)date;
+ (BOOL)dateIsOlderThanOneWeek:(NSDate *)date; + (BOOL)dateIsOlderThanOneWeek:(NSDate *)date;
+ (BOOL)dateIsToday:(NSDate *)date; + (BOOL)dateIsToday:(NSDate *)date;
+ (BOOL)dateIsThisYear:(NSDate *)date; + (BOOL)dateIsThisYear:(NSDate *)date;
+ (BOOL)dateIsYesterday:(NSDate *)date;
+ (NSString *)formatPastTimestampRelativeToNow:(uint64_t)pastTimestamp + (NSString *)formatPastTimestampRelativeToNow:(uint64_t)pastTimestamp
isRTL:(BOOL)isRTL NS_SWIFT_NAME(formatPastTimestampRelativeToNow(_:isRTL:)); isRTL:(BOOL)isRTL NS_SWIFT_NAME(formatPastTimestampRelativeToNow(_:isRTL:));

@ -71,8 +71,13 @@ static NSString *const DATE_FORMAT_WEEKDAY = @"EEEE";
return formatter; return formatter;
} }
+ (BOOL)dateIsOlderThanOneDay:(NSDate *)date { + (BOOL)dateIsOlderThanToday:(NSDate *)date
NSDate *now = [NSDate date]; {
return [self dateIsOlderThanToday:date now:[NSDate date]];
}
+ (BOOL)dateIsOlderThanToday:(NSDate *)date now:(NSDate *)now
{
NSCalendar *calendar = [NSCalendar currentCalendar]; NSCalendar *calendar = [NSCalendar currentCalendar];
NSUInteger dateDayOfEra = [calendar ordinalityOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitEra forDate:date]; NSUInteger dateDayOfEra = [calendar ordinalityOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitEra forDate:date];
@ -80,8 +85,13 @@ static NSString *const DATE_FORMAT_WEEKDAY = @"EEEE";
return dateDayOfEra < nowDayOfEra; return dateDayOfEra < nowDayOfEra;
} }
+ (BOOL)dateIsOlderThanOneWeek:(NSDate *)date { + (BOOL)dateIsOlderThanOneWeek:(NSDate *)date
NSDate *now = [NSDate date]; {
return [self dateIsOlderThanOneWeek:date now:[NSDate date]];
}
+ (BOOL)dateIsOlderThanOneWeek:(NSDate *)date now:(NSDate *)now
{
NSCalendar *calendar = [NSCalendar currentCalendar]; NSCalendar *calendar = [NSCalendar currentCalendar];
NSUInteger dateDayOfEra = [calendar ordinalityOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitEra forDate:date]; NSUInteger dateDayOfEra = [calendar ordinalityOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitEra forDate:date];
@ -89,17 +99,13 @@ static NSString *const DATE_FORMAT_WEEKDAY = @"EEEE";
return dateDayOfEra < (nowDayOfEra - 6); return dateDayOfEra < (nowDayOfEra - 6);
} }
+ (BOOL)date:(NSDate *)date isEqualToDateIgnoringTime:(NSDate *)anotherDate { + (BOOL)dateIsToday:(NSDate *)date
static const unsigned componentFlags = (NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay); {
NSDateComponents *components1 = [[NSCalendar autoupdatingCurrentCalendar] components:componentFlags fromDate:date]; return [self dateIsToday:date now:[NSDate date]];
NSDateComponents *components2 =
[[NSCalendar autoupdatingCurrentCalendar] components:componentFlags fromDate:anotherDate];
return ((components1.year == components2.year) && (components1.month == components2.month) &&
(components1.day == components2.day));
} }
+ (BOOL)dateIsToday:(NSDate *)date { + (BOOL)dateIsToday:(NSDate *)date now:(NSDate *)now
NSDate *now = [NSDate date]; {
NSCalendar *calendar = [NSCalendar currentCalendar]; NSCalendar *calendar = [NSCalendar currentCalendar];
return ([calendar ordinalityOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitEra forDate:date] == return ([calendar ordinalityOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitEra forDate:date] ==
[calendar ordinalityOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitEra forDate:now]); [calendar ordinalityOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitEra forDate:now]);
@ -107,7 +113,11 @@ static NSString *const DATE_FORMAT_WEEKDAY = @"EEEE";
+ (BOOL)dateIsThisYear:(NSDate *)date + (BOOL)dateIsThisYear:(NSDate *)date
{ {
NSDate *now = [NSDate date]; return [self dateIsThisYear:date now:[NSDate date]];
}
+ (BOOL)dateIsThisYear:(NSDate *)date now:(NSDate *)now
{
NSCalendar *calendar = [NSCalendar currentCalendar]; NSCalendar *calendar = [NSCalendar currentCalendar];
return ( return (
[calendar component:NSCalendarUnitYear fromDate:date] == [calendar component:NSCalendarUnitYear fromDate:now]); [calendar component:NSCalendarUnitYear fromDate:date] == [calendar component:NSCalendarUnitYear fromDate:now]);
@ -115,8 +125,14 @@ static NSString *const DATE_FORMAT_WEEKDAY = @"EEEE";
+ (BOOL)dateIsYesterday:(NSDate *)date + (BOOL)dateIsYesterday:(NSDate *)date
{ {
NSDate *yesterday = [NSDate ows_dateWithMillisecondsSince1970:[NSDate ows_millisecondTimeStamp] - kDayInMs]; return [self dateIsYesterday:date now:[NSDate date]];
return [self date:yesterday isEqualToDateIgnoringTime:date]; }
+ (BOOL)dateIsYesterday:(NSDate *)date now:(NSDate *)now
{
NSCalendar *calendar = [NSCalendar currentCalendar];
return ([calendar ordinalityOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitEra forDate:date] ==
[calendar ordinalityOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitEra forDate:now] - 1);
} }
+ (NSString *)formatPastTimestampRelativeToNow:(uint64_t)pastTimestamp isRTL:(BOOL)isRTL + (NSString *)formatPastTimestampRelativeToNow:(uint64_t)pastTimestamp isRTL:(BOOL)isRTL

@ -10,6 +10,18 @@
#import <SignalServiceKit/NSObject+OWS.h> #import <SignalServiceKit/NSObject+OWS.h>
#import <SignalServiceKit/NSString+SSK.h> #import <SignalServiceKit/NSString+SSK.h>
@interface DateUtil (Test)
+ (BOOL)dateIsOlderThanToday:(NSDate *)date now:(NSDate *)now;
+ (BOOL)dateIsOlderThanOneWeek:(NSDate *)date now:(NSDate *)now;
+ (BOOL)dateIsToday:(NSDate *)date now:(NSDate *)now;
+ (BOOL)dateIsThisYear:(NSDate *)date now:(NSDate *)now;
+ (BOOL)dateIsYesterday:(NSDate *)date now:(NSDate *)now;
@end
#pragma mark -
@interface NSString (OWS_Test) @interface NSString (OWS_Test)
- (NSString *)removeAllCharactersIn:(NSCharacterSet *)characterSet; - (NSString *)removeAllCharactersIn:(NSCharacterSet *)characterSet;
@ -79,7 +91,19 @@
- (void)testDateComparators - (void)testDateComparators
{ {
NSDate *now = [NSDate new]; // Use a specific reference date to make this test deterministic,
// and to avoid failing around midnight, new year's, etc.
NSDateComponents *nowDateComponents = [NSDateComponents new];
nowDateComponents.year = 2015;
nowDateComponents.month = 8;
nowDateComponents.day = 31;
nowDateComponents.hour = 8;
NSDate *now = [[NSCalendar currentCalendar] dateFromComponents:nowDateComponents];
NSDateFormatter *formatter = [NSDateFormatter new];
formatter.dateStyle = NSDateFormatterLongStyle;
formatter.timeStyle = NSDateFormatterLongStyle;
NSLog(@"now: %@", [formatter stringFromDate:now]);
NSDate *oneSecondAgo = NSDate *oneSecondAgo =
[NSDate dateWithTimeIntervalSinceReferenceDate:[now timeIntervalSinceReferenceDate] - kSecondInterval]; [NSDate dateWithTimeIntervalSinceReferenceDate:[now timeIntervalSinceReferenceDate] - kSecondInterval];
@ -111,73 +135,83 @@
NSDate *twoYearsAhead = NSDate *twoYearsAhead =
[NSDate dateWithTimeIntervalSinceReferenceDate:[now timeIntervalSinceReferenceDate] + kYearInterval * 2]; [NSDate dateWithTimeIntervalSinceReferenceDate:[now timeIntervalSinceReferenceDate] + kYearInterval * 2];
// These might fail around midnight. NSLog(@"oneSecondAgo: %@", [formatter stringFromDate:oneSecondAgo]);
XCTAssertTrue([DateUtil dateIsToday:oneSecondAgo]);
XCTAssertTrue([DateUtil dateIsToday:oneMinuteAgo]); XCTAssertTrue([DateUtil dateIsToday:oneSecondAgo now:now]);
XCTAssertFalse([DateUtil dateIsToday:oneDayAgo]); XCTAssertTrue([DateUtil dateIsToday:oneMinuteAgo now:now]);
XCTAssertFalse([DateUtil dateIsToday:threeDaysAgo]); XCTAssertFalse([DateUtil dateIsToday:oneDayAgo now:now]);
XCTAssertFalse([DateUtil dateIsToday:tenDaysAgo]); XCTAssertFalse([DateUtil dateIsToday:threeDaysAgo now:now]);
XCTAssertFalse([DateUtil dateIsToday:oneYearAgo]); XCTAssertFalse([DateUtil dateIsToday:tenDaysAgo now:now]);
XCTAssertFalse([DateUtil dateIsToday:twoYearsAgo]); XCTAssertFalse([DateUtil dateIsToday:oneYearAgo now:now]);
XCTAssertFalse([DateUtil dateIsToday:twoYearsAgo now:now]);
// These might fail around midnight.
XCTAssertTrue([DateUtil dateIsToday:oneSecondAhead]); XCTAssertTrue([DateUtil dateIsToday:oneSecondAhead now:now]);
XCTAssertTrue([DateUtil dateIsToday:oneMinuteAhead]); XCTAssertTrue([DateUtil dateIsToday:oneMinuteAhead now:now]);
XCTAssertFalse([DateUtil dateIsToday:oneDayAhead]); XCTAssertFalse([DateUtil dateIsToday:oneDayAhead now:now]);
XCTAssertFalse([DateUtil dateIsToday:threeDaysAhead]); XCTAssertFalse([DateUtil dateIsToday:threeDaysAhead now:now]);
XCTAssertFalse([DateUtil dateIsToday:tenDaysAhead]); XCTAssertFalse([DateUtil dateIsToday:tenDaysAhead now:now]);
XCTAssertFalse([DateUtil dateIsToday:oneYearAhead]); XCTAssertFalse([DateUtil dateIsToday:oneYearAhead now:now]);
XCTAssertFalse([DateUtil dateIsToday:twoYearsAhead]); XCTAssertFalse([DateUtil dateIsToday:twoYearsAhead now:now]);
// These might fail around midnight. XCTAssertFalse([DateUtil dateIsYesterday:oneSecondAgo now:now]);
XCTAssertFalse([DateUtil dateIsOlderThanOneDay:oneSecondAgo]); XCTAssertFalse([DateUtil dateIsYesterday:oneMinuteAgo now:now]);
XCTAssertFalse([DateUtil dateIsOlderThanOneDay:oneMinuteAgo]); XCTAssertTrue([DateUtil dateIsYesterday:oneDayAgo now:now]);
XCTAssertTrue([DateUtil dateIsOlderThanOneDay:oneDayAgo]); XCTAssertFalse([DateUtil dateIsYesterday:threeDaysAgo now:now]);
XCTAssertTrue([DateUtil dateIsOlderThanOneDay:threeDaysAgo]); XCTAssertFalse([DateUtil dateIsYesterday:tenDaysAgo now:now]);
XCTAssertTrue([DateUtil dateIsOlderThanOneDay:tenDaysAgo]); XCTAssertFalse([DateUtil dateIsYesterday:oneYearAgo now:now]);
XCTAssertTrue([DateUtil dateIsOlderThanOneDay:oneYearAgo]); XCTAssertFalse([DateUtil dateIsYesterday:twoYearsAgo now:now]);
XCTAssertTrue([DateUtil dateIsOlderThanOneDay:twoYearsAgo]);
XCTAssertFalse([DateUtil dateIsYesterday:oneSecondAhead now:now]);
// These might fail around midnight. XCTAssertFalse([DateUtil dateIsYesterday:oneMinuteAhead now:now]);
XCTAssertFalse([DateUtil dateIsOlderThanOneDay:oneSecondAhead]); XCTAssertFalse([DateUtil dateIsYesterday:oneDayAhead now:now]);
XCTAssertFalse([DateUtil dateIsOlderThanOneDay:oneMinuteAhead]); XCTAssertFalse([DateUtil dateIsYesterday:threeDaysAhead now:now]);
XCTAssertFalse([DateUtil dateIsOlderThanOneDay:oneDayAhead]); XCTAssertFalse([DateUtil dateIsYesterday:tenDaysAhead now:now]);
XCTAssertFalse([DateUtil dateIsOlderThanOneDay:threeDaysAhead]); XCTAssertFalse([DateUtil dateIsYesterday:oneYearAhead now:now]);
XCTAssertFalse([DateUtil dateIsOlderThanOneDay:tenDaysAhead]); XCTAssertFalse([DateUtil dateIsYesterday:twoYearsAhead now:now]);
XCTAssertFalse([DateUtil dateIsOlderThanOneDay:oneYearAhead]);
XCTAssertFalse([DateUtil dateIsOlderThanOneDay:twoYearsAhead]); XCTAssertFalse([DateUtil dateIsOlderThanToday:oneSecondAgo now:now]);
XCTAssertFalse([DateUtil dateIsOlderThanToday:oneMinuteAgo now:now]);
// These might fail around midnight. XCTAssertTrue([DateUtil dateIsOlderThanToday:oneDayAgo now:now]);
XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:oneSecondAgo]); XCTAssertTrue([DateUtil dateIsOlderThanToday:threeDaysAgo now:now]);
XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:oneMinuteAgo]); XCTAssertTrue([DateUtil dateIsOlderThanToday:tenDaysAgo now:now]);
XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:oneDayAgo]); XCTAssertTrue([DateUtil dateIsOlderThanToday:oneYearAgo now:now]);
XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:threeDaysAgo]); XCTAssertTrue([DateUtil dateIsOlderThanToday:twoYearsAgo now:now]);
XCTAssertTrue([DateUtil dateIsOlderThanOneWeek:tenDaysAgo]);
XCTAssertTrue([DateUtil dateIsOlderThanOneWeek:oneYearAgo]); XCTAssertFalse([DateUtil dateIsOlderThanToday:oneSecondAhead now:now]);
XCTAssertTrue([DateUtil dateIsOlderThanOneWeek:twoYearsAgo]); XCTAssertFalse([DateUtil dateIsOlderThanToday:oneMinuteAhead now:now]);
XCTAssertFalse([DateUtil dateIsOlderThanToday:oneDayAhead now:now]);
// These might fail around midnight. XCTAssertFalse([DateUtil dateIsOlderThanToday:threeDaysAhead now:now]);
XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:oneSecondAhead]); XCTAssertFalse([DateUtil dateIsOlderThanToday:tenDaysAhead now:now]);
XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:oneMinuteAhead]); XCTAssertFalse([DateUtil dateIsOlderThanToday:oneYearAhead now:now]);
XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:oneDayAhead]); XCTAssertFalse([DateUtil dateIsOlderThanToday:twoYearsAhead now:now]);
XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:threeDaysAhead]);
XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:tenDaysAhead]); XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:oneSecondAgo now:now]);
XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:oneYearAhead]); XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:oneMinuteAgo now:now]);
XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:twoYearsAhead]); XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:oneDayAgo now:now]);
XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:threeDaysAgo now:now]);
// These might fail around new year's. XCTAssertTrue([DateUtil dateIsOlderThanOneWeek:tenDaysAgo now:now]);
XCTAssertTrue([DateUtil dateIsThisYear:oneSecondAgo]); XCTAssertTrue([DateUtil dateIsOlderThanOneWeek:oneYearAgo now:now]);
XCTAssertTrue([DateUtil dateIsThisYear:oneMinuteAgo]); XCTAssertTrue([DateUtil dateIsOlderThanOneWeek:twoYearsAgo now:now]);
XCTAssertTrue([DateUtil dateIsThisYear:oneDayAgo]);
XCTAssertFalse([DateUtil dateIsThisYear:oneYearAgo]); XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:oneSecondAhead now:now]);
XCTAssertFalse([DateUtil dateIsThisYear:twoYearsAgo]); XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:oneMinuteAhead now:now]);
XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:oneDayAhead now:now]);
// These might fail around new year's. XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:threeDaysAhead now:now]);
XCTAssertTrue([DateUtil dateIsThisYear:oneSecondAhead]); XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:tenDaysAhead now:now]);
XCTAssertTrue([DateUtil dateIsThisYear:oneMinuteAhead]); XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:oneYearAhead now:now]);
XCTAssertTrue([DateUtil dateIsThisYear:oneDayAhead]); XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:twoYearsAhead now:now]);
XCTAssertFalse([DateUtil dateIsThisYear:oneYearAhead]);
XCTAssertFalse([DateUtil dateIsThisYear:twoYearsAhead]); XCTAssertTrue([DateUtil dateIsThisYear:oneSecondAgo now:now]);
XCTAssertTrue([DateUtil dateIsThisYear:oneMinuteAgo now:now]);
XCTAssertTrue([DateUtil dateIsThisYear:oneDayAgo now:now]);
XCTAssertFalse([DateUtil dateIsThisYear:oneYearAgo now:now]);
XCTAssertFalse([DateUtil dateIsThisYear:twoYearsAgo now:now]);
XCTAssertTrue([DateUtil dateIsThisYear:oneSecondAhead now:now]);
XCTAssertTrue([DateUtil dateIsThisYear:oneMinuteAhead now:now]);
XCTAssertTrue([DateUtil dateIsThisYear:oneDayAhead now:now]);
XCTAssertFalse([DateUtil dateIsThisYear:oneYearAhead now:now]);
XCTAssertFalse([DateUtil dateIsThisYear:twoYearsAhead now:now]);
} }
- (void)testObjectComparison - (void)testObjectComparison

Loading…
Cancel
Save