Creates a special data source enum for ConversationAvatarView data providers. Before, ContactCell and ConversationAvatarView used the data source, neither applying to each perfectly
81 lines
2.7 KiB
Swift
81 lines
2.7 KiB
Swift
//
|
|
// Copyright (c) 2021 Open Whisper Systems. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
import SignalMessaging
|
|
|
|
@objc
|
|
open class ContactTableViewCell: UITableViewCell {
|
|
|
|
@objc
|
|
open class var reuseIdentifier: String { "ContactTableViewCell" }
|
|
|
|
private let cellView = ContactCellView()
|
|
|
|
@objc
|
|
public override var accessoryView: UIView? {
|
|
didSet {
|
|
owsFailDebug("Use ows_setAccessoryView instead.")
|
|
}
|
|
}
|
|
|
|
override public init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
|
|
super.init(style: style, reuseIdentifier: reuseIdentifier)
|
|
configure()
|
|
}
|
|
|
|
public required init?(coder aDecoder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
private func configure() {
|
|
self.preservesSuperviewLayoutMargins = true
|
|
self.contentView.preservesSuperviewLayoutMargins = true
|
|
|
|
contentView.addSubview(cellView)
|
|
cellView.autoPinWidthToSuperviewMargins()
|
|
cellView.autoPinHeightToSuperview(withMargin: 7)
|
|
}
|
|
|
|
public func configureWithSneakyTransaction(address: SignalServiceAddress,
|
|
localUserDisplayMode: LocalUserDisplayMode) {
|
|
databaseStorage.read { transaction in
|
|
configure(address: address,
|
|
localUserDisplayMode: localUserDisplayMode,
|
|
transaction: transaction)
|
|
}
|
|
}
|
|
|
|
public func configure(address: SignalServiceAddress,
|
|
localUserDisplayMode: LocalUserDisplayMode,
|
|
transaction: SDSAnyReadTransaction) {
|
|
let configuration = ContactCellConfiguration(address: address,
|
|
localUserDisplayMode: localUserDisplayMode)
|
|
configure(configuration: configuration, transaction: transaction)
|
|
}
|
|
|
|
public func configure(thread: TSContactThread,
|
|
localUserDisplayMode: LocalUserDisplayMode,
|
|
transaction: SDSAnyReadTransaction) {
|
|
let configuration = ContactCellConfiguration(address: thread.contactAddress,
|
|
localUserDisplayMode: localUserDisplayMode)
|
|
configure(configuration: configuration, transaction: transaction)
|
|
}
|
|
|
|
@objc
|
|
open func configure(configuration: ContactCellConfiguration,
|
|
transaction: SDSAnyReadTransaction) {
|
|
OWSTableItem.configureCell(self)
|
|
cellView.configure(configuration: configuration, transaction: transaction)
|
|
}
|
|
|
|
public override func prepareForReuse() {
|
|
super.prepareForReuse()
|
|
|
|
cellView.reset()
|
|
|
|
self.accessoryType = .none
|
|
}
|
|
}
|