122 lines
4.1 KiB
Swift
122 lines
4.1 KiB
Swift
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
import UIKit
|
|
import SnapKit
|
|
|
|
class FriendListCell: BaseCell {
|
|
struct Constants {
|
|
static let AvatarSize = 30.0
|
|
static let AvatarLeftOffset = 10.0
|
|
static let AvatarRightOffset = 16.0
|
|
|
|
static let TopLabelHeight = 22.0
|
|
static let MinimumBottomLabelHeight = 15.0
|
|
|
|
static let VerticalOffset = 3.0
|
|
}
|
|
|
|
fileprivate var avatarView: ImageViewWithStatus!
|
|
fileprivate var topLabel: UILabel!
|
|
fileprivate var bottomLabel: UILabel!
|
|
fileprivate var arrowImageView: UIImageView!
|
|
|
|
override func setupWithTheme(_ theme: Theme, model: BaseCellModel) {
|
|
super.setupWithTheme(theme, model: model)
|
|
|
|
guard let friendModel = model as? FriendListCellModel else {
|
|
assert(false, "Wrong model \(model) passed to cell \(self)")
|
|
return
|
|
}
|
|
|
|
separatorInset.left = CGFloat(Constants.AvatarLeftOffset + Constants.AvatarSize + Constants.AvatarRightOffset)
|
|
|
|
avatarView.imageView.image = friendModel.avatar
|
|
avatarView.userStatusView.theme = theme
|
|
avatarView.userStatusView.userStatus = friendModel.status
|
|
avatarView.userStatusView.connectionStatus = friendModel.connectionstatus
|
|
avatarView.userStatusView.isHidden = friendModel.hideStatus
|
|
|
|
topLabel.text = friendModel.topText
|
|
topLabel.textColor = theme.colorForType(.NormalText)
|
|
|
|
bottomLabel.text = friendModel.bottomText
|
|
bottomLabel.textColor = theme.colorForType(.FriendCellStatus)
|
|
bottomLabel.numberOfLines = friendModel.multilineBottomtext ? 0 : 1
|
|
|
|
accessibilityLabel = friendModel.accessibilityLabel
|
|
accessibilityValue = friendModel.accessibilityValue
|
|
}
|
|
|
|
override func createViews() {
|
|
super.createViews()
|
|
|
|
avatarView = ImageViewWithStatus()
|
|
contentView.addSubview(avatarView)
|
|
|
|
topLabel = UILabel()
|
|
topLabel.font = UIFont.systemFont(ofSize: 18.0)
|
|
contentView.addSubview(topLabel)
|
|
|
|
bottomLabel = UILabel()
|
|
bottomLabel.font = UIFont.antidoteFontWithSize(12.0, weight: .light)
|
|
contentView.addSubview(bottomLabel)
|
|
|
|
let image = UIImage(named: "right-arrow")!.flippedToCorrectLayout()
|
|
arrowImageView = UIImageView(image: image)
|
|
arrowImageView.setContentCompressionResistancePriority(UILayoutPriority.required, for: .horizontal)
|
|
contentView.addSubview(arrowImageView)
|
|
}
|
|
|
|
override func installConstraints() {
|
|
super.installConstraints()
|
|
|
|
avatarView.snp.makeConstraints {
|
|
$0.leading.equalTo(contentView).offset(Constants.AvatarLeftOffset)
|
|
$0.centerY.equalTo(contentView)
|
|
$0.size.equalTo(Constants.AvatarSize)
|
|
}
|
|
|
|
topLabel.snp.makeConstraints {
|
|
$0.leading.equalTo(avatarView.snp.trailing).offset(Constants.AvatarRightOffset)
|
|
$0.top.equalTo(contentView).offset(Constants.VerticalOffset)
|
|
$0.height.equalTo(Constants.TopLabelHeight)
|
|
}
|
|
|
|
bottomLabel.snp.makeConstraints {
|
|
$0.leading.trailing.equalTo(topLabel)
|
|
$0.top.equalTo(topLabel.snp.bottom)
|
|
$0.bottom.equalTo(contentView).offset(-Constants.VerticalOffset)
|
|
$0.height.greaterThanOrEqualTo(Constants.MinimumBottomLabelHeight)
|
|
}
|
|
|
|
arrowImageView.snp.makeConstraints {
|
|
$0.centerY.equalTo(contentView)
|
|
$0.leading.greaterThanOrEqualTo(topLabel.snp.trailing)
|
|
$0.trailing.equalTo(contentView)
|
|
}
|
|
}
|
|
}
|
|
|
|
// Accessibility
|
|
extension FriendListCell {
|
|
override var isAccessibilityElement: Bool {
|
|
get {
|
|
return true
|
|
}
|
|
set {}
|
|
}
|
|
|
|
// Label and value are set in setupWithTheme:model: method
|
|
// var accessibilityLabel: String?
|
|
// var accessibilityValue: String?
|
|
|
|
override var accessibilityTraits: UIAccessibilityTraits {
|
|
get {
|
|
return UIAccessibilityTraitButton
|
|
}
|
|
set {}
|
|
}
|
|
}
|