From 346e84615f35c8478bf5e43f27644baee081fa05 Mon Sep 17 00:00:00 2001 From: Benoit Martins Date: Thu, 30 Mar 2023 12:09:11 +0200 Subject: [PATCH] Fix QLPreviewController --- .../ChatConversationTableViewModel.swift | 8 +++ .../ChatConversationTableViewSwift.swift | 66 ++++++++++++++----- .../Chat/Views/MultilineMessageCell.swift | 8 +++ Resources/linphonerc | 1 + Resources/linphonerc-factory | 1 + Resources/linphonerc~ipad | 1 + 6 files changed, 67 insertions(+), 18 deletions(-) diff --git a/Classes/Swift/Chat/ViewModels/ChatConversationTableViewModel.swift b/Classes/Swift/Chat/ViewModels/ChatConversationTableViewModel.swift index 3a40ca438..96ca37ab9 100644 --- a/Classes/Swift/Chat/ViewModels/ChatConversationTableViewModel.swift +++ b/Classes/Swift/Chat/ViewModels/ChatConversationTableViewModel.swift @@ -20,6 +20,9 @@ class ChatConversationTableViewModel: ControlsViewModel { var refreshIndexPath = MutableLiveData(0) + var onClickIndexPath = MutableLiveData(0) + var onClickMessageIndexPath = 0 + override init() { super.init() } @@ -72,4 +75,9 @@ class ChatConversationTableViewModel: ControlsViewModel { func reloadCollectionViewCell(){ refreshIndexPath.value! += 1 } + + func onGridClick(indexMessage: Int, index :Int){ + onClickMessageIndexPath = indexMessage + onClickIndexPath.value! = index + } } diff --git a/Classes/Swift/Chat/Views/ChatConversationTableViewSwift.swift b/Classes/Swift/Chat/Views/ChatConversationTableViewSwift.swift index ac207a3da..250a7f137 100644 --- a/Classes/Swift/Chat/Views/ChatConversationTableViewSwift.swift +++ b/Classes/Swift/Chat/Views/ChatConversationTableViewSwift.swift @@ -35,6 +35,7 @@ class ChatConversationTableViewSwift: UIViewController, UICollectionViewDataSour var floatingScrollBackground : UIButton? var previewItems : [QLPreviewItem?] = [] + var afterPreviewIndex = -1 override func viewDidLoad() { super.viewDidLoad() @@ -52,6 +53,10 @@ class ChatConversationTableViewSwift: UIViewController, UICollectionViewDataSour self.collectionView.reloadData() } + ChatConversationTableViewModel.sharedModel.onClickIndexPath.observe { index in + self.onGridClick(indexMessage: ChatConversationTableViewModel.sharedModel.onClickMessageIndexPath, index: index!) + } + collectionView.isUserInteractionEnabled = true } @@ -204,22 +209,6 @@ class ChatConversationTableViewSwift: UIViewController, UICollectionViewDataSour self.onImageClick(chatMessage: event.chatMessage!) } } - - /* - if (!cell.collectionViewImagesGrid.isHidden){ - cell.onClick { - let previewController = QLPreviewController() - self.previewItems = [] - event.chatMessage?.contents.forEach({ content in - self.previewItems.append(self.getPreviewItem(filePath: (content.filePath))) - }) - - previewController.currentPreviewItemIndex = 0 - previewController.dataSource = self - self.present(previewController, animated: true, completion: nil) - } - } - */ } @@ -445,13 +434,21 @@ class ChatConversationTableViewSwift: UIViewController, UICollectionViewDataSour return (previewItems[index] as QLPreviewItem?)! } + func previewControllerDidDismiss(_ controller: QLPreviewController) { + print("ChatConversationTableViewSwift controller \(afterPreviewIndex)") + if afterPreviewIndex > -1 { + collectionView.scrollToItem(at: IndexPath(row: afterPreviewIndex, section: 0), at: .centeredVertically, animated: false) + + } + } + func onImageClick(chatMessage: ChatMessage) { let state = chatMessage.state if (state.rawValue == LinphoneChatMessageStateNotDelivered.rawValue) { print("Messsage not delivered") } else { - if VFSUtil.vfsEnabled(groupName: kLinphoneMsgNotificationAppGroupId){ + if (VFSUtil.vfsEnabled(groupName: kLinphoneMsgNotificationAppGroupId) || ConfigManager.instance().lpConfigBoolForKey(key: "use_in_app_file_viewer_for_non_encrypted_files", section: "app")){ let view: ImageView = VIEW(ImageView.compositeViewDescription()) let image = UIImage(contentsOfFile: chatMessage.contents.first!.filePath) PhoneMainView.instance().changeCurrentView(view.compositeViewDescription()) @@ -461,10 +458,43 @@ class ChatConversationTableViewSwift: UIViewController, UICollectionViewDataSour self.previewItems = [] self.previewItems.append(self.getPreviewItem(filePath: (chatMessage.contents.first?.filePath)!)) + afterPreviewIndex = 0 + previewController.currentPreviewItemIndex = 0 previewController.dataSource = self - self.present(previewController, animated: true, completion: nil) + previewController.delegate = self + previewController.reloadData() + PhoneMainView.instance().mainViewController.present(previewController, animated: true, completion: nil) } } } + + func onGridClick(indexMessage: Int, index: Int) { + let chatMessage = ChatConversationTableViewModel.sharedModel.getMessage(index: indexMessage)?.chatMessage + let state = chatMessage!.state + if (state.rawValue == LinphoneChatMessageStateNotDelivered.rawValue) { + print("Messsage not delivered") + } else { + if (VFSUtil.vfsEnabled(groupName: kLinphoneMsgNotificationAppGroupId) || ConfigManager.instance().lpConfigBoolForKey(key: "use_in_app_file_viewer_for_non_encrypted_files", section: "app")){ + let view: ImageView = VIEW(ImageView.compositeViewDescription()) + let image = UIImage(contentsOfFile: chatMessage!.contents[index].filePath) + PhoneMainView.instance().changeCurrentView(view.compositeViewDescription()) + view.image = image + } else { + let previewController = QLPreviewController() + self.previewItems = [] + chatMessage?.contents.forEach({ content in + self.previewItems.append(self.getPreviewItem(filePath: (content.filePath))) + }) + + afterPreviewIndex = indexMessage + + previewController.dataSource = self + previewController.currentPreviewItemIndex = index + previewController.delegate = self + PhoneMainView.instance().mainViewController.present(previewController, animated: true, completion: nil) + } + } + } + } diff --git a/Classes/Swift/Chat/Views/MultilineMessageCell.swift b/Classes/Swift/Chat/Views/MultilineMessageCell.swift index f5caa9ea1..4371d5784 100644 --- a/Classes/Swift/Chat/Views/MultilineMessageCell.swift +++ b/Classes/Swift/Chat/Views/MultilineMessageCell.swift @@ -132,6 +132,8 @@ class MultilineMessageCell: UICollectionViewCell, UICollectionViewDataSource, UI var indexTransferProgress: Int = -1 var indexUploadTransferProgress: Int = -1 + var selfIndexMessage: Int = -1 + override init(frame: CGRect) { super.init(frame: frame) @@ -561,6 +563,7 @@ class MultilineMessageCell: UICollectionViewCell, UICollectionViewDataSource, UI } func configure(event: EventLog, selfIndexPathConfigure: IndexPath) { + selfIndexMessage = selfIndexPathConfigure.row chatMessage = event.chatMessage addMessageDelegate() if event.chatMessage != nil { @@ -1126,6 +1129,11 @@ class MultilineMessageCell: UICollectionViewCell, UICollectionViewDataSource, UI uploadContentCollection.append(uploadView) uploadView.content = chatMessage?.contents[indexPath.row] uploadView.size(w: 138, h: 138).done() + + viewCell.onClick { + ChatConversationTableViewModel.sharedModel.onGridClick(indexMessage: self.selfIndexMessage, index: indexPath.row) + } + viewCell.addSubview(uploadView) } diff --git a/Resources/linphonerc b/Resources/linphonerc index 39f857362..6f238a723 100644 --- a/Resources/linphonerc +++ b/Resources/linphonerc @@ -18,6 +18,7 @@ auto_download_incoming_files_max_size=0 lime_migration_done=0 use_rls_presence=1 use_callkit=1 +use_in_app_file_viewer_for_non_encrypted_files=0 unexpected_pushkit=0 force_lime_chat_rooms=0 disable_chat_feature=0 diff --git a/Resources/linphonerc-factory b/Resources/linphonerc-factory index dcf48706c..51788d903 100644 --- a/Resources/linphonerc-factory +++ b/Resources/linphonerc-factory @@ -24,6 +24,7 @@ publish_presence=0 backgroundmode_preference=1 use_rls_presence=1 use_callkit=1 +use_in_app_file_viewer_for_non_encrypted_files=0 accept_early_media=0 diff --git a/Resources/linphonerc~ipad b/Resources/linphonerc~ipad index 08ea09317..5f624a5ee 100644 --- a/Resources/linphonerc~ipad +++ b/Resources/linphonerc~ipad @@ -14,6 +14,7 @@ stun_preference=stun.linphone.org voiceproc_preference=1 repeat_call_notification=1 use_callkit=1 +use_in_app_file_viewer_for_non_encrypted_files=0 unexpected_pushkit=0 [default_values]