瀏覽代碼

Merge pull request #1086 from deltachat/group-creation-issues

Group creation issues
cyBerta 4 年之前
父節點
當前提交
3eccb53104

+ 10 - 42
deltachat-ios/Controller/AddGroupMembersViewController.swift

@@ -22,8 +22,6 @@ class AddGroupMembersViewController: GroupMembersViewController {
         case memberList
     }
 
-    private var contactAddedObserver: NSObjectProtocol?
-
     private lazy var chatMemberIds: [Int] = {
         if let chat = chat {
             return chat.contactIds
@@ -86,44 +84,6 @@ class AddGroupMembersViewController: GroupMembersViewController {
         navigationItem.rightBarButtonItem = doneButton
         navigationItem.leftBarButtonItem = cancelButton
         contactIds = loadMemberCandidates()
-
-        let nc = NotificationCenter.default
-        contactAddedObserver = nc.addObserver(
-            forName: dcNotificationContactChanged,
-            object: nil,
-            queue: nil
-        ) { [weak self] notification in
-            guard let self = self else { return }
-            if let ui = notification.userInfo {
-                if let contactId = ui["contact_id"] as? Int {
-                    if contactId == 0 {
-                        return
-                    }
-                    self.contactIds = self.loadMemberCandidates()
-                    if self.contactIds.contains(contactId) {
-                        self.selectedContactIds.insert(contactId)
-                        self.tableView.reloadData()
-                    }
-
-                }
-            }
-        }
-    }
-
-    override func viewWillAppear(_ animated: Bool) {
-        super.viewWillAppear(animated)
-    }
-
-    override func viewWillDisappear(_: Bool) {
-        if !isMovingFromParent {
-            // a subview was added to the navigation stack, no action needed
-            return
-        }
-
-        let nc = NotificationCenter.default
-        if let observer = self.contactAddedObserver {
-            nc.removeObserver(observer)
-        }
     }
 
     @objc func cancelButtonPressed() {
@@ -185,8 +145,16 @@ class AddGroupMembersViewController: GroupMembersViewController {
     }
 
     private func showNewContactController() {
-        let newContactController = NewContactController(dcContext: dcContext)
-        newContactController.openChatOnSave = false
+        let newContactController = NewContactController(dcContext: dcContext, searchResult: searchText)
+        newContactController.createChatOnSave = false
+        newContactController.onContactSaved = { [weak self] (contactId: Int) -> Void in
+            guard let self = self else { return }
+            self.contactIds = self.loadMemberCandidates()
+            if self.contactIds.contains(contactId) {
+                self.selectedContactIds.insert(contactId)
+                self.tableView.reloadData()
+            }
+        }
         navigationController?.pushViewController(newContactController, animated: true)
     }
 }

+ 1 - 1
deltachat-ios/Controller/GroupMembersViewController.swift

@@ -46,7 +46,7 @@ class GroupMembersViewController: UITableViewController {
         return searchController.searchBar.text?.isEmpty ?? true
     }
 
-    private var searchText: String? {
+    open var searchText: String? {
         return searchController.searchBar.text
     }
 

+ 1 - 1
deltachat-ios/Controller/NewChatViewController.swift

@@ -314,7 +314,7 @@ class NewChatViewController: UITableViewController {
     }
 
     private func showNewContactController() {
-        let newContactController = NewContactController(dcContext: dcContext)
+        let newContactController = NewContactController(dcContext: dcContext, searchResult: searchText)
         navigationController?.pushViewController(newContactController, animated: true)
     }
 

+ 18 - 4
deltachat-ios/Controller/NewContactController.swift

@@ -4,13 +4,16 @@ import DcCore
 class NewContactController: UITableViewController {
 
     let dcContext: DcContext
-    var openChatOnSave = true
+    var createChatOnSave = true
+    var prefilledSeachResult: String?
 
     let emailCell = TextFieldCell.makeEmailCell()
     let nameCell = TextFieldCell.makeNameCell()
     var doneButton: UIBarButtonItem?
     var cancelButton: UIBarButtonItem?
 
+    var onContactSaved: ((Int) -> Void)?
+
     func contactIsValid() -> Bool {
         return Utils.isValid(email: model.email)
     }
@@ -28,9 +31,10 @@ class NewContactController: UITableViewController {
     let cells: [UITableViewCell]
 
     // for creating a new contact
-    init(dcContext: DcContext) {
+    init(dcContext: DcContext, searchResult: String? = nil) {
         self.dcContext = dcContext
         cells = [emailCell, nameCell]
+        prefilledSeachResult = searchResult
         super.init(style: .grouped)
         emailCell.textFieldDelegate = self
         nameCell.textFieldDelegate = self
@@ -52,6 +56,13 @@ class NewContactController: UITableViewController {
         emailCell.textField.addTarget(self, action: #selector(NewContactController.emailTextChanged), for: UIControl.Event.editingChanged)
         nameCell.textField.addTarget(self, action: #selector(NewContactController.nameTextChanged), for: UIControl.Event.editingChanged)
     }
+    
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        if let searchResult = prefilledSeachResult, searchResult.contains("@") {
+            emailCell.textField.insertText(searchResult)
+        }
+    }
 
     override func viewDidAppear(_: Bool) {
         if emailCell.textField.isEnabled {
@@ -73,8 +84,11 @@ class NewContactController: UITableViewController {
 
     @objc func saveContactButtonPressed() {
         let contactId = dcContext.createContact(name: model.name, email: model.email)
-        let chatId = dcContext.createChatByContactId(contactId: contactId)
-        if openChatOnSave {
+        if let onContactSaved = self.onContactSaved {
+            onContactSaved(contactId)
+        }
+        if createChatOnSave {
+            let chatId = dcContext.createChatByContactId(contactId: contactId)
             showChat(chatId: chatId)
         } else {
             navigationController?.popViewController(animated: true)