Drive quote authoring with QuotedMessageView

// FREEBIE
pull/1/head
Michael Kirk 7 years ago
parent 520dad25bb
commit 314e3cbf03

@ -13,100 +13,40 @@ protocol QuotedReplyPreviewDelegate: class {
class QuotedReplyPreview: UIView {
public weak var delegate: QuotedReplyPreviewDelegate?
private let quotedReply: OWSQuotedReplyModel
private var quotedMessageView: OWSQuotedMessageView
private var heightConstraint: NSLayoutConstraint!
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
init(quotedReply: OWSQuotedReplyModel) {
self.quotedReply = quotedReply
self.quotedMessageView = OWSQuotedMessageView(forPreview: quotedReply)
super.init(frame: .zero)
let quotedMessageView = OWSQuotedMessageView(forPreview: quotedReply)
quotedMessageView.backgroundColor = .clear
self.heightConstraint = self.autoSetDimension(.height, toSize: 0)
let isQuotingSelf = quotedReply.authorId == TSAccountManager.localNumber()
updateContents()
// used for stripe and author
// FIXME actual colors TBD
let authorColor: UIColor = isQuotingSelf ? .ows_materialBlue : .black
NotificationCenter.default.addObserver(self, selector: #selector(contentSizeCategoryDidChange), name: .UIContentSizeCategoryDidChange, object: nil)
}
// used for text and cancel
let foregroundColor: UIColor = .darkGray
func updateContents() {
subviews.forEach { $0.removeFromSuperview() }
self.quotedMessageView = OWSQuotedMessageView(forPreview: quotedReply)
// let authorLabel: UILabel = UILabel()
// authorLabel.textColor = authorColor
// if isQuotingSelf {
// authorLabel.text = NSLocalizedString("MEDIA_GALLERY_SENDER_NAME_YOU", comment: "")
// } else {
// authorLabel.text = Environment.current().contactsManager.displayName(forPhoneIdentifier: quotedReply.authorId)
// }
// authorLabel.font = .ows_dynamicTypeHeadline
//
// let bodyLabel: UILabel = UILabel()
// bodyLabel.textColor = foregroundColor
// bodyLabel.font = .ows_dynamicTypeFootnote
//
// bodyLabel.text = {
// if let contentType = quotedReply.contentType {
// let emoji = TSAttachmentStream.emoji(forMimeType: contentType)
// return "\(emoji) \(quotedReply.body ?? "")"
// } else {
// return quotedReply.body
// }
// }()
//
// let thumbnailView: UIView? = {
// if let image = quotedReply.thumbnailImage {
// let imageView = UIImageView(image: image)
// imageView.contentMode = .scaleAspectFill
// imageView.autoPinToSquareAspectRatio()
// imageView.layer.cornerRadius = 3.0
// imageView.clipsToBounds = true
//
// return imageView
// }
// return nil
// }()
quotedMessageView.backgroundColor = .clear
let cancelButton: UIButton = UIButton(type: .custom)
// FIXME proper image asset/size
let buttonImage: UIImage = #imageLiteral(resourceName: "quoted-message-cancel").withRenderingMode(.alwaysTemplate)
cancelButton.setImage(buttonImage, for: .normal)
cancelButton.imageView?.tintColor = foregroundColor
cancelButton.imageView?.tintColor = .darkGray
cancelButton.addTarget(self, action: #selector(didTapCancel), for: .touchUpInside)
//// let quoteStripe: UIView = UIView()
//// quoteStripe.backgroundColor = authorColor
////
//// let textColumn = UIView.container()
//// textColumn.addSubview(authorLabel)
//// textColumn.addSubview(bodyLabel)
////
//// authorLabel.autoPinEdges(toSuperviewMarginsExcludingEdge: .bottom)
//// authorLabel.autoPinEdge(.bottom, to: .top, of: bodyLabel)
//// bodyLabel.autoPinEdges(toSuperviewMarginsExcludingEdge: .top)
////
//// let contentViews: [UIView] = [textColumn, thumbnailView, cancelButton].flatMap { return $0 }
//
// let contentViews: [UIView] = [quotedMessageView, cancelButton]
// let contentRow = UIStackView(arrangedSubviews: contentViews)
// contentRow.axis = .horizontal
// self.addSubview(contentRow)
//// self.addSubview(quoteStripe)
////
//// // Layout
////
//// let kQuoteStripeWidth: CGFloat = 4
//// self.layoutMargins = UIEdgeInsets(top: 6,
//// left: kQuoteStripeWidth + 8,
//// bottom: 2,
//// right: 4)
////
//// quoteStripe.autoPinEdge(toSuperviewEdge: .leading)
//// quoteStripe.autoPinHeightToSuperview()
//// quoteStripe.autoSetDimension(.width, toSize: kQuoteStripeWidth)
////
// contentRow.autoPinEdgesToSuperviewMargins()
self.layoutMargins = .zero
self.addSubview(quotedMessageView)
@ -118,20 +58,26 @@ class QuotedReplyPreview: UIView {
cancelButton.autoSetDimensions(to: CGSize(width: 40, height: 40))
// TODO this is arbitrary and breaks with dynamic type
self.autoSetDimension(.height, toSize: 70)
}
// MARK: UIViewOverrides
// Used by stack view to determin size.
override var intrinsicContentSize: CGSize {
return CGSize(width: 0, height: 50)
updateHeight()
}
// MARK: Actions
@objc
func didTapCancel(_ sender: Any) {
self.delegate?.quotedReplyPreviewDidPressCancel(self)
}
// MARK: Sizing
func updateHeight() {
let size = self.quotedMessageView.size(forMaxWidth: CGFloat.infinity)
self.heightConstraint.constant = size.height
}
func contentSizeCategoryDidChange(_ notification: Notification) {
Logger.debug("\(self.logTag) in \(#function)")
updateContents()
}
}

Loading…
Cancel
Save