// // + MessagesDisplayDelegate.swift // PayCash // // Created by Saveliy Stavitsky on 2/9/21. // Copyright © 2021 AM. All rights reserved. // import MessageKit import UIKit extension CryptoChatControllerChat: MessagesDisplayDelegate { func enabledDetectors(for message: MessageType, at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView) -> [DetectorType] { return [.url, .address, .phoneNumber, .date, .transitInformation] } func messageStyle(for message: MessageType, at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView) -> MessageStyle { let tail: MessageStyle.TailCorner = isFromCurrentSender(message: message) ? .bottomRight : .bottomLeft return .bubble } func backgroundColor(for message: MessageType, at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView) -> UIColor { let msg = messages[messages.count - loadedMsgsCount + indexPath.section] if !msg.isInSyncWithBlockchain { return (msg.timestamp < msgsHistoryService.lastSyncTimestamp || (msg.isUnsent == true)) ? Asset.brick.color : Asset.deepWater.color.withAlphaComponent(0.05) } else { return isFromCurrentSender(message: message) ? Asset.deepWater.color.withAlphaComponent(0.1) : Asset.marble.color } } func configureAccessoryView(_ accessoryView: UIView, for message: MessageType, at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView) { // Cells are reused, so only add a button here once. For real use you would need to // ensure any subviews are removed if not needed accessoryView.subviews.forEach { $0.removeFromSuperview() } let msg = messages[messages.count - loadedMsgsCount + indexPath.section] if (!msg.isInSyncWithBlockchain && msg.timestamp < msgsHistoryService.lastSyncTimestamp) || (msg.isUnsent == true) { let button = UIImageView() // button.tintColor = .primaryColor accessoryView.addSubview(button) button.frame = accessoryView.bounds button.isUserInteractionEnabled = true // respond to accessoryView tap through `MessageCellDelegate` // button.setImage(Asset.chatsRefresh.image, for: .normal) button.image = Asset.chatsRefresh.image let tap1 = UITapGestureRecognizer(trailingClosure: { let data = msg.data self.msgsHistoryService.deleteMsg(ephemPublicKey: msg.id) self.loadedMsgsCount -= 1 self.messagesCollectionView.reloadData() self.sendMsg(msgText: data) }) button.addGestureRecognizer(tap1) // accessoryView.backgroundColor = UIColor.darkGray.withAlphaComponent(0.3) } else if case let .photo(img) = message.kind, let image = img.image { let button = UIImageView() accessoryView.addSubview(button) button.frame = accessoryView.bounds button.isUserInteractionEnabled = true // respond to accessoryView tap through `MessageCellDelegate` button.image = Asset.chatDownload.image let tap1 = UITapGestureRecognizer(trailingClosure: { let convertedImage = image.jpegData(compressionQuality: 1) .flatMap(UIImage.init)? .rotate(radians: .pi) ?? image let imageToShare = [convertedImage] let activityViewController = UIActivityViewController(activityItems: imageToShare, applicationActivities: nil) activityViewController.popoverPresentationController?.sourceView = self.view // so that iPads won't crash self.present(activityViewController, animated: true, completion: nil) }) button.addGestureRecognizer(tap1) } } }