mirror of https://github.com/oxen-io/session-ios
Make profile pictures tappable
parent
5fed33a661
commit
dfdffc607c
@ -0,0 +1,69 @@
|
|||||||
|
|
||||||
|
final class UserDetailsSheet : Sheet {
|
||||||
|
private let sessionID: String
|
||||||
|
|
||||||
|
init(for sessionID: String) {
|
||||||
|
self.sessionID = sessionID
|
||||||
|
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.publicKey = sessionID
|
||||||
|
profilePictureView.update()
|
||||||
|
// Display name label
|
||||||
|
let displayNameLabel = UILabel()
|
||||||
|
let displayName = Storage.shared.getContact(with: sessionID)?.displayName(for: .regular) ?? sessionID
|
||||||
|
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 = sessionID
|
||||||
|
// 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 = sessionID
|
||||||
|
presentingViewController?.dismiss(animated: true, completion: nil)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue