session-ios/Session/Shared/Views/SessionHighlightingBackgrou...

82 lines
2.3 KiB
Swift

// 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
}
}
}