diff --git a/Classes/Swift/Chat/ViewModels/ChatConversationTableViewModel.swift b/Classes/Swift/Chat/ViewModels/ChatConversationTableViewModel.swift index c66ac76cd..71c3effb7 100644 --- a/Classes/Swift/Chat/ViewModels/ChatConversationTableViewModel.swift +++ b/Classes/Swift/Chat/ViewModels/ChatConversationTableViewModel.swift @@ -35,7 +35,7 @@ class ChatConversationTableViewModel: ControlsViewModel { func getMessage(index: Int) -> EventLog? { if (chatRoom != nil) { - let chatRoomEvents = chatRoom?.getHistoryRangeEvents(begin: index, end: index+1) + let chatRoomEvents = chatRoom?.getHistoryRangeEvents(begin: ChatConversationTableViewModel.sharedModel.getNBMessages() - 1 - index, end: ChatConversationTableViewModel.sharedModel.getNBMessages() - index) return chatRoomEvents?.first }else{ return nil @@ -59,7 +59,7 @@ class ChatConversationTableViewModel: ControlsViewModel { chatRoomEvents?.reversed().forEach({ event in let chat = event.chatMessage if (chat != nil && msgId == chat?.messageId) { - index = indexRange ; + index = ChatConversationTableViewModel.sharedModel.getNBMessages() - 1 - indexRange ; } indexRange += 1 }) diff --git a/Classes/Swift/Chat/Views/ChatConversationTableViewSwift.swift b/Classes/Swift/Chat/Views/ChatConversationTableViewSwift.swift index 4a89bbff6..5af9e2ad0 100644 --- a/Classes/Swift/Chat/Views/ChatConversationTableViewSwift.swift +++ b/Classes/Swift/Chat/Views/ChatConversationTableViewSwift.swift @@ -94,7 +94,7 @@ class ChatConversationTableViewSwift: UIViewController, UICollectionViewDataSour (collectionView.collectionViewLayout as! UICollectionViewFlowLayout).estimatedItemSize = UICollectionViewFlowLayout.automaticSize (collectionView.collectionViewLayout as! UICollectionViewFlowLayout).minimumLineSpacing = 2 - collectionView.transform = CGAffineTransform(scaleX: 1, y: -1) + //collectionView.transform = CGAffineTransform(scaleX: 1, y: -1) } override func viewWillAppear(_ animated: Bool) { @@ -104,53 +104,33 @@ class ChatConversationTableViewSwift: UIViewController, UICollectionViewDataSour override func viewDidAppear(_ animated: Bool) { createFloatingButton() if ChatConversationTableViewModel.sharedModel.getNBMessages() > 0 { - scrollToBottom() + scrollToBottom(animated: false) } } func scrollToMessage(message: ChatMessage){ let messageIndex = ChatConversationTableViewModel.sharedModel.getIndexMessage(message: message) - collectionView.reloadData() collectionView.layoutIfNeeded() collectionView.scrollToItem(at: IndexPath(row: messageIndex, section: 0), at: .top, animated: false) - //Scroll twice because collection view doesn't have time to calculate cell size - DispatchQueue.main.asyncAfter(deadline: .now() + 0.05) { - self.collectionView.scrollToItem(at: IndexPath(row: messageIndex, section: 0), at: .top, animated: false) - } } - func scrollToBottom(){ - self.collectionView.scrollToItem(at: IndexPath(item: 0, section: 0), at: .top, animated: false) + func scrollToBottom(animated: Bool){ collectionView.reloadData() + self.collectionView.scrollToItem(at: IndexPath(item: ChatConversationTableViewModel.sharedModel.getNBMessages()-1, section: 0), at: .bottom, animated: false) + //Scroll twice because collection view doesn't have time to calculate cell size + DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) { + self.collectionView.scrollToItem(at: IndexPath(item: ChatConversationTableViewModel.sharedModel.getNBMessages()-1, section: 0), at: .bottom, animated: animated) + } ChatConversationViewSwift.markAsRead(ChatConversationViewModel.sharedModel.chatRoom?.getCobject) self.floatingScrollButton?.isHidden = true self.floatingScrollBackground?.isHidden = true scrollBadge!.text = "0" } - - func scrollToBottomNewMessage(){ - self.collectionView.scrollToItem(at: IndexPath(item: 0, section: 0), at: .top, animated: true) - ChatConversationViewSwift.markAsRead(ChatConversationViewModel.sharedModel.chatRoom?.getCobject) - self.floatingScrollButton?.isHidden = true - self.floatingScrollBackground?.isHidden = true - scrollBadge!.text = "0" - } func scrollToBottomWithRelaod(){ if (ChatConversationTableViewModel.sharedModel.getNBMessages() > 1){ - let isDisplayingBottomOfTable = collectionView.contentOffset.y <= 20 - collectionView.reloadData() - if isDisplayingBottomOfTable { - self.collectionView.scrollToItem(at: IndexPath(item: 1, section: 0), at: .top, animated: false) - DispatchQueue.main.asyncAfter(deadline: .now() + 0.05) { - self.scrollToBottomNewMessage() - } - }else{ - DispatchQueue.main.asyncAfter(deadline: .now() + 0.05) { - self.scrollToBottom() - } - } + scrollToBottom(animated: true) if ChatConversationTableViewModel.sharedModel.editModeOn.value! { ChatConversationTableViewModel.sharedModel.messageListSelected.value!.insert(false, at: 0) } @@ -162,22 +142,15 @@ class ChatConversationTableViewSwift: UIViewController, UICollectionViewDataSour func refreshData(){ if (ChatConversationTableViewModel.sharedModel.getNBMessages() > 1){ - let indexBottom = collectionView.indexPathsForVisibleItems.sorted().first?.row - let isDisplayingBottomOfTable = collectionView.contentOffset.y <= 20 - let sizeCell = (self.collectionView.cellForItem(at: IndexPath(row: indexBottom!, section: 0))?.frame.size.height) - collectionView.reloadData() + let isDisplayingBottomOfTable = collectionView.contentOffset.y >= (collectionView.contentSize.height - collectionView.bounds.height + collectionView.contentInset.bottom) - 20 if isDisplayingBottomOfTable { - self.collectionView.scrollToItem(at: IndexPath(item: 1, section: 0), at: .top, animated: false) - DispatchQueue.main.asyncAfter(deadline: .now() + 0.05) { - self.scrollToBottomNewMessage() - } + scrollToBottom(animated: true) } else { - DispatchQueue.main.asyncAfter(deadline: .now() + 0.05) { - self.collectionView.contentOffset = CGPoint(x: self.collectionView.contentOffset.x, y: self.collectionView.contentOffset.y + sizeCell! + 2.0) - } + collectionView.reloadData() scrollBadge!.isHidden = false scrollBadge!.text = "\(ChatConversationViewModel.sharedModel.chatRoom?.unreadMessagesCount ?? 0)" + } if ChatConversationTableViewModel.sharedModel.editModeOn.value! { ChatConversationTableViewModel.sharedModel.messageListSelected.value!.insert(false, at: 0) @@ -189,16 +162,16 @@ class ChatConversationTableViewSwift: UIViewController, UICollectionViewDataSour func scrollViewDidScroll(_ scrollView: UIScrollView) { let contentOffsetY = scrollView.contentOffset.y - if contentOffsetY <= 20 /* Needed offset */ { - self.floatingScrollButton?.isHidden = true - self.floatingScrollBackground?.isHidden = true - self.scrollBadge?.text = "0" + if contentOffsetY >= (collectionView.contentSize.height - collectionView.bounds.height + collectionView.contentInset.bottom) - 20{ + floatingScrollButton?.isHidden = true + floatingScrollBackground?.isHidden = true + scrollBadge?.text = "0" ChatConversationViewSwift.markAsRead(ChatConversationViewModel.sharedModel.chatRoom?.getCobject) } else { - self.floatingScrollButton?.isHidden = false - self.floatingScrollBackground?.isHidden = false; - if(self.scrollBadge?.text == "0"){ - self.scrollBadge?.isHidden = true + floatingScrollButton?.isHidden = false + floatingScrollBackground?.isHidden = false; + if(scrollBadge?.text == "0"){ + scrollBadge?.isHidden = true } } } @@ -239,9 +212,8 @@ class ChatConversationTableViewSwift: UIViewController, UICollectionViewDataSour } } } - - cell.contentView.transform = CGAffineTransform(scaleX: 1, y: -1) + //cell.contentView.transform = CGAffineTransform(scaleX: 1, y: -1) return cell } diff --git a/Classes/Swift/Chat/Views/MultilineMessageCell.swift b/Classes/Swift/Chat/Views/MultilineMessageCell.swift index cc1d83983..943b36d72 100644 --- a/Classes/Swift/Chat/Views/MultilineMessageCell.swift +++ b/Classes/Swift/Chat/Views/MultilineMessageCell.swift @@ -1449,7 +1449,6 @@ class MultilineMessageCell: UICollectionViewCell, UICollectionViewDataSource, UI } }) } else { - print("indexUploadTransferProgressindexUploadTransferProgress \(indexUploadTransferProgress)") if((chatMessage?.contents.count)! > 1){ DispatchQueue.main.async(execute: { [self] in if (offset == total) { @@ -1498,8 +1497,8 @@ class MultilineMessageCell: UICollectionViewCell, UICollectionViewDataSource, UI func isFirstIndexInTableView(indexPath: IndexPath, chat: ChatMessage) -> Bool{ let MAX_AGGLOMERATED_TIME=300 var previousEvent : EventLog? = nil - let indexOfPreviousEvent = indexPath.row + 1 - previousEvent = ChatConversationTableViewModel.sharedModel.getMessage(index: indexPath.row+1) + let indexOfPreviousEvent = indexPath.row - 1 + previousEvent = ChatConversationTableViewModel.sharedModel.getMessage(index: indexPath.row-1) if (indexOfPreviousEvent > -1 && indexOfPreviousEvent < ChatConversationTableViewModel.sharedModel.getNBMessages()) { if ((previousEvent?.type.rawValue)! != LinphoneEventLogTypeConferenceChatMessage.rawValue) { return true