mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			62 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Swift
		
	
			
		
		
	
	
			62 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Swift
		
	
import UIKit
 | 
						|
 | 
						|
class MessageCell : UITableViewCell {
 | 
						|
    weak var delegate: MessageCellDelegate?
 | 
						|
    var viewItem: ConversationViewItem? { didSet { update() } }
 | 
						|
    
 | 
						|
    // MARK: Settings
 | 
						|
    class var identifier: String { preconditionFailure("Must be overridden by subclasses.") }
 | 
						|
    
 | 
						|
    // MARK: Lifecycle
 | 
						|
    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
 | 
						|
        super.init(style: style, reuseIdentifier: reuseIdentifier)
 | 
						|
        setUpViewHierarchy()
 | 
						|
        setUpGestureRecognizers()
 | 
						|
    }
 | 
						|
 | 
						|
    required init?(coder: NSCoder) {
 | 
						|
        super.init(coder: coder)
 | 
						|
        setUpViewHierarchy()
 | 
						|
        setUpGestureRecognizers()
 | 
						|
    }
 | 
						|
 | 
						|
    func setUpViewHierarchy() {
 | 
						|
        backgroundColor = .clear
 | 
						|
        let selectedBackgroundView = UIView()
 | 
						|
        selectedBackgroundView.backgroundColor = .clear
 | 
						|
        self.selectedBackgroundView = selectedBackgroundView
 | 
						|
    }
 | 
						|
    
 | 
						|
    func setUpGestureRecognizers() {
 | 
						|
        // To be overridden by subclasses
 | 
						|
    }
 | 
						|
    
 | 
						|
    // MARK: Updating
 | 
						|
    func update() {
 | 
						|
        preconditionFailure("Must be overridden by subclasses.")
 | 
						|
    }
 | 
						|
    
 | 
						|
    // MARK: Convenience
 | 
						|
    static func getCellType(for viewItem: ConversationViewItem) -> MessageCell.Type {
 | 
						|
        switch viewItem.interaction {
 | 
						|
        case is TSIncomingMessage: fallthrough
 | 
						|
        case is TSOutgoingMessage: return VisibleMessageCell.self
 | 
						|
        case is TSInfoMessage: return InfoMessageCell.self
 | 
						|
        case is TypingIndicatorInteraction: return TypingIndicatorCell.self
 | 
						|
        default: preconditionFailure()
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
protocol MessageCellDelegate : class {
 | 
						|
    var lastSearchedText: String? { get }
 | 
						|
    
 | 
						|
    func getMediaCache() -> NSCache<NSString, AnyObject>
 | 
						|
    func handleViewItemLongPressed(_ viewItem: ConversationViewItem)
 | 
						|
    func handleViewItemTapped(_ viewItem: ConversationViewItem, gestureRecognizer: UITapGestureRecognizer)
 | 
						|
    func handleViewItemDoubleTapped(_ viewItem: ConversationViewItem)
 | 
						|
    func showFullText(_ viewItem: ConversationViewItem)
 | 
						|
    func openURL(_ url: URL)
 | 
						|
    func handleReplyButtonTapped(for viewItem: ConversationViewItem)
 | 
						|
}
 |