Add checkbox for delete messages

This commit is contained in:
Benoit Martins 2023-03-30 18:08:18 +02:00 committed by QuentinArguillere
parent 9bc1d5018e
commit 1fd242122f
4 changed files with 94 additions and 22 deletions

View file

@ -13,8 +13,6 @@ import linphonesw
class ChatConversationTableViewModel: ControlsViewModel {
static let sharedModel = ChatConversationTableViewModel()
var messageListHistory : [ChatMessage] = []
var chatRoom: ChatRoom? = nil
@ -26,6 +24,8 @@ class ChatConversationTableViewModel: ControlsViewModel {
var editModeOn = MutableLiveData<Bool>(false)
var messageListSelected = MutableLiveData<[Bool]>([])
override init() {
super.init()
}
@ -87,4 +87,18 @@ class ChatConversationTableViewModel: ControlsViewModel {
func changeEditMode(editMode :Bool){
editModeOn.value = editMode
}
func selectAllMessages(){
for i in 0...messageListSelected.value!.count {
messageListSelected.value![i] = true
}
refreshIndexPath.value! += 1
}
func unSelectAllMessages(){
for i in 0...messageListSelected.value!.count {
messageListSelected.value![i] = false
}
refreshIndexPath.value! += 1
}
}

View file

@ -58,7 +58,7 @@ class ChatConversationTableViewSwift: UIViewController, UICollectionViewDataSour
}
ChatConversationTableViewModel.sharedModel.editModeOn.observe { mode in
self.changeEditMode(editModeOn: mode!)
self.collectionView.reloadData()
}
@ -150,6 +150,9 @@ class ChatConversationTableViewSwift: UIViewController, UICollectionViewDataSour
self.scrollToBottom()
}
}
if ChatConversationTableViewModel.sharedModel.editModeOn.value! {
ChatConversationTableViewModel.sharedModel.messageListSelected.value!.insert(false, at: 0)
}
}
func refreshData(){
@ -170,6 +173,9 @@ class ChatConversationTableViewSwift: UIViewController, UICollectionViewDataSour
scrollBadge!.isHidden = false
scrollBadge!.text = "\(ChatConversationViewModel.sharedModel.chatRoom?.unreadMessagesCount ?? 0)"
}
if ChatConversationTableViewModel.sharedModel.editModeOn.value! {
ChatConversationTableViewModel.sharedModel.messageListSelected.value!.insert(false, at: 0)
}
}
func scrollViewDidScroll(_ scrollView: UIScrollView) {
@ -193,7 +199,14 @@ class ChatConversationTableViewSwift: UIViewController, UICollectionViewDataSour
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: MultilineMessageCell.reuseId, for: indexPath) as! MultilineMessageCell
if let event = ChatConversationTableViewModel.sharedModel.getMessage(index: indexPath.row){
cell.configure(event: event, selfIndexPathConfigure: indexPath)
if(ChatConversationTableViewModel.sharedModel.editModeOn.value! && indexPath.row >= ChatConversationTableViewModel.sharedModel.messageListSelected.value!.count){
for _ in ChatConversationTableViewModel.sharedModel.messageListSelected.value!.count...indexPath.row {
ChatConversationTableViewModel.sharedModel.messageListSelected.value!.append(false)
}
}
cell.configure(event: event, selfIndexPathConfigure: indexPath, editMode: ChatConversationTableViewModel.sharedModel.editModeOn.value!, selected: ChatConversationTableViewModel.sharedModel.editModeOn.value! ? ChatConversationTableViewModel.sharedModel.messageListSelected.value![indexPath.row] : false)
if (event.chatMessage != nil){
cell.onLongClickOneClick {
@ -416,6 +429,10 @@ class ChatConversationTableViewSwift: UIViewController, UICollectionViewDataSour
}
func deleteMessage(message: ChatMessage){
if ChatConversationTableViewModel.sharedModel.editModeOn.value! {
let indexDeletedMessage = ChatConversationTableViewModel.sharedModel.getIndexMessage(message: message)
ChatConversationTableViewModel.sharedModel.messageListSelected.value!.remove(at: indexDeletedMessage)
}
message.chatRoom?.deleteMessage(message: message)
collectionView.reloadData()
}
@ -499,8 +516,4 @@ class ChatConversationTableViewSwift: UIViewController, UICollectionViewDataSour
}
}
}
func changeEditMode(editModeOn: Bool){
}
}

View file

@ -605,12 +605,13 @@ class ChatConversationViewSwift: BackActionsNavigationView, PHPickerViewControll
override func editModeOn(){
super.editModeOn()
//tableController.setEditing(true, animated: false)
ChatConversationTableViewModel.sharedModel.changeEditMode(editMode: true)
}
override func editModeOff(){
super.editModeOff()
//tableController.setEditing(false, animated: false)
ChatConversationTableViewModel.sharedModel.messageListSelected.value?.removeAll()
ChatConversationTableViewModel.sharedModel.changeEditMode(editMode: false)
}
override func selectDeselectAll(){

View file

@ -134,16 +134,21 @@ class MultilineMessageCell: UICollectionViewCell, UICollectionViewDataSource, UI
var selfIndexMessage: Int = -1
var deleteItemCheckBox = StyledCheckBox()
override init(frame: CGRect) {
super.init(frame: frame)
//CheckBox for select item to delete
contentView.addSubview(deleteItemCheckBox)
//Event Message
contentView.addSubview(eventMessageView)
constraintEventMesssage = [
eventMessageView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 0),
eventMessageView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: 0),
eventMessageView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 0),
eventMessageView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: 0)
eventMessageView.trailingAnchor.constraint(equalTo: deleteItemCheckBox.leadingAnchor, constant: 0)
]
eventMessageView.height(40).done()
@ -166,17 +171,17 @@ class MultilineMessageCell: UICollectionViewCell, UICollectionViewDataSource, UI
eventMessageView.isHidden = true
//Message
contentView.addSubview(contactDateLabel)
constraintDateBubble = contactDateLabel.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 4)
constraintDateBubbleHidden = contactDateLabel.topAnchor.constraint(equalTo: contentView.topAnchor)
constraintDateLeadingBubble = contactDateLabel.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 40)
constraintDateTrailingBubble = contactDateLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -22)
constraintDateTrailingBubble = contactDateLabel.trailingAnchor.constraint(equalTo: deleteItemCheckBox.leadingAnchor, constant: -22)
constraintDateBubble!.isActive = true
contactDateLabel.isHidden = true
contentView.addSubview(contentBubble)
contentBubble.translatesAutoresizingMaskIntoConstraints = false
constraintBubble = [
@ -184,7 +189,7 @@ class MultilineMessageCell: UICollectionViewCell, UICollectionViewDataSource, UI
contentBubble.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: 0)
]
constraintLeadingBubble = contentBubble.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 40)
constraintTrailingBubble = contentBubble.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -22)
constraintTrailingBubble = contentBubble.trailingAnchor.constraint(equalTo: deleteItemCheckBox.leadingAnchor, constant: -22)
NSLayoutConstraint.activate(constraintBubble)
constraintLeadingBubble!.isActive = true
@ -205,7 +210,7 @@ class MultilineMessageCell: UICollectionViewCell, UICollectionViewDataSource, UI
contentBubble.addSubview(chatRead)
chatRead.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -2).isActive = true
chatRead.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -8).isActive = true
chatRead.trailingAnchor.constraint(equalTo: deleteItemCheckBox.leadingAnchor, constant: -8).isActive = true
chatRead.size(w: 10, h: 10).done()
chatRead.isHidden = true
@ -562,10 +567,11 @@ class MultilineMessageCell: UICollectionViewCell, UICollectionViewDataSource, UI
super.prepareForReuse()
}
func configure(event: EventLog, selfIndexPathConfigure: IndexPath) {
func configure(event: EventLog, selfIndexPathConfigure: IndexPath, editMode: Bool, selected: Bool) {
selfIndexMessage = selfIndexPathConfigure.row
chatMessage = event.chatMessage
addMessageDelegate()
if event.chatMessage != nil {
contentBubble.isHidden = false
eventMessageView.isHidden = true
@ -573,14 +579,25 @@ class MultilineMessageCell: UICollectionViewCell, UICollectionViewDataSource, UI
NSLayoutConstraint.deactivate(constraintEventMesssage)
NSLayoutConstraint.deactivate(constraintEventMesssageLabel)
if !event.chatMessage!.isOutgoing {
constraintLeadingBubble?.isActive = true
constraintTrailingBubble?.isActive = false
if editMode {
constraintLeadingBubble?.isActive = false
constraintTrailingBubble?.isActive = true
}else{
constraintLeadingBubble?.isActive = true
constraintTrailingBubble?.isActive = false
}
imageUser.isHidden = false
if isFirstIndexInTableView(indexPath: selfIndexPathConfigure, chat: event.chatMessage!) {
imageUser.fillFromAddress(address: (event.chatMessage?.fromAddress)!)
contactDateLabel.text = contactDateForChat(message: event.chatMessage!)
contactDateLabel.isHidden = false
constraintDateLeadingBubble?.isActive = true
if editMode {
constraintDateTrailingBubble?.isActive = true
contactDateLabel.textAlignment = .right
}else{
constraintDateLeadingBubble?.isActive = true
}
contactDateLabel.size(w: 200, h: 20).done()
}else{
constraintDateBubble?.isActive = false
@ -895,6 +912,29 @@ class MultilineMessageCell: UICollectionViewCell, UICollectionViewDataSource, UI
eventMessageLabel.textColor = UIColor("D").withAlphaComponent(0.6)
}
}
if (editMode) {
deleteItemCheckBox.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -18).isActive = true
deleteItemCheckBox.isSelected = selected
if (event.chatMessage != nil){
deleteItemCheckBox.matchCenterYOf(view: contentBubble).done()
}else{
deleteItemCheckBox.matchCenterYOf(view: contentView).done()
}
imageUser.isHidden = true
contentView.onClick {
self.deleteItemCheckBox.isSelected = !self.deleteItemCheckBox.isSelected
ChatConversationTableViewModel.sharedModel.messageListSelected.value![self.selfIndexMessage] = self.deleteItemCheckBox.isSelected
}
deleteItemCheckBox.onClick {
self.deleteItemCheckBox.isSelected = !self.deleteItemCheckBox.isSelected
ChatConversationTableViewModel.sharedModel.messageListSelected.value![self.selfIndexMessage] = self.deleteItemCheckBox.isSelected
}
}else{
deleteItemCheckBox.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: 0).isActive = true
deleteItemCheckBox.isHidden = true
deleteItemCheckBox.width(0).done()
}
}
@ -1332,17 +1372,21 @@ class MultilineMessageCell: UICollectionViewCell, UICollectionViewDataSource, UI
break
}
}
if((chatMessage?.contents.count)! > 1){
if((chatMessage?.contents.count)! > 1 && indexUploadTransferProgress > -1){
uploadContentCollection[indexUploadTransferProgress]!.circularProgressBarView.isHidden = false
}
}
if((chatMessage?.contents.count)! > 1){
DispatchQueue.main.async(execute: { [self] in
if (offset == total) {
uploadContentCollection[indexUploadTransferProgress]!.circularProgressBarView.isHidden = true
if(indexUploadTransferProgress > -1){
uploadContentCollection[indexUploadTransferProgress]!.circularProgressBarView.isHidden = true
}
indexUploadTransferProgress = -1
} else {
uploadContentCollection[indexUploadTransferProgress]!.setUpCircularProgressBarView(toValue: p)
if(indexUploadTransferProgress > -1){
uploadContentCollection[indexUploadTransferProgress]!.setUpCircularProgressBarView(toValue: p)
}
}
})
}