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.
90 lines
3.3 KiB
Swift
90 lines
3.3 KiB
Swift
|
|
@objc final class ConversationTitleView : UIView {
|
|
private let thread: TSThread
|
|
|
|
// MARK: Components
|
|
private lazy var titleLabel: UILabel = {
|
|
let result = UILabel()
|
|
result.textColor = Colors.text
|
|
result.font = .boldSystemFont(ofSize: Values.mediumFontSize)
|
|
result.lineBreakMode = .byTruncatingTail
|
|
return result
|
|
}()
|
|
|
|
private lazy var subtitleLabel: UILabel = {
|
|
let result = UILabel()
|
|
result.textColor = Colors.text
|
|
result.font = .systemFont(ofSize: Values.smallFontSize)
|
|
result.lineBreakMode = .byTruncatingTail
|
|
return result
|
|
}()
|
|
|
|
// MARK: Lifecycle
|
|
@objc init(thread: TSThread) {
|
|
self.thread = thread
|
|
super.init(frame: CGRect.zero)
|
|
setUpViewHierarchy()
|
|
update()
|
|
NotificationCenter.default.addObserver(self, selector: #selector(handleProfileChangedNotification(_:)), name: NSNotification.Name(rawValue: kNSNotificationName_OtherUsersProfileDidChange), object: nil)
|
|
}
|
|
|
|
override init(frame: CGRect) {
|
|
preconditionFailure("Use init(thread:) instead.")
|
|
}
|
|
|
|
required init?(coder: NSCoder) {
|
|
preconditionFailure("Use init(thread:) instead.")
|
|
}
|
|
|
|
private func setUpViewHierarchy() {
|
|
let stackView = UIStackView(arrangedSubviews: [ titleLabel, subtitleLabel ])
|
|
stackView.axis = .vertical
|
|
stackView.alignment = .center
|
|
stackView.layoutMargins = UIEdgeInsets(top: 4, left: 8, bottom: 4, right: 0) // Compensate for settings button trailing margin
|
|
stackView.isLayoutMarginsRelativeArrangement = true
|
|
addSubview(stackView)
|
|
stackView.pin(to: self)
|
|
}
|
|
|
|
deinit {
|
|
NotificationCenter.default.removeObserver(self)
|
|
}
|
|
|
|
// MARK: Updating
|
|
private func update() {
|
|
let title: String
|
|
if thread.isGroupThread() {
|
|
if thread.name().isEmpty {
|
|
title = NSLocalizedString("New Group", comment: "")
|
|
} else {
|
|
title = thread.name()
|
|
}
|
|
} else {
|
|
if thread.isNoteToSelf() {
|
|
title = NSLocalizedString("Note to Self", comment: "")
|
|
} else {
|
|
let hexEncodedPublicKey = thread.contactIdentifier()!
|
|
title = DisplayNameUtilities.getPrivateChatDisplayName(for: hexEncodedPublicKey) ?? hexEncodedPublicKey
|
|
}
|
|
}
|
|
titleLabel.text = title
|
|
let subtitle = NSMutableAttributedString()
|
|
if thread.isMuted {
|
|
subtitle.append(NSAttributedString(string: "\u{e067} ", attributes: [ .font : UIFont.ows_elegantIconsFont(10), .foregroundColor : Colors.unimportant ]))
|
|
}
|
|
subtitle.append(NSAttributedString(string: "26 members")) // TODO: Implement
|
|
subtitleLabel.attributedText = subtitle
|
|
}
|
|
|
|
@objc private func handleProfileChangedNotification(_ notification: Notification) {
|
|
guard let hexEncodedPublicKey = notification.userInfo?[kNSNotificationKey_ProfileRecipientId] as? String, let thread = self.thread as? TSContactThread,
|
|
hexEncodedPublicKey == thread.contactIdentifier() else { return }
|
|
update()
|
|
}
|
|
|
|
// MARK: Layout
|
|
public override var intrinsicContentSize: CGSize {
|
|
return UIView.layoutFittingExpandedSize
|
|
}
|
|
}
|