blockchainethereumblockchain-walleterc20erc721walletxdaidappdecentralizederc1155erc875iosswifttokens
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
4.5 KiB
142 lines
4.5 KiB
//
|
|
// ActiveWalletSessionView.swift
|
|
// AlphaWallet
|
|
//
|
|
// Created by Vladyslav Shepitko on 27.10.2020.
|
|
//
|
|
|
|
import UIKit
|
|
|
|
protocol ActiveWalletSessionViewDelegate: class {
|
|
func view(_ view: ActiveWalletSessionView, didSelectTap sender: UITapGestureRecognizer)
|
|
}
|
|
|
|
struct ActiveWalletSessionViewModel {
|
|
let count: Int
|
|
let backgroundColor: UIColor = R.color.solitude()!
|
|
let icon: UIImage = R.image.walletConnectIcon()!
|
|
|
|
var titleAttributedText: NSAttributedString {
|
|
let style = NSMutableParagraphStyle()
|
|
style.alignment = .left
|
|
|
|
return .init(string: "WalletConnect", attributes: [
|
|
.paragraphStyle: style,
|
|
.font: Fonts.regular(size: ScreenChecker().isNarrowScreen ? 18 : 20) as Any,
|
|
.foregroundColor: Colors.black
|
|
])
|
|
}
|
|
|
|
var descriptionAttributedText: NSAttributedString {
|
|
let style = NSMutableParagraphStyle()
|
|
style.alignment = .left
|
|
let title: String
|
|
if count == 1 {
|
|
title = R.string.localizable.walletConnectActiveSessions()
|
|
} else {
|
|
title = R.string.localizable.walletConnectActiveSessionsPlural()
|
|
}
|
|
return .init(string: title, attributes: [
|
|
.paragraphStyle: style,
|
|
.font: Fonts.regular(size: ScreenChecker().isNarrowScreen ? 14 : 16) as Any,
|
|
.foregroundColor: R.color.dove() as Any
|
|
])
|
|
}
|
|
}
|
|
|
|
enum SeparatorViewPlacement: Int {
|
|
case top
|
|
case bottom
|
|
}
|
|
|
|
class SeparatorView: UIView {
|
|
|
|
init() {
|
|
super.init(frame: .zero)
|
|
|
|
backgroundColor = R.color.mercury()
|
|
translatesAutoresizingMaskIntoConstraints = false
|
|
}
|
|
|
|
required init?(coder: NSCoder) {
|
|
return nil
|
|
}
|
|
|
|
func add(to view: UIView, _ placement: SeparatorViewPlacement) {
|
|
view.addSubview(self)
|
|
|
|
let anchor: NSLayoutConstraint
|
|
switch placement {
|
|
case .bottom:
|
|
anchor = bottomAnchor.constraint(equalTo: view.bottomAnchor)
|
|
case .top:
|
|
anchor = topAnchor.constraint(equalTo: view.topAnchor)
|
|
}
|
|
|
|
NSLayoutConstraint.activate([
|
|
leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
|
trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
|
heightAnchor.constraint(equalToConstant: 0.7),
|
|
anchor
|
|
])
|
|
}
|
|
}
|
|
|
|
class ActiveWalletSessionView: UITableViewHeaderFooterView {
|
|
|
|
private let titleLabel = UILabel()
|
|
private let descriptionLabel = UILabel()
|
|
private var iconImageView: UIImageView = {
|
|
let imageView = UIImageView()
|
|
imageView.translatesAutoresizingMaskIntoConstraints = false
|
|
return imageView
|
|
}()
|
|
private let background = UIView()
|
|
private let separators = (top: SeparatorView(), bottom: SeparatorView())
|
|
|
|
weak var delegate: ActiveWalletSessionViewDelegate?
|
|
|
|
override init(reuseIdentifier: String?) {
|
|
super.init(reuseIdentifier: reuseIdentifier)
|
|
|
|
background.translatesAutoresizingMaskIntoConstraints = false
|
|
contentView.addSubview(background)
|
|
|
|
let col1 = [titleLabel, descriptionLabel].asStackView(axis: .vertical, spacing: 5)
|
|
let stackView = [iconImageView, col1].asStackView(spacing: 12, alignment: .center)
|
|
|
|
stackView.translatesAutoresizingMaskIntoConstraints = false
|
|
background.addSubview(stackView)
|
|
|
|
NSLayoutConstraint.activate([
|
|
iconImageView.heightAnchor.constraint(equalToConstant: 40),
|
|
iconImageView.widthAnchor.constraint(equalToConstant: 40),
|
|
|
|
stackView.anchorsConstraint(to: background, edgeInsets: .init(top: 16, left: 20, bottom: 16, right: 16)),
|
|
background.anchorsConstraint(to: contentView)
|
|
])
|
|
|
|
separators.top.add(to: background, .top)
|
|
separators.bottom.add(to: background, .bottom)
|
|
|
|
let tap = UITapGestureRecognizer(target: self, action: #selector(viewTapped))
|
|
contentView.isUserInteractionEnabled = true
|
|
contentView.addGestureRecognizer(tap)
|
|
}
|
|
|
|
@objc private func viewTapped(_ sender: UITapGestureRecognizer) {
|
|
delegate?.view(self, didSelectTap: sender)
|
|
}
|
|
|
|
required init?(coder aDecoder: NSCoder) {
|
|
return nil
|
|
}
|
|
|
|
func configure(viewModel: ActiveWalletSessionViewModel) {
|
|
background.backgroundColor = viewModel.backgroundColor
|
|
|
|
iconImageView.image = viewModel.icon
|
|
titleLabel.attributedText = viewModel.titleAttributedText
|
|
descriptionLabel.attributedText = viewModel.descriptionAttributedText
|
|
}
|
|
}
|
|
|