diff --git a/MastodonSDK/Sources/MastodonUI/View/Control/ProfileRelationshipActionButton.swift b/MastodonSDK/Sources/MastodonUI/View/Control/ProfileRelationshipActionButton.swift index 46ec8b5dd..1a3637b49 100644 --- a/MastodonSDK/Sources/MastodonUI/View/Control/ProfileRelationshipActionButton.swift +++ b/MastodonSDK/Sources/MastodonUI/View/Control/ProfileRelationshipActionButton.swift @@ -9,76 +9,39 @@ import UIKit import MastodonAsset import MastodonLocalization -public final class ProfileRelationshipActionButton: RoundedEdgesButton { - - public let activityIndicatorView: UIActivityIndicatorView = { - let activityIndicatorView = UIActivityIndicatorView(style: .medium) - activityIndicatorView.color = Asset.Colors.Label.primaryReverse.color - return activityIndicatorView - }() - - public override init(frame: CGRect) { - super.init(frame: frame) - _init() - } - - public required init?(coder: NSCoder) { - super.init(coder: coder) - _init() - } - -} - -extension ProfileRelationshipActionButton { - private func _init() { - cornerRadius = 10 - titleLabel?.font = .systemFont(ofSize: 17, weight: .semibold) - - activityIndicatorView.translatesAutoresizingMaskIntoConstraints = false - addSubview(activityIndicatorView) - NSLayoutConstraint.activate([ - activityIndicatorView.centerXAnchor.constraint(equalTo: centerXAnchor), - activityIndicatorView.centerYAnchor.constraint(equalTo: centerYAnchor), - ]) - - activityIndicatorView.hidesWhenStopped = true - activityIndicatorView.stopAnimating() - - configureAppearance() - } - - public override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { - super.traitCollectionDidChange(previousTraitCollection) - - configureAppearance() - } -} - -extension ProfileRelationshipActionButton { +public final class ProfileRelationshipActionButton: UIButton { public func configure(actionOptionSet: RelationshipActionOptionSet) { - setTitle(actionOptionSet.title, for: .normal) - - configureAppearance() - - titleEdgeInsets = UIEdgeInsets(top: 0, left: 4, bottom: 0, right: 4) - - activityIndicatorView.stopAnimating() - + + var configuration = UIButton.Configuration.filled() + + configuration.contentInsets = NSDirectionalEdgeInsets(top: 0, leading: 4, bottom: 0, trailing: 4) + configuration.baseBackgroundColor = Asset.Scene.Profile.RelationshipButton.background.color + configuration.activityIndicatorColorTransformer = UIConfigurationColorTransformer({ _ in return Asset.Colors.Label.primaryReverse.color }) + configuration.background.cornerRadius = 10 + + let title: String if let option = actionOptionSet.highPriorityAction(except: .editOptions), option == .blocked || option == .suspended { isEnabled = false + configuration.showsActivityIndicator = false + title = actionOptionSet.title } else if actionOptionSet.contains(.updating) { isEnabled = false - activityIndicatorView.startAnimating() + configuration.showsActivityIndicator = true + title = "" } else { isEnabled = true + configuration.showsActivityIndicator = false + title = actionOptionSet.title } - } - - private func configureAppearance() { - setTitleColor(Asset.Colors.Label.primaryReverse.color, for: .normal) - setTitleColor(Asset.Colors.Label.primaryReverse.color.withAlphaComponent(0.5), for: .highlighted) - setBackgroundImage(.placeholder(color: Asset.Scene.Profile.RelationshipButton.background.color), for: .normal) - setBackgroundImage(.placeholder(color: Asset.Scene.Profile.RelationshipButton.backgroundHighlighted.color), for: .highlighted) - setBackgroundImage(.placeholder(color: Asset.Scene.Profile.RelationshipButton.backgroundHighlighted.color), for: .disabled) + + configuration.attributedTitle = AttributedString( + title, + attributes: AttributeContainer([ + .font: UIFont.systemFont(ofSize: 17, weight: .semibold), + .foregroundColor: Asset.Colors.Label.primaryReverse.color + ]) + ) + + self.configuration = configuration } }