-
Notifications
You must be signed in to change notification settings - Fork 48
Expand file tree
/
Copy pathConversationManager.swift
More file actions
102 lines (90 loc) · 3.8 KB
/
ConversationManager.swift
File metadata and controls
102 lines (90 loc) · 3.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
//
// ConversationManager.swift
// VariousManagerDemoApp
//
// Created by JungpyoHong on 4/20/21.
//
import Foundation
import MessageUI
import UIKit
struct MailFeedback {
let recipients: [String]
let subject: String
let body: String
}
struct MessageFeedBack {
let recipients: [String]
let body: String
}
class ConversationManager: NSObject {
private weak var mailDelegate: MFMailComposeViewControllerDelegate?
private var mailController: MFMailComposeViewController?
private weak var messageDelegate: MFMessageComposeViewControllerDelegate?
private var messageController: MFMessageComposeViewController?
private var controller = UIViewController()
// For Mail,Message method
init(presentingController controller: NSObject, mailDelegate: MFMailComposeViewControllerDelegate, messageDelegate: MFMessageComposeViewControllerDelegate, viewController: UIViewController) {
self.mailDelegate = mailDelegate
self.mailController = MFMailComposeViewController()
self.messageController = MFMessageComposeViewController()
self.messageDelegate = messageDelegate
self.controller = viewController
super.init()
mailController?.mailComposeDelegate = self
}
// For Mail method
init(presentingController controller: NSObject, mailDelegate: MFMailComposeViewControllerDelegate, viewController: UIViewController) {
self.mailDelegate = mailDelegate
self.mailController = MFMailComposeViewController()
self.controller = viewController
super.init()
self.mailController?.mailComposeDelegate = self
}
// For Message method
init(presentingController controller: NSObject, messageDelegate: MFMessageComposeViewControllerDelegate, viewController: UIViewController) {
self.messageController = MFMessageComposeViewController()
self.messageDelegate = messageDelegate
self.controller = viewController
super.init()
self.messageController?.messageComposeDelegate = self
}
// For call method
init(presentingController controller: NSObject, viewController: UIViewController) {
self.controller = viewController
super.init()
}
func sendEmail(feedback: MailFeedback) {
if MFMailComposeViewController.canSendMail() {
self.mailDelegate = self
mailController?.setToRecipients(feedback.recipients)
mailController?.setSubject(feedback.subject)
mailController?.setMessageBody(feedback.body, isHTML: false)
}
controller.present(mailController ?? UIViewController(), animated: true)
}
func sendMessage(feedback: MessageFeedBack) {
if MFMessageComposeViewController.canSendText() {
self.mailDelegate = self
messageController?.recipients = feedback.recipients
messageController?.body = feedback.body
}
controller.present(messageController ?? UIViewController(), animated: true)
}
func makeCall(number: String) {
let number = number
guard let url = URL(string: "tel://\(number)") else { return }
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
}
}
extension ConversationManager: MFMailComposeViewControllerDelegate {
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
controller.dismiss(animated: true, completion: nil)
}
}
extension ConversationManager: MFMessageComposeViewControllerDelegate {
func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) {
controller.dismiss(animated: true, completion: nil)
}
}