mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			84 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Swift
		
	
			
		
		
	
	
			84 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Swift
		
	
// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
 | 
						|
 | 
						|
import UIKit
 | 
						|
import SessionMessagingKit
 | 
						|
 | 
						|
final class UserDetailsSheet: Sheet {
 | 
						|
    private let profile: Profile
 | 
						|
    
 | 
						|
    init(for profile: Profile) {
 | 
						|
        self.profile = profile
 | 
						|
        
 | 
						|
        super.init(nibName: nil, bundle: nil)
 | 
						|
    }
 | 
						|
    
 | 
						|
    override init(nibName: String?, bundle: Bundle?) {
 | 
						|
        preconditionFailure("Use init(for:) instead.")
 | 
						|
    }
 | 
						|
    
 | 
						|
    required init?(coder: NSCoder) {
 | 
						|
        preconditionFailure("Use init(for:) instead.")
 | 
						|
    }
 | 
						|
    
 | 
						|
    override func populateContentView() {
 | 
						|
        // Profile picture view
 | 
						|
        let profilePictureView = ProfilePictureView()
 | 
						|
        let size = Values.largeProfilePictureSize
 | 
						|
        profilePictureView.size = size
 | 
						|
        profilePictureView.set(.width, to: size)
 | 
						|
        profilePictureView.set(.height, to: size)
 | 
						|
        profilePictureView.update(
 | 
						|
            publicKey: profile.id,
 | 
						|
            profile: profile,
 | 
						|
            threadVariant: .contact
 | 
						|
        )
 | 
						|
        
 | 
						|
        // Display name label
 | 
						|
        let displayNameLabel = UILabel()
 | 
						|
        let displayName = profile.displayName()
 | 
						|
        displayNameLabel.text = displayName
 | 
						|
        displayNameLabel.font = .boldSystemFont(ofSize: Values.largeFontSize)
 | 
						|
        displayNameLabel.textColor = Colors.text
 | 
						|
        displayNameLabel.numberOfLines = 1
 | 
						|
        displayNameLabel.lineBreakMode = .byTruncatingTail
 | 
						|
        
 | 
						|
        // Session ID label
 | 
						|
        let sessionIDLabel = UILabel()
 | 
						|
        sessionIDLabel.textColor = Colors.text
 | 
						|
        sessionIDLabel.font = Fonts.spaceMono(ofSize: isIPhone5OrSmaller ? Values.mediumFontSize : 20)
 | 
						|
        sessionIDLabel.numberOfLines = 0
 | 
						|
        sessionIDLabel.lineBreakMode = .byCharWrapping
 | 
						|
        sessionIDLabel.accessibilityLabel = "Session ID label"
 | 
						|
        sessionIDLabel.text = profile.id
 | 
						|
        
 | 
						|
        // Session ID label container
 | 
						|
        let sessionIDLabelContainer = UIView()
 | 
						|
        sessionIDLabelContainer.addSubview(sessionIDLabel)
 | 
						|
        sessionIDLabel.pin(to: sessionIDLabelContainer, withInset: Values.mediumSpacing)
 | 
						|
        sessionIDLabelContainer.layer.cornerRadius = TextField.cornerRadius
 | 
						|
        sessionIDLabelContainer.layer.borderWidth = 1
 | 
						|
        sessionIDLabelContainer.layer.borderColor = isLightMode ? UIColor.black.cgColor : UIColor.white.cgColor
 | 
						|
        
 | 
						|
        // Copy button
 | 
						|
        let copyButton = Button(style: .prominentOutline, size: .medium)
 | 
						|
        copyButton.setTitle(NSLocalizedString("copy", comment: ""), for: UIControl.State.normal)
 | 
						|
        copyButton.addTarget(self, action: #selector(copySessionID), for: UIControl.Event.touchUpInside)
 | 
						|
        copyButton.set(.width, to: 160)
 | 
						|
        
 | 
						|
        // Stack view
 | 
						|
        let stackView = UIStackView(arrangedSubviews: [ profilePictureView, displayNameLabel, sessionIDLabelContainer, copyButton, UIView.vSpacer(Values.largeSpacing) ])
 | 
						|
        stackView.axis = .vertical
 | 
						|
        stackView.spacing = Values.largeSpacing
 | 
						|
        stackView.alignment = .center
 | 
						|
        
 | 
						|
        // Constraints
 | 
						|
        contentView.addSubview(stackView)
 | 
						|
        stackView.pin(to: contentView, withInset: Values.largeSpacing)
 | 
						|
    }
 | 
						|
    
 | 
						|
    @objc private func copySessionID() {
 | 
						|
        UIPasteboard.general.string = profile.id
 | 
						|
        presentingViewController?.dismiss(animated: true, completion: nil)
 | 
						|
    }
 | 
						|
}
 |