|  |  |  | // Copyright © 2022 Rangeproof Pty Ltd. All rights reserved. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import UIKit | 
					
						
							|  |  |  | import SessionUIKit | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class PrimaryColorSelectionView: UIView { | 
					
						
							|  |  |  |     private static let selectionBorderSize: CGFloat = 36 | 
					
						
							|  |  |  |     private static let selectionSize: CGFloat = 30 | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     public let color: Theme.PrimaryColor | 
					
						
							|  |  |  |     private let onSelected: (Theme.PrimaryColor) -> () | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     // MARK: - Components | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     private lazy var backgroundButton: UIButton = { | 
					
						
							|  |  |  |         let result: UIButton = UIButton() | 
					
						
							|  |  |  |         result.translatesAutoresizingMaskIntoConstraints = false | 
					
						
							|  |  |  |         result.addTarget(self, action: #selector(itemSelected), for: .touchUpInside) | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         return result | 
					
						
							|  |  |  |     }() | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     private let selectionBorderView: UIView = { | 
					
						
							|  |  |  |         let result: UIView = UIView() | 
					
						
							|  |  |  |         result.translatesAutoresizingMaskIntoConstraints = false | 
					
						
							|  |  |  |         result.isUserInteractionEnabled = false | 
					
						
							|  |  |  |         result.themeBorderColor = .radioButton_selectedBorder | 
					
						
							|  |  |  |         result.layer.borderWidth = 1 | 
					
						
							|  |  |  |         result.layer.cornerRadius = (PrimaryColorSelectionView.selectionBorderSize / 2) | 
					
						
							|  |  |  |         result.isHidden = true | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         return result | 
					
						
							|  |  |  |     }() | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     private let selectionView: UIView = { | 
					
						
							|  |  |  |         let result: UIView = UIView() | 
					
						
							|  |  |  |         result.translatesAutoresizingMaskIntoConstraints = false | 
					
						
							|  |  |  |         result.isUserInteractionEnabled = false | 
					
						
							|  |  |  |         result.layer.cornerRadius = (PrimaryColorSelectionView.selectionSize / 2) | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         return result | 
					
						
							|  |  |  |     }() | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     // MARK: - Initializtion | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     init(color: Theme.PrimaryColor, onSelected: @escaping (Theme.PrimaryColor) -> ()) { | 
					
						
							|  |  |  |         self.color = color | 
					
						
							|  |  |  |         self.onSelected = onSelected | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         super.init(frame: .zero) | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         setupUI(color: color) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     required init?(coder: NSCoder) { | 
					
						
							|  |  |  |         fatalError("Use init(color:) instead") | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     // MARK: - Layout | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     private func setupUI(color: Theme.PrimaryColor) { | 
					
						
							|  |  |  |         // Set the appropriate colours | 
					
						
							|  |  |  |         selectionView.themeBackgroundColorForced = .primary(color) | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         // Add the UI | 
					
						
							|  |  |  |         addSubview(backgroundButton) | 
					
						
							|  |  |  |         addSubview(selectionBorderView) | 
					
						
							|  |  |  |         addSubview(selectionView) | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         setupLayout() | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     private func setupLayout() { | 
					
						
							|  |  |  |         backgroundButton.pin(to: self) | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         selectionBorderView.pin(to: self) | 
					
						
							|  |  |  |         selectionBorderView.set(.width, to: PrimaryColorSelectionView.selectionBorderSize) | 
					
						
							|  |  |  |         selectionBorderView.set(.height, to: PrimaryColorSelectionView.selectionBorderSize) | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         selectionView.center(in: selectionBorderView) | 
					
						
							|  |  |  |         selectionView.set(.width, to: PrimaryColorSelectionView.selectionSize) | 
					
						
							|  |  |  |         selectionView.set(.height, to: PrimaryColorSelectionView.selectionSize) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     // MARK: - Content | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     func update(isSelected: Bool) { | 
					
						
							|  |  |  |         selectionBorderView.isHidden = !isSelected | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     @objc func itemSelected() { | 
					
						
							|  |  |  |         onSelected(color) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |