mirror of
https://github.com/oxen-io/session-ios.git
synced 2023-12-13 21:30:14 +01:00
e7bc2e86db
// FREEBIE
123 lines
5 KiB
Swift
123 lines
5 KiB
Swift
// Originally based on EPContacts
|
|
//
|
|
// Created by Prabaharan Elangovan on 13/10/15.
|
|
// Copyright © 2015 Prabaharan Elangovan. All rights reserved.
|
|
//
|
|
// Modified for Signal by Michael Kirk on 11/25/2016
|
|
// Parts Copyright © 2016 Open Whisper Systems. All rights reserved.
|
|
|
|
import UIKit
|
|
|
|
@available(iOS 9.0, *)
|
|
class ContactCell: UITableViewCell {
|
|
|
|
static let nib = UINib(nibName:"ContactCell", bundle: nil)
|
|
|
|
@IBOutlet weak var contactTextLabel: UILabel!
|
|
@IBOutlet weak var contactDetailTextLabel: UILabel!
|
|
@IBOutlet weak var contactImageView: UIImageView!
|
|
@IBOutlet weak var contactContainerView: UIView!
|
|
|
|
var contact: Contact?
|
|
|
|
override func awakeFromNib() {
|
|
super.awakeFromNib()
|
|
|
|
// Initialization code
|
|
selectionStyle = UITableViewCellSelectionStyle.none
|
|
|
|
contactContainerView.layer.masksToBounds = true
|
|
contactContainerView.layer.cornerRadius = contactContainerView.frame.size.width/2
|
|
|
|
NotificationCenter.default.addObserver(self, selector: #selector(self.didChangePreferredContentSize), name: NSNotification.Name.UIContentSizeCategoryDidChange, object: nil)
|
|
}
|
|
|
|
override func prepareForReuse() {
|
|
accessoryType = .none
|
|
}
|
|
|
|
override func setSelected(_ selected: Bool, animated: Bool) {
|
|
super.setSelected(selected, animated: animated)
|
|
accessoryType = selected ? .checkmark : .none
|
|
}
|
|
|
|
func didChangePreferredContentSize() {
|
|
contactTextLabel.font = UIFont.preferredFont(forTextStyle: .body)
|
|
contactDetailTextLabel.font = UIFont.preferredFont(forTextStyle: .subheadline)
|
|
}
|
|
|
|
func updateContactsinUI(_ contact: Contact, subtitleType: SubtitleCellValue, contactsManager: OWSContactsManager) {
|
|
self.contact = contact
|
|
|
|
if contactTextLabel != nil {
|
|
contactTextLabel.attributedText = contact.cnContact?.formattedFullName(font:contactTextLabel.font)
|
|
}
|
|
|
|
updateSubtitleBasedonType(subtitleType, contact: contact)
|
|
|
|
if contact.image == nil {
|
|
let contactIdForDeterminingBackgroundColor: String
|
|
if let signalId = contact.parsedPhoneNumbers.first?.toE164() {
|
|
contactIdForDeterminingBackgroundColor = signalId
|
|
} else {
|
|
contactIdForDeterminingBackgroundColor = contact.fullName
|
|
}
|
|
|
|
let avatarBuilder = OWSContactAvatarBuilder(contactId:contactIdForDeterminingBackgroundColor,
|
|
name:contact.fullName,
|
|
contactsManager:contactsManager)
|
|
self.contactImageView?.image = avatarBuilder.buildDefaultImage();
|
|
} else {
|
|
self.contactImageView?.image = contact.image
|
|
}
|
|
}
|
|
|
|
func updateSubtitleBasedonType(_ subtitleType: SubtitleCellValue , contact: Contact) {
|
|
switch subtitleType {
|
|
|
|
case SubtitleCellValue.phoneNumber:
|
|
if contact.userTextPhoneNumbers.count > 0 {
|
|
self.contactDetailTextLabel.text = "\(contact.userTextPhoneNumbers[0])"
|
|
} else {
|
|
self.contactDetailTextLabel.text = NSLocalizedString("CONTACT_PICKER_NO_PHONE_NUMBERS_AVAILABLE", comment: "table cell subtitle when contact card has no known phone number")
|
|
}
|
|
case SubtitleCellValue.email:
|
|
if contact.emails.count > 0 {
|
|
self.contactDetailTextLabel.text = "\(contact.emails[0])"
|
|
} else {
|
|
self.contactDetailTextLabel.text = NSLocalizedString("CONTACT_PICKER_NO_EMAILS_AVAILABLE", comment: "table cell subtitle when contact card has no email")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@available(iOS 9.0, *)
|
|
fileprivate extension CNContact {
|
|
/**
|
|
* Bold the sorting portion of the name. e.g. if we sort by family name, bold the family name.
|
|
*/
|
|
func formattedFullName(font: UIFont) -> NSAttributedString? {
|
|
let keyToHighlight = ContactSortOrder == .familyName ? CNContactFamilyNameKey : CNContactGivenNameKey
|
|
|
|
let boldDescriptor = font.fontDescriptor.withSymbolicTraits(.traitBold)
|
|
let boldAttributes = [
|
|
NSFontAttributeName: UIFont(descriptor:boldDescriptor!, size: 0)
|
|
]
|
|
|
|
if let attributedName = CNContactFormatter.attributedString(from: self, style: .fullName, defaultAttributes: nil) {
|
|
let highlightedName = attributedName.mutableCopy() as! NSMutableAttributedString
|
|
highlightedName.enumerateAttributes(in: NSMakeRange(0, highlightedName.length), options: [], using: { (attrs, range, stop) in
|
|
if let property = attrs[CNContactPropertyAttribute] as? String, property == keyToHighlight {
|
|
highlightedName.addAttributes(boldAttributes, range: range)
|
|
}
|
|
})
|
|
return highlightedName
|
|
}
|
|
|
|
if let emailAddress = (self.emailAddresses.first?.value as String?) {
|
|
return NSAttributedString(string: emailAddress, attributes: boldAttributes)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
}
|