Add Ephemeral Timer for messages

This commit is contained in:
Benoit Martins 2023-03-27 15:34:37 +02:00 committed by QuentinArguillere
parent ad7859d048
commit 9e630d7366
3 changed files with 75 additions and 0 deletions

View file

@ -206,6 +206,9 @@ class ChatConversationTableViewSwift: UIViewController, UICollectionViewDataSour
if cell.isPlayingVoiceRecording {
AudioPlayer.stopSharedPlayer()
}
if cell.ephemeralTimer != nil {
cell.ephemeralTimer?.invalidate()
}
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

View file

@ -121,6 +121,11 @@ class MultilineMessageCell: UICollectionViewCell, UICollectionViewDataSource, UI
let recordingView = UIView()
let ephemeralIcon = UIImageView(image: UIImage(named: "ephemeral_messages_color_A.png"))
let ephemeralTimerLabel = StyledLabel(VoipTheme.chat_conversation_ephemeral_timer)
var ephemeralTimer : Timer? = nil
var isPlayingVoiceRecording = false
var chatMessage: ChatMessage?
@ -431,6 +436,20 @@ class MultilineMessageCell: UICollectionViewCell, UICollectionViewDataSource, UI
UIDeviceBridge.displayModeSwitched.readCurrentAndObserve { _ in
self.replyContent.backgroundColor = VoipTheme.backgroundWhiteBlack.get()
}
//Ephemeral
contentViewBubble.addSubview(ephemeralTimerLabel)
ephemeralTimerLabel.bottomAnchor.constraint(equalTo: contentViewBubble.bottomAnchor, constant: -2).isActive = true
ephemeralTimerLabel.trailingAnchor.constraint(equalTo: contentViewBubble.trailingAnchor, constant: -14).isActive = true
ephemeralTimerLabel.text = "00:00"
ephemeralTimerLabel.height(10).done()
ephemeralTimerLabel.isHidden = true
contentViewBubble.addSubview(ephemeralIcon)
ephemeralIcon.bottomAnchor.constraint(equalTo: contentViewBubble.bottomAnchor, constant: -3).isActive = true
ephemeralIcon.trailingAnchor.constraint(equalTo: contentViewBubble.trailingAnchor, constant: -6).isActive = true
ephemeralIcon.size(w: 7, h: 8).done()
ephemeralIcon.isHidden = true
}
func initPlayerAudio(message: ChatMessage){
@ -590,6 +609,16 @@ class MultilineMessageCell: UICollectionViewCell, UICollectionViewDataSource, UI
displayImdnStatus(message: event.chatMessage!, state: event.chatMessage!.state)
}
if event.chatMessage!.isEphemeral {
ephemeralTimerLabel.isHidden = false
ephemeralIcon.isHidden = false
contentViewBubble.minWidth(44).done()
updateEphemeralTimes()
}else{
ephemeralTimerLabel.isHidden = true
ephemeralIcon.isHidden = true
}
if event.chatMessage!.isForward {
NSLayoutConstraint.activate(preContentViewBubbleConstraints)
NSLayoutConstraint.activate(forwardConstraints)
@ -1375,6 +1404,48 @@ class MultilineMessageCell: UICollectionViewCell, UICollectionViewDataSource, UI
return false;
}
func updateEphemeralTimes() {
let f = DateComponentsFormatter()
f.unitsStyle = .positional
f.zeroFormattingBehavior = [.pad]
if ((chatMessage != nil) && chatMessage!.isEphemeral) {
let duration = self.chatMessage?.ephemeralExpireTime == 0 ? self.chatMessage?.chatRoom?.ephemeralLifetime : self.chatMessage!.ephemeralExpireTime - Int(Date().timeIntervalSince1970)
if(duration! > 86400){
f.allowedUnits = [.day]
}else if(duration! > 3600){
f.allowedUnits = [.hour]
}else{
f.allowedUnits = [.minute, .second]
}
let textDuration = f.string(for: DateComponents(second: duration))?.capitalized ?? ""
self.ephemeralTimerLabel.text = textDuration
self.ephemeralTimerLabel.isHidden = false
self.ephemeralIcon.isHidden = false
ephemeralTimer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { timer in
let duration = self.chatMessage?.ephemeralExpireTime == 0 ? self.chatMessage?.ephemeralLifetime : self.chatMessage!.ephemeralExpireTime - Int(Date().timeIntervalSince1970)
if(duration! > 86400){
f.allowedUnits = [.day]
}else if(duration! > 3600){
f.allowedUnits = [.hour]
}else{
f.allowedUnits = [.minute, .second]
}
let textDuration = f.string(for: DateComponents(second: duration))?.capitalized ?? ""
self.ephemeralTimerLabel.text = textDuration
self.ephemeralTimerLabel.isHidden = false
self.ephemeralIcon.isHidden = false
if(duration! <= 0){
self.ephemeralTimer!.invalidate()
ChatConversationTableViewModel.sharedModel.reloadCollectionViewCell()
}
print("MultilineMessageCell updateEphemeralTimes \(duration)")
}
}
}
}
class DynamicHeightCollectionView: UICollectionView {

View file

@ -157,6 +157,7 @@ import UIKit
static let chat_conversation_download_progress_text = TextStyle(fgColor: LightDarkColor(voip_dark_gray,.white), bgColor: LightDarkColor(.clear,.clear), allCaps: false, align: .center, font: fontName+"-Regular", size: 12.0)
static let chat_conversation_avatar_small = TextStyle(fgColor: LightDarkColor(.white,voip_dark_gray), bgColor: LightDarkColor(.clear,.clear), allCaps: true, align: .center, font: fontName+"-Bold", size: 14.0)
static let chat_conversation_contact_date = TextStyle(fgColor: LightDarkColor(voip_dark_gray,.white), bgColor: LightDarkColor(.clear,.clear), allCaps: true, align: .left, font: fontName+"-Bold", size: 12.0)
static let chat_conversation_ephemeral_timer = TextStyle(fgColor: LightDarkColor(.orange,.orange), bgColor: LightDarkColor(.clear,.clear), allCaps: true, align: .left, font: fontName+"-Bold", size: 8.0)
// Buttons Background (State colors)