Restore message cell footers.

// FREEBIE
pull/1/head
Matthew Chen 7 years ago
parent 3723a4845f
commit e91599d986

@ -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

@ -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

@ -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];
}
}

Loading…
Cancel
Save