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.
		
		
		
		
		
			
		
			
				
	
	
		
			125 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Swift
		
	
			
		
		
	
	
			125 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Swift
		
	
| import UIKit
 | |
| import SessionUIKit
 | |
| 
 | |
| final class SimplifiedConversationCell : UITableViewCell {
 | |
|     var threadViewModel: ThreadViewModel! { didSet { update() } }
 | |
|     
 | |
|     // MARK: - Initialization
 | |
|     
 | |
|     override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
 | |
|         super.init(style: style, reuseIdentifier: reuseIdentifier)
 | |
|         setUpViewHierarchy()
 | |
|     }
 | |
|     
 | |
|     required init?(coder: NSCoder) {
 | |
|         super.init(coder: coder)
 | |
|         setUpViewHierarchy()
 | |
|     }
 | |
|     
 | |
|     // MARK: - UI
 | |
|     
 | |
|     private lazy var stackView: UIStackView = {
 | |
|         let stackView: UIStackView = UIStackView()
 | |
|         stackView.translatesAutoresizingMaskIntoConstraints = false
 | |
|         stackView.axis = .horizontal
 | |
|         stackView.alignment = .center
 | |
|         stackView.spacing = Values.mediumSpacing
 | |
|         
 | |
|         return stackView
 | |
|     }()
 | |
|     
 | |
|     private lazy var accentLineView: UIView = {
 | |
|         let result = UIView()
 | |
|         result.translatesAutoresizingMaskIntoConstraints = false
 | |
|         result.backgroundColor = Colors.destructive
 | |
|         
 | |
|         return result
 | |
|     }()
 | |
|     
 | |
|     private lazy var profilePictureView: ProfilePictureView = {
 | |
|         let view: ProfilePictureView = ProfilePictureView()
 | |
|         view.translatesAutoresizingMaskIntoConstraints = false
 | |
|         
 | |
|         return view
 | |
|     }()
 | |
|     
 | |
|     private lazy var displayNameLabel: UILabel = {
 | |
|         let result = UILabel()
 | |
|         result.font = .boldSystemFont(ofSize: Values.mediumFontSize)
 | |
|         result.textColor = Colors.text
 | |
|         result.lineBreakMode = .byTruncatingTail
 | |
|         
 | |
|         return result
 | |
|     }()
 | |
|     
 | |
|     // MARK: - Initialization
 | |
|     
 | |
|     private func setUpViewHierarchy() {
 | |
|         backgroundColor = Colors.cellBackground
 | |
|         
 | |
|         let selectedBackgroundView = UIView()
 | |
|         selectedBackgroundView.backgroundColor = Colors.cellSelected
 | |
|         self.selectedBackgroundView = selectedBackgroundView
 | |
|         
 | |
|         addSubview(stackView)
 | |
|         
 | |
|         stackView.addArrangedSubview(accentLineView)
 | |
|         stackView.addArrangedSubview(profilePictureView)
 | |
|         stackView.addArrangedSubview(displayNameLabel)
 | |
|         stackView.addArrangedSubview(UIView.hSpacer(0))
 | |
|         
 | |
|         setupLayout()
 | |
|     }
 | |
|     
 | |
|     // MARK: - Layout
 | |
|     
 | |
|     private func setupLayout() {
 | |
|         accentLineView.set(.width, to: Values.accentLineThickness)
 | |
|         accentLineView.set(.height, to: 68)
 | |
|         
 | |
|         let profilePictureViewSize = Values.mediumProfilePictureSize
 | |
|         profilePictureView.set(.width, to: profilePictureViewSize)
 | |
|         profilePictureView.set(.height, to: profilePictureViewSize)
 | |
|         profilePictureView.size = profilePictureViewSize
 | |
|         
 | |
|         stackView.pin(to: self)
 | |
|     }
 | |
|     
 | |
|     // MARK: - Content
 | |
|     
 | |
|     private func update() {
 | |
|         AssertIsOnMainThread()
 | |
|         
 | |
|         guard let thread = threadViewModel?.threadRecord else { return }
 | |
|         
 | |
|         accentLineView.alpha = (thread.isBlocked() ? 1 : 0)
 | |
|         profilePictureView.update(for: thread)
 | |
|         displayNameLabel.text = getDisplayName()
 | |
|     }
 | |
|     
 | |
|     private func getDisplayName() -> String {
 | |
|         if threadViewModel.isGroupThread {
 | |
|             if threadViewModel.name.isEmpty {
 | |
|                 // TODO: Localization
 | |
|                 return "Unknown Group"
 | |
|             }
 | |
|             
 | |
|             return threadViewModel.name
 | |
|         }
 | |
|         
 | |
|         if threadViewModel.threadRecord.isNoteToSelf() {
 | |
|             return "NOTE_TO_SELF".localized()
 | |
|         }
 | |
|         
 | |
|         guard let hexEncodedPublicKey: String = threadViewModel.contactSessionID else {
 | |
|             // TODO: Localization
 | |
|             return "Unknown"
 | |
|         }
 | |
|         
 | |
|         return (
 | |
|             Storage.shared.getContact(with: hexEncodedPublicKey)?.displayName(for: .regular) ??
 | |
|             hexEncodedPublicKey
 | |
|         )
 | |
|     }
 | |
| }
 |