Show disappearing messages timer

pull/347/head
Niels Andriesse 3 years ago
parent 547f5bf540
commit 2efcd20c64

@ -2541,6 +2541,8 @@
340FC89A204DAC8D007AEB0F /* OWSConversationSettingsViewController.m */,
340FC899204DAC8D007AEB0F /* OWSConversationSettingsViewDelegate.h */,
B84A89BB25DE328A0040017D /* ProfilePictureVC.swift */,
3427C64120F500DE00EEC730 /* OWSMessageTimerView.h */,
3427C64220F500DF00EEC730 /* OWSMessageTimerView.m */,
);
path = Settings;
sourceTree = "<group>";
@ -3009,8 +3011,6 @@
348570A620F67574004FF32B /* OWSMessageHeaderView.m */,
34DBF000206BD5A400025978 /* OWSMessageTextView.h */,
34DBEFFF206BD5A400025978 /* OWSMessageTextView.m */,
3427C64120F500DE00EEC730 /* OWSMessageTimerView.h */,
3427C64220F500DF00EEC730 /* OWSMessageTimerView.m */,
34277A5D20751BDC006049F2 /* OWSQuotedMessageView.h */,
34277A5C20751BDC006049F2 /* OWSQuotedMessageView.m */,
34D1F0A51F867BFC0066283D /* OWSSystemMessageCell.h */,

@ -1,12 +1,12 @@
// TODO
// Disappearing messages timer
// Brendan no likey buttons above text field
// Slight paging glitch
// Image detail VC transition glitch
// Photo rounding
// Scroll button behind mentions view
// Remaining search glitchiness
// Rethink disappearing messages timer positioning
final class ConversationVC : BaseVC, ConversationViewModelDelegate, OWSConversationSettingsViewDelegate, ConversationSearchControllerDelegate, UITableViewDataSource, UITableViewDelegate {
let thread: TSThread

@ -18,6 +18,8 @@ final class VisibleMessageCell : MessageCell, LinkPreviewViewV2Delegate {
private lazy var messageStatusImageViewTopConstraint = messageStatusImageView.pin(.top, to: .bottom, of: bubbleView, withInset: 0)
private lazy var messageStatusImageViewWidthConstraint = messageStatusImageView.set(.width, to: VisibleMessageCell.messageStatusImageViewSize)
private lazy var messageStatusImageViewHeightConstraint = messageStatusImageView.set(.height, to: VisibleMessageCell.messageStatusImageViewSize)
private lazy var timerViewOutgoingMessageConstraint = timerView.pin(.right, to: .left, of: bubbleView, withInset: -Values.mediumSpacing)
private lazy var timerViewIncomingMessageConstraint = timerView.pin(.left, to: .right, of: bubbleView, withInset: Values.mediumSpacing)
private lazy var panGestureRecognizer: UIPanGestureRecognizer = {
let result = UIPanGestureRecognizer(target: self, action: #selector(handlePan))
@ -109,6 +111,8 @@ final class VisibleMessageCell : MessageCell, LinkPreviewViewV2Delegate {
return result
}()
private lazy var timerView = OWSMessageTimerView()
// MARK: Settings
private static let messageStatusImageViewSize: CGFloat = 16
private static let authorLabelBottomSpacing: CGFloat = 4
@ -164,6 +168,10 @@ final class VisibleMessageCell : MessageCell, LinkPreviewViewV2Delegate {
bubbleViewLeftConstraint1.isActive = true
bubbleViewTopConstraint.isActive = true
bubbleViewRightConstraint1.isActive = true
// Timer view
addSubview(timerView)
timerView.center(.vertical, in: bubbleView)
timerViewOutgoingMessageConstraint.isActive = true
// Content view
bubbleView.addSubview(snContentView)
snContentView.pin(to: bubbleView)
@ -255,6 +263,15 @@ final class VisibleMessageCell : MessageCell, LinkPreviewViewV2Delegate {
[ messageStatusImageViewWidthConstraint, messageStatusImageViewHeightConstraint ].forEach {
$0.constant = (messageStatusImageView.isHidden) ? 0 : VisibleMessageCell.messageStatusImageViewSize
}
// Timer
if viewItem.isExpiringMessage {
let expirationTimestamp = message.expiresAt
let expiresInSeconds = message.expiresInSeconds
timerView.configure(withExpirationTimestamp: expirationTimestamp, initialDurationSeconds: expiresInSeconds, tintColor: Colors.text)
}
timerView.isHidden = !viewItem.isExpiringMessage
timerViewOutgoingMessageConstraint.isActive = (direction == .outgoing)
timerViewIncomingMessageConstraint.isActive = (direction == .incoming)
}
private func populateHeader(for viewItem: ConversationViewItem) {
@ -365,6 +382,7 @@ final class VisibleMessageCell : MessageCell, LinkPreviewViewV2Delegate {
let viewsToMove = [ bubbleView, profilePictureView, replyButton ]
viewsToMove.forEach { $0.transform = .identity }
replyButton.alpha = 0
timerView.prepareForReuse()
}
// MARK: Interaction

@ -30,6 +30,7 @@
#import "OWSDatabaseMigration.h"
#import "OWSMessageBubbleView.h"
#import "OWSMessageCell.h"
#import "OWSMessageTimerView.h"
#import "OWSNavigationController.h"
#import "OWSProgressView.h"
#import "OWSQuotedMessageView.h"

Loading…
Cancel
Save