From e91599d986acfcf6a6a853882c4d1f87296e9646 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Thu, 12 Oct 2017 00:36:40 -0400 Subject: [PATCH] Restore message cell footers. // FREEBIE --- .../Cells/OWSExpirationTimerView.h | 10 +++- .../Cells/OWSExpirationTimerView.m | 59 ++++++------------- .../ConversationView/Cells/OWSMessageCell.m | 17 +++--- 3 files changed, 34 insertions(+), 52 deletions(-) diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSExpirationTimerView.h b/Signal/src/ViewControllers/ConversationView/Cells/OWSExpirationTimerView.h index f3f760eb4..689fb1ab6 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSExpirationTimerView.h +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSExpirationTimerView.h @@ -10,9 +10,15 @@ extern const CGFloat kExpirationTimerViewSize; @interface OWSExpirationTimerView : UIView -- (void)startTimerWithExpiration:(uint64_t)expirationTimestamp initialDurationSeconds:(uint32_t)initialDurationSeconds; +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE; +- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE; +- (instancetype)initWithExpiration:(uint64_t)expirationTimestamp + initialDurationSeconds:(uint32_t)initialDurationSeconds NS_DESIGNATED_INITIALIZER; -- (void)stopTimer; +- (void)ensureAnimations; + +- (void)clearAnimations; @end diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSExpirationTimerView.m b/Signal/src/ViewControllers/ConversationView/Cells/OWSExpirationTimerView.m index 59eff2c8f..9c9cf9637 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSExpirationTimerView.m +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSExpirationTimerView.m @@ -13,7 +13,7 @@ NS_ASSUME_NONNULL_BEGIN -const CGFloat kExpirationTimerViewSize = 22.f; +const CGFloat kExpirationTimerViewSize = 16.f; @interface OWSExpirationTimerView () @@ -36,24 +36,15 @@ const CGFloat kExpirationTimerViewSize = 22.f; [[NSNotificationCenter defaultCenter] removeObserver:self]; } -- (instancetype)initWithFrame:(CGRect)frame +- (instancetype)initWithExpiration:(uint64_t)expirationTimestamp initialDurationSeconds:(uint32_t)initialDurationSeconds { - self = [super initWithFrame:frame]; + self = [super initWithFrame:CGRectZero]; if (!self) { return self; } - [self commonInit]; - - return self; -} - -- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder -{ - self = [super initWithCoder:aDecoder]; - if (!self) { - return self; - } + self.expirationTimestamp = expirationTimestamp; + self.initialDurationSeconds = initialDurationSeconds; [self commonInit]; @@ -73,35 +64,25 @@ const CGFloat kExpirationTimerViewSize = 22.f; _fullHourglassImageView = [[UIImageView alloc] initWithImage:hourglassFullImage]; self.fullHourglassImageView.tintColor = [UIColor lightGrayColor]; [self addSubview:self.fullHourglassImageView]; - - [self.emptyHourglassImageView autoPinHeightToSuperviewWithMargin:3.f]; + + [self.emptyHourglassImageView autoPinHeightToSuperviewWithMargin:2.f]; [self.emptyHourglassImageView autoHCenterInSuperview]; [self.emptyHourglassImageView autoPinToSquareAspectRatio]; - [self.fullHourglassImageView autoPinHeightToSuperviewWithMargin:3.f]; + [self.fullHourglassImageView autoPinHeightToSuperviewWithMargin:2.f]; [self.fullHourglassImageView autoHCenterInSuperview]; [self.fullHourglassImageView autoPinToSquareAspectRatio]; [self autoSetDimension:ALDimensionWidth toSize:kExpirationTimerViewSize]; [self autoSetDimension:ALDimensionHeight toSize:kExpirationTimerViewSize]; } -- (void)startTimerWithExpiration:(uint64_t)expirationTimestamp initialDurationSeconds:(uint32_t)initialDurationSeconds -{ - OWSAssert([NSThread isMainThread]); - - self.expirationTimestamp = expirationTimestamp; - self.initialDurationSeconds = initialDurationSeconds; - - [self ensureAnimations]; -} - - (void)clearAnimations { + [self.layer removeAllAnimations]; [self.maskLayer removeAllAnimations]; [self.maskLayer removeFromSuperlayer]; self.maskLayer = nil; [self.fullHourglassImageView.layer.mask removeFromSuperlayer]; self.fullHourglassImageView.layer.mask = nil; - [self.layer removeAllAnimations]; self.layer.opacity = 1.f; self.emptyHourglassImageView.hidden = YES; self.fullHourglassImageView.hidden = YES; @@ -145,14 +126,17 @@ const CGFloat kExpirationTimerViewSize = 22.f; // Flashing animation. [UIView animateWithDuration:0.5f - delay:0.f - options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat - animations:^{ - self.layer.opacity = 0.f; - } completion:nil]; + delay:0.f + options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat + animations:^{ + self.layer.opacity = 0.f; + } + completion:^(BOOL finished) { + self.layer.opacity = 1.f; + }]; return; } - + self.emptyHourglassImageView.hidden = NO; self.fullHourglassImageView.hidden = NO; @@ -195,13 +179,6 @@ const CGFloat kExpirationTimerViewSize = 22.f; repeats:NO]; } -- (void)stopTimer -{ - OWSAssert([NSThread isMainThread]); - - [self clearAnimations]; -} - #pragma mark - Logging + (NSString *)logTag diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageCell.m b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageCell.m index 6c0ece618..b4bf11d2e 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageCell.m +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageCell.m @@ -319,7 +319,10 @@ NS_ASSUME_NONNULL_BEGIN if (hasExpirationTimer) { - self.expirationTimerView = [OWSExpirationTimerView new]; + uint64_t expirationTimestamp = message.expiresAt; + uint32_t expiresInSeconds = message.expiresInSeconds; + self.expirationTimerView = [[OWSExpirationTimerView alloc] initWithExpiration:expirationTimestamp + initialDurationSeconds:expiresInSeconds]; [self.footerView addSubview:self.expirationTimerView]; } if (attributedText) { @@ -731,8 +734,7 @@ NS_ASSUME_NONNULL_BEGIN [self.audioMessageView removeFromSuperview]; self.audioMessageView = nil; self.attachmentUploadView = nil; - if (self.expirationTimerView) - [self.expirationTimerView stopTimer]; + [self.expirationTimerView clearAnimations]; [self.expirationTimerView removeFromSuperview]; self.expirationTimerView = nil; } @@ -784,15 +786,12 @@ NS_ASSUME_NONNULL_BEGIN if (isCellVisible) { TSMessage *message = (TSMessage *)self.viewItem.interaction; if (message.shouldStartExpireTimer) { - uint64_t expirationTimestamp = message.expiresAt; - uint32_t expiresInSeconds = message.expiresInSeconds; - [self.expirationTimerView startTimerWithExpiration:expirationTimestamp - initialDurationSeconds:expiresInSeconds]; + [self.expirationTimerView ensureAnimations]; } else { - [self.expirationTimerView stopTimer]; + [self.expirationTimerView clearAnimations]; } } else { - [self.expirationTimerView stopTimer]; + [self.expirationTimerView clearAnimations]; } }