// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved. import UIKit import SessionUIKit import SessionUtilitiesKit public class SessionHighlightingBackgroundLabel: UIView { var text: String? { get { label.text } set { label.text = newValue } } var themeTextColor: ThemeValue? { get { label.themeTextColor } set { label.themeTextColor = newValue } } // MARK: - Components private let label: UILabel = { let result: UILabel = UILabel() result.translatesAutoresizingMaskIntoConstraints = false result.font = .boldSystemFont(ofSize: Values.smallFontSize) result.themeTextColor = .textPrimary result.setContentHuggingHigh() result.setCompressionResistanceHigh() return result }() // MARK: - Initialization init() { super.init(frame: .zero) self.themeBackgroundColor = .solidButton_background self.layer.cornerRadius = 5 self.setupViewHierarchy() } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } // MARK: - Layout private func setupViewHierarchy() { addSubview(label) label.pin(to: self, withInset: Values.smallSpacing) } // MARK: - Interaction func setHighlighted(_ highlighted: Bool, animated: Bool) { self.themeBackgroundColor = (highlighted ? .highlighted(.solidButton_background) : .solidButton_background ) } func setSelected(_ selected: Bool, animated: Bool) { // Note: When initially triggering a selection we will be coming from the highlighted // state but will have already set highlighted to false at this stage, as a result we // need to swap back into the "highlighted" state so we can properly unhighlight within // the "deselect" animation guard !selected else { self.themeBackgroundColor = .highlighted(.solidButton_background) return } guard animated else { self.themeBackgroundColor = .solidButton_background return } UIView.animate(withDuration: 0.4) { [weak self] in self?.themeBackgroundColor = .solidButton_background } } }