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.
		
		
		
		
		
			
		
			
				
	
	
		
			107 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Swift
		
	
			
		
		
	
	
			107 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Swift
		
	
// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
 | 
						|
 | 
						|
import UIKit
 | 
						|
import YYImage
 | 
						|
import SessionUIKit
 | 
						|
 | 
						|
/// Shown when the user taps a profile picture in the conversation settings.
 | 
						|
final class ProfilePictureVC: BaseVC {
 | 
						|
    private let image: UIImage?
 | 
						|
    private let animatedImage: YYImage?
 | 
						|
    private let snTitle: String
 | 
						|
    
 | 
						|
    private var imageSize: CGFloat { (UIScreen.main.bounds.width - (2 * Values.largeSpacing)) }
 | 
						|
    
 | 
						|
    // MARK: - UI
 | 
						|
    
 | 
						|
    private lazy var fallbackView: UIView = {
 | 
						|
        let result: UIView = UIView()
 | 
						|
        result.clipsToBounds = true
 | 
						|
        result.themeBackgroundColor = .backgroundSecondary
 | 
						|
        result.layer.cornerRadius = (imageSize / 2)
 | 
						|
        result.isHidden = (
 | 
						|
            image != nil ||
 | 
						|
            animatedImage != nil
 | 
						|
        )
 | 
						|
        result.set(.width, to: imageSize)
 | 
						|
        result.set(.height, to: imageSize)
 | 
						|
        
 | 
						|
        return result
 | 
						|
    }()
 | 
						|
    
 | 
						|
    private lazy var imageView: UIImageView = {
 | 
						|
        let result: UIImageView = UIImageView(image: image)
 | 
						|
        result.clipsToBounds = true
 | 
						|
        result.contentMode = .scaleAspectFill
 | 
						|
        result.layer.cornerRadius = (imageSize / 2)
 | 
						|
        result.isHidden = (image == nil)
 | 
						|
        result.set(.width, to: imageSize)
 | 
						|
        result.set(.height, to: imageSize)
 | 
						|
        
 | 
						|
        return result
 | 
						|
    }()
 | 
						|
    
 | 
						|
    private lazy var animatedImageView: YYAnimatedImageView = {
 | 
						|
        let result: YYAnimatedImageView = YYAnimatedImageView(image: animatedImage)
 | 
						|
        result.clipsToBounds = true
 | 
						|
        result.contentMode = .scaleAspectFill
 | 
						|
        result.layer.cornerRadius = (imageSize / 2)
 | 
						|
        result.isHidden = (animatedImage == nil)
 | 
						|
        result.set(.width, to: imageSize)
 | 
						|
        result.set(.height, to: imageSize)
 | 
						|
        
 | 
						|
        return result
 | 
						|
    }()
 | 
						|
    
 | 
						|
    // MARK: - Initialization
 | 
						|
    
 | 
						|
    init(image: UIImage?, animatedImage: YYImage?, title: String) {
 | 
						|
        self.image = image
 | 
						|
        self.animatedImage = animatedImage
 | 
						|
        self.snTitle = title
 | 
						|
        
 | 
						|
        super.init(nibName: nil, bundle: nil)
 | 
						|
    }
 | 
						|
    
 | 
						|
    override init(nibName: String?, bundle: Bundle?) {
 | 
						|
        preconditionFailure("Use init(image:) instead.")
 | 
						|
    }
 | 
						|
    
 | 
						|
    required init?(coder: NSCoder) {
 | 
						|
        preconditionFailure("Use init(coder:) instead.")
 | 
						|
    }
 | 
						|
    
 | 
						|
    override func viewDidLoad() {
 | 
						|
        view.themeBackgroundColor = .backgroundPrimary
 | 
						|
        
 | 
						|
        setNavBarTitle(snTitle)
 | 
						|
        
 | 
						|
        // Close button
 | 
						|
        let closeButton = UIBarButtonItem(
 | 
						|
            image: #imageLiteral(resourceName: "X").withRenderingMode(.alwaysTemplate),
 | 
						|
            style: .plain,
 | 
						|
            target: self,
 | 
						|
            action: #selector(close)
 | 
						|
        )
 | 
						|
        closeButton.themeTintColor = .textPrimary
 | 
						|
        navigationItem.leftBarButtonItem = closeButton
 | 
						|
        
 | 
						|
        view.addSubview(fallbackView)
 | 
						|
        view.addSubview(imageView)
 | 
						|
        view.addSubview(animatedImageView)
 | 
						|
        
 | 
						|
        fallbackView.center(in: view)
 | 
						|
        imageView.center(in: view)
 | 
						|
        animatedImageView.center(in: view)
 | 
						|
        
 | 
						|
        // Gesture recognizer
 | 
						|
        let swipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(close))
 | 
						|
        swipeGestureRecognizer.direction = .down
 | 
						|
        view.addGestureRecognizer(swipeGestureRecognizer)
 | 
						|
    }
 | 
						|
    
 | 
						|
    @objc private func close() {
 | 
						|
        presentingViewController?.dismiss(animated: true, completion: nil)
 | 
						|
    }
 | 
						|
}
 |