mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-05-07 05:53:06 +00:00
Add checkbox for delete messages
This commit is contained in:
parent
9bc1d5018e
commit
1fd242122f
4 changed files with 94 additions and 22 deletions
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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){
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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(){
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue