|
|
@ -97,8 +97,16 @@ class ContactShareAddress: ContactShareFieldBase<OWSContactAddress> {
|
|
|
|
|
|
|
|
|
|
|
|
// MARK: -
|
|
|
|
// MARK: -
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protocol ContactShareFieldViewDelegate: class {
|
|
|
|
|
|
|
|
func contactShareFieldViewDidChangeSelectedState()
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// MARK: -
|
|
|
|
|
|
|
|
|
|
|
|
class ContactShareFieldView: UIStackView {
|
|
|
|
class ContactShareFieldView: UIStackView {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
weak var delegate: ContactShareFieldViewDelegate?
|
|
|
|
|
|
|
|
|
|
|
|
let field: ContactShareField
|
|
|
|
let field: ContactShareField
|
|
|
|
|
|
|
|
|
|
|
|
let previewViewBlock : (() -> UIView)
|
|
|
|
let previewViewBlock : (() -> UIView)
|
|
|
@ -112,9 +120,10 @@ class ContactShareFieldView: UIStackView {
|
|
|
|
fatalError("Unimplemented")
|
|
|
|
fatalError("Unimplemented")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
required init(field: ContactShareField, previewViewBlock : @escaping (() -> UIView)) {
|
|
|
|
required init(field: ContactShareField, previewViewBlock : @escaping (() -> UIView), delegate: ContactShareFieldViewDelegate) {
|
|
|
|
self.field = field
|
|
|
|
self.field = field
|
|
|
|
self.previewViewBlock = previewViewBlock
|
|
|
|
self.previewViewBlock = previewViewBlock
|
|
|
|
|
|
|
|
self.delegate = delegate
|
|
|
|
|
|
|
|
|
|
|
|
super.init(frame: CGRect.zero)
|
|
|
|
super.init(frame: CGRect.zero)
|
|
|
|
|
|
|
|
|
|
|
@ -161,6 +170,10 @@ class ContactShareFieldView: UIStackView {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
field.setIsIncluded(!field.isIncluded())
|
|
|
|
field.setIsIncluded(!field.isIncluded())
|
|
|
|
checkbox.isSelected = field.isIncluded()
|
|
|
|
checkbox.isSelected = field.isIncluded()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if let delegate = delegate {
|
|
|
|
|
|
|
|
delegate.contactShareFieldViewDidChangeSelectedState()
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -168,7 +181,8 @@ class ContactShareFieldView: UIStackView {
|
|
|
|
|
|
|
|
|
|
|
|
// TODO: Rename to ContactShareApprovalViewController
|
|
|
|
// TODO: Rename to ContactShareApprovalViewController
|
|
|
|
@objc
|
|
|
|
@objc
|
|
|
|
public class ApproveContactShareViewController: OWSViewController, EditContactShareNameViewControllerDelegate {
|
|
|
|
public class ApproveContactShareViewController: OWSViewController, EditContactShareNameViewControllerDelegate, ContactShareFieldViewDelegate {
|
|
|
|
|
|
|
|
|
|
|
|
weak var delegate: ApproveContactShareViewControllerDelegate?
|
|
|
|
weak var delegate: ApproveContactShareViewControllerDelegate?
|
|
|
|
|
|
|
|
|
|
|
|
let contactsManager: OWSContactsManager
|
|
|
|
let contactsManager: OWSContactsManager
|
|
|
@ -208,21 +222,26 @@ public class ApproveContactShareViewController: OWSViewController, EditContactSh
|
|
|
|
let field = ContactSharePhoneNumber(phoneNumber)
|
|
|
|
let field = ContactSharePhoneNumber(phoneNumber)
|
|
|
|
let fieldView = ContactShareFieldView(field: field, previewViewBlock: {
|
|
|
|
let fieldView = ContactShareFieldView(field: field, previewViewBlock: {
|
|
|
|
return ContactFieldView.contactFieldView(forPhoneNumber: phoneNumber, layoutMargins: previewInsets, actionBlock: nil)
|
|
|
|
return ContactFieldView.contactFieldView(forPhoneNumber: phoneNumber, layoutMargins: previewInsets, actionBlock: nil)
|
|
|
|
})
|
|
|
|
},
|
|
|
|
|
|
|
|
delegate: self)
|
|
|
|
fieldViews.append(fieldView)
|
|
|
|
fieldViews.append(fieldView)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for email in contactShare.emails {
|
|
|
|
for email in contactShare.emails {
|
|
|
|
let field = ContactShareEmail(email)
|
|
|
|
let field = ContactShareEmail(email)
|
|
|
|
let fieldView = ContactShareFieldView(field: field, previewViewBlock: {
|
|
|
|
let fieldView = ContactShareFieldView(field: field, previewViewBlock: {
|
|
|
|
return ContactFieldView.contactFieldView(forEmail: email, layoutMargins: previewInsets, actionBlock: nil)
|
|
|
|
return ContactFieldView.contactFieldView(forEmail: email, layoutMargins: previewInsets, actionBlock: nil)
|
|
|
|
})
|
|
|
|
},
|
|
|
|
|
|
|
|
delegate: self)
|
|
|
|
fieldViews.append(fieldView)
|
|
|
|
fieldViews.append(fieldView)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for address in contactShare.addresses {
|
|
|
|
for address in contactShare.addresses {
|
|
|
|
let field = ContactShareAddress(address)
|
|
|
|
let field = ContactShareAddress(address)
|
|
|
|
let fieldView = ContactShareFieldView(field: field, previewViewBlock: {
|
|
|
|
let fieldView = ContactShareFieldView(field: field, previewViewBlock: {
|
|
|
|
return ContactFieldView.contactFieldView(forAddress: address, layoutMargins: previewInsets, actionBlock: nil)
|
|
|
|
return ContactFieldView.contactFieldView(forAddress: address, layoutMargins: previewInsets, actionBlock: nil)
|
|
|
|
})
|
|
|
|
},
|
|
|
|
|
|
|
|
delegate: self)
|
|
|
|
fieldViews.append(fieldView)
|
|
|
|
fieldViews.append(fieldView)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -264,7 +283,16 @@ public class ApproveContactShareViewController: OWSViewController, EditContactSh
|
|
|
|
|
|
|
|
|
|
|
|
// TODO: Surface error with resolution to user if not.
|
|
|
|
// TODO: Surface error with resolution to user if not.
|
|
|
|
func canShareContact() -> Bool {
|
|
|
|
func canShareContact() -> Bool {
|
|
|
|
return contactShare.ows_isValid
|
|
|
|
return contactShare.ows_isValid && isAtLeastOneFieldSelected()
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func isAtLeastOneFieldSelected() -> Bool {
|
|
|
|
|
|
|
|
for fieldView in fieldViews {
|
|
|
|
|
|
|
|
if fieldView.field.isIncluded() {
|
|
|
|
|
|
|
|
return true
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func updateNavigationBar() {
|
|
|
|
func updateNavigationBar() {
|
|
|
@ -384,6 +412,9 @@ public class ApproveContactShareViewController: OWSViewController, EditContactSh
|
|
|
|
// MARK: -
|
|
|
|
// MARK: -
|
|
|
|
|
|
|
|
|
|
|
|
func didPressSendButton() {
|
|
|
|
func didPressSendButton() {
|
|
|
|
|
|
|
|
SwiftAssertIsOnMainThread(#function)
|
|
|
|
|
|
|
|
assert(canShareContact())
|
|
|
|
|
|
|
|
|
|
|
|
Logger.info("\(logTag) \(#function)")
|
|
|
|
Logger.info("\(logTag) \(#function)")
|
|
|
|
|
|
|
|
|
|
|
|
guard let delegate = self.delegate else {
|
|
|
|
guard let delegate = self.delegate else {
|
|
|
@ -424,4 +455,10 @@ public class ApproveContactShareViewController: OWSViewController, EditContactSh
|
|
|
|
|
|
|
|
|
|
|
|
self.updateNavigationBar()
|
|
|
|
self.updateNavigationBar()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// MARK: - ContactShareFieldViewDelegate
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public func contactShareFieldViewDidChangeSelectedState() {
|
|
|
|
|
|
|
|
self.updateNavigationBar()
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|