The old UIButton API is still functional as long as we don't use UIButton.Configuration, so we can safely ignore these warnings until we're ready to adopt the configuration API across the codebase.
110 lines
3.6 KiB
Swift
110 lines
3.6 KiB
Swift
//
|
|
// Copyright 2023 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
//
|
|
|
|
import SignalServiceKit
|
|
|
|
class ContactReminderTableViewCell: UITableViewCell {
|
|
|
|
private let learnMoreAction: () -> Void
|
|
private let dismissAction: () -> Void
|
|
|
|
init(learnMoreAction: @escaping () -> Void, dismissAction: @escaping () -> Void) {
|
|
self.learnMoreAction = learnMoreAction
|
|
self.dismissAction = dismissAction
|
|
|
|
super.init(style: .default, reuseIdentifier: nil)
|
|
|
|
contentView.addSubview(contentContainer)
|
|
contentContainer.autoPinEdgesToSuperviewMargins()
|
|
}
|
|
|
|
required init?(coder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
private var textColor: UIColor {
|
|
Theme.isDarkThemeEnabled ? .ows_gray05 : .ows_gray90
|
|
}
|
|
|
|
private lazy var messageLabel: UILabel = {
|
|
let label = UILabel()
|
|
label.numberOfLines = 0
|
|
label.font = .dynamicTypeBody2
|
|
label.textColor = textColor
|
|
label.text = OWSLocalizedString(
|
|
"LINKED_DEVICE_MANAGE_CONTACTS_BANNER",
|
|
comment: "Shown in a banner when you tap the 'New Chat' icon at the top of the list of chats."
|
|
)
|
|
return label
|
|
}()
|
|
|
|
private lazy var learnMoreButton: UIButton = {
|
|
let button = UIButton(type: .system)
|
|
button.setTitle(
|
|
OWSLocalizedString(
|
|
"LINKED_DEVICE_MANAGE_CONTACTS_LEARN_MORE",
|
|
comment: "A button shown in a banner when you tap the 'New Chat' icon at the top of the list of chats. Tapping it opens a website with more details."),
|
|
for: .normal
|
|
)
|
|
button.setTitleColor(textColor, for: .normal)
|
|
button.titleLabel!.font = .dynamicTypeBody2.semibold()
|
|
button.addTarget(self, action: #selector(didTapLearnMore), for: .touchUpInside)
|
|
button.ows_contentEdgeInsets = UIEdgeInsets(top: 6, left: 0, bottom: 3, right: 0)
|
|
button.setCompressionResistanceHigh()
|
|
return button
|
|
}()
|
|
|
|
private lazy var contactIcon: UIImageView = {
|
|
let imageView = UIImageView()
|
|
imageView.setTemplateImageName("person-circle", tintColor: textColor)
|
|
imageView.autoSetDimensions(to: CGSize(square: 24))
|
|
return imageView
|
|
}()
|
|
|
|
private lazy var closeButton: UIButton = {
|
|
let button = UIButton(type: .system)
|
|
button.setTemplateImageName("x-20", tintColor: textColor)
|
|
button.addTarget(self, action: #selector(didTapDismiss), for: .touchUpInside)
|
|
button.setCompressionResistanceHigh()
|
|
return button
|
|
}()
|
|
|
|
private lazy var labelContainer: UIView = {
|
|
let stackView = UIStackView(arrangedSubviews: [messageLabel, learnMoreButton])
|
|
stackView.axis = .vertical
|
|
stackView.alignment = .leading
|
|
stackView.spacing = 6
|
|
return stackView
|
|
}()
|
|
|
|
private lazy var contentContainer: UIView = {
|
|
let stackView = UIStackView(arrangedSubviews: [contactIcon, labelContainer, closeButton])
|
|
stackView.axis = .horizontal
|
|
stackView.alignment = .top
|
|
stackView.spacing = 12
|
|
return stackView
|
|
}()
|
|
|
|
@objc
|
|
private func didTapLearnMore() {
|
|
learnMoreAction()
|
|
}
|
|
|
|
@objc
|
|
private func didTapDismiss() {
|
|
dismissAction()
|
|
}
|
|
}
|
|
|
|
extension ContactReminderTableViewCell: CustomBackgroundColorCell {
|
|
func customBackgroundColor(forceDarkMode: Bool) -> UIColor {
|
|
(forceDarkMode || Theme.isDarkThemeEnabled) ? .ows_gray80 : .ows_gray12
|
|
}
|
|
|
|
func customSelectedBackgroundColor(forceDarkMode: Bool) -> UIColor {
|
|
customBackgroundColor(forceDarkMode: forceDarkMode)
|
|
}
|
|
}
|