Browse Source

rename unified ViewController to AddGroupMembersViewController

cyberta 5 năm trước cách đây
mục cha
commit
d2875bd753

+ 4 - 8
deltachat-ios.xcodeproj/project.pbxproj

@@ -176,8 +176,7 @@
 		AEC67A1C241CE9E4007DDBE1 /* AppStateRestorer.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEC67A1B241CE9E4007DDBE1 /* AppStateRestorer.swift */; };
 		AEC67A1E241FCFE0007DDBE1 /* ChatListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEC67A1D241FCFE0007DDBE1 /* ChatListViewModel.swift */; };
 		AECEF03E244F2D55006C90DA /* QrPageController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AECEF03D244F2D55006C90DA /* QrPageController.swift */; };
-		AED423D3249F578B00B6B2BB /* NewGroupAddMembersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AED423D2249F578B00B6B2BB /* NewGroupAddMembersViewController.swift */; };
-		AED423D5249F57C100B6B2BB /* AddGroupMembersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AED423D4249F57C100B6B2BB /* AddGroupMembersViewController.swift */; };
+		AED423D3249F578B00B6B2BB /* AddGroupMembersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AED423D2249F578B00B6B2BB /* AddGroupMembersViewController.swift */; };
 		AED423D7249F580700B6B2BB /* BlockedContactsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AED423D6249F580700B6B2BB /* BlockedContactsViewController.swift */; };
 		AED62BCE247687E6009E220D /* LocationStreamingIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = AED62BCD247687E6009E220D /* LocationStreamingIndicator.swift */; };
 		AEE56D762253431E007DC082 /* AccountSetupController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEE56D752253431E007DC082 /* AccountSetupController.swift */; };
@@ -470,8 +469,7 @@
 		AEC67A1B241CE9E4007DDBE1 /* AppStateRestorer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppStateRestorer.swift; sourceTree = "<group>"; };
 		AEC67A1D241FCFE0007DDBE1 /* ChatListViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatListViewModel.swift; sourceTree = "<group>"; };
 		AECEF03D244F2D55006C90DA /* QrPageController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QrPageController.swift; sourceTree = "<group>"; };
-		AED423D2249F578B00B6B2BB /* NewGroupAddMembersViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewGroupAddMembersViewController.swift; sourceTree = "<group>"; };
-		AED423D4249F57C100B6B2BB /* AddGroupMembersViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddGroupMembersViewController.swift; sourceTree = "<group>"; };
+		AED423D2249F578B00B6B2BB /* AddGroupMembersViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddGroupMembersViewController.swift; sourceTree = "<group>"; };
 		AED423D6249F580700B6B2BB /* BlockedContactsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockedContactsViewController.swift; sourceTree = "<group>"; };
 		AED62BCD247687E6009E220D /* LocationStreamingIndicator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationStreamingIndicator.swift; sourceTree = "<group>"; };
 		AEE56D752253431E007DC082 /* AccountSetupController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountSetupController.swift; sourceTree = "<group>"; tabWidth = 4; };
@@ -944,8 +942,7 @@
 				AE76E5ED242BF2EA003CF461 /* WelcomeViewController.swift */,
 				AE8F503424753DFE007FEE0B /* GalleryViewController.swift */,
 				30734325249A280B00BF9AD1 /* MediaQualityController.swift */,
-				AED423D2249F578B00B6B2BB /* NewGroupAddMembersViewController.swift */,
-				AED423D4249F57C100B6B2BB /* AddGroupMembersViewController.swift */,
+				AED423D2249F578B00B6B2BB /* AddGroupMembersViewController.swift */,
 				AED423D6249F580700B6B2BB /* BlockedContactsViewController.swift */,
 				AE39D322249CFC1A007346A1 /* DocumentGalleryController.swift */,
 			);
@@ -1406,7 +1403,6 @@
 				AE39D323249CFC1A007346A1 /* DocumentGalleryController.swift in Sources */,
 				305961FD2346125100C80F33 /* TypingBubble.swift in Sources */,
 				305961D72346125100C80F33 /* MessageKit+Availability.swift in Sources */,
-				AED423D5249F57C100B6B2BB /* AddGroupMembersViewController.swift in Sources */,
 				AE8DD451249D1DFB009A4BC1 /* FileTableViewCell.swift in Sources */,
 				3040F45E234DFBC000FA34D5 /* Audio.swift in Sources */,
 				305961FE2346125100C80F33 /* InsetLabel.swift in Sources */,
@@ -1524,7 +1520,7 @@
 				305961FC2346125100C80F33 /* MessageContainerView.swift in Sources */,
 				305961D42346125100C80F33 /* MessagesViewController.swift in Sources */,
 				785BE16821E247F1003BE98C /* MessageInfoViewController.swift in Sources */,
-				AED423D3249F578B00B6B2BB /* NewGroupAddMembersViewController.swift in Sources */,
+				AED423D3249F578B00B6B2BB /* AddGroupMembersViewController.swift in Sources */,
 				AE851AC5227C755A00ED86F0 /* Protocols.swift in Sources */,
 				AE728F15229D5C390047565B /* PhotoPickerAlertAction.swift in Sources */,
 				305961F42346125100C80F33 /* TextMessageCell.swift in Sources */,

+ 61 - 33
deltachat-ios/Controller/AddGroupMembersViewController.swift

@@ -2,10 +2,15 @@ import UIKit
 import DcCore
 
 class AddGroupMembersViewController: GroupMembersViewController {
-    private var chatId: Int
+    var onMembersSelected: ((Set<Int>) -> Void)?
+    lazy var isVerifiedGroup: Bool = false
+
+    lazy var isNewGroup: Bool = {
+        return chat == nil
+    }()
 
     private lazy var sections: [AddGroupMemberSections] = {
-        if let chat = self.chat, chat.isVerified {
+        if isVerifiedGroup {
             return [.memberList]
         } else {
             return [.newContact, .memberList]
@@ -19,11 +24,22 @@ class AddGroupMembersViewController: GroupMembersViewController {
 
     private var contactAddedObserver: NSObjectProtocol?
 
-    private lazy var cancelButton: UIBarButtonItem = {
-        let button = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(cancelButtonPressed))
-        return button
+    private lazy var chatMemberIds: [Int] = {
+        if let chat = chat {
+            return chat.contactIds
+        }
+        return []
+    }()
+
+    private lazy var chat: DcChat? = {
+        if let chatId = self.chatId {
+            return dcContext.getChat(chatId: chatId)
+        }
+        return nil
     }()
 
+    private var chatId: Int?
+
     private lazy var newContactCell: ActionCell = {
         let cell = ActionCell()
         cell.actionColor = SystemColor.blue.uiColor
@@ -32,26 +48,31 @@ class AddGroupMembersViewController: GroupMembersViewController {
         return cell
     }()
 
-    private lazy var doneButton: UIBarButtonItem = {
-        let button = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(doneButtonPressed))
+    private lazy var cancelButton: UIBarButtonItem = {
+        let button = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(cancelButtonPressed))
         return button
     }()
 
-    private lazy var chat: DcChat? = {
-        return dcContext.getChat(chatId: chatId)
+    lazy var doneButton: UIBarButtonItem = {
+        let button = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(doneButtonPressed))
+        return button
     }()
 
-    private lazy var chatMemberIds: [Int] = {
-        if let chat = chat {
-            return chat.contactIds
-        }
-        return []
-    }()
+    //add members of new group, no chat object yet
+    init(preselected: Set<Int>, isVerified: Bool) {
+        super.init()
+        isVerifiedGroup = isVerified
+        numberOfSections = sections.count
+        selectedContactIds = preselected
+    }
 
+    //add members of existing group
     init(chatId: Int) {
         self.chatId = chatId
         super.init()
+        isVerifiedGroup = chat?.isVerified ?? false
         numberOfSections = sections.count
+        selectedContactIds = []
     }
 
     required init?(coder _: NSCoder) {
@@ -61,12 +82,11 @@ class AddGroupMembersViewController: GroupMembersViewController {
     // MARK: - lifecycle
     override func viewDidLoad() {
         super.viewDidLoad()
-
-        super.navigationItem.leftBarButtonItem = cancelButton
-        super.navigationItem.rightBarButtonItem = doneButton
         title = String.localized("group_add_members")
-        super.contactIds = loadMemberCandidates()
-        // Do any additional setup after loading the view.
+        navigationItem.rightBarButtonItem = doneButton
+        navigationItem.leftBarButtonItem = cancelButton
+        contactIds = loadMemberCandidates()
+
         let nc = NotificationCenter.default
         contactAddedObserver = nc.addObserver(
             forName: dcNotificationContactChanged,
@@ -82,6 +102,7 @@ class AddGroupMembersViewController: GroupMembersViewController {
                     self.contactIds = self.loadMemberCandidates()
                     if self.contactIds.contains(contactId) {
                         self.selectedContactIds.insert(contactId)
+
                         self.tableView.reloadData()
                     }
 
@@ -90,7 +111,12 @@ class AddGroupMembersViewController: GroupMembersViewController {
         }
     }
 
+    override func viewWillAppear(_ animated: Bool) {
+        super.viewWillAppear(animated)
+    }
+
     override func viewWillDisappear(_: Bool) {
+        // TODO: - check this for new group context
         if !isMovingFromParent {
             // a subview was added to the navigation stack, no action needed
             return
@@ -102,6 +128,20 @@ class AddGroupMembersViewController: GroupMembersViewController {
         }
     }
 
+    @objc func cancelButtonPressed() {
+        navigationController?.popViewController(animated: true)
+    }
+
+    @objc func doneButtonPressed() {
+        if let onMembersSelected = onMembersSelected {
+            if isNewGroup {
+                selectedContactIds.insert(Int(DC_CONTACT_ID_SELF))
+            }
+            onMembersSelected(selectedContactIds)
+        }
+        navigationController?.popViewController(animated: true)
+    }
+
     override func tableView(_: UITableView, numberOfRowsInSection section: Int) -> Int {
         let sectionType = sections[section]
         switch sectionType {
@@ -140,7 +180,7 @@ class AddGroupMembersViewController: GroupMembersViewController {
 
     func loadMemberCandidates() -> [Int] {
         var flags: Int32 = 0
-        if let chat = chat, chat.isVerified {
+        if isVerifiedGroup {
             flags |= DC_GCL_VERIFIED_ONLY
         }
         var contactIds = dcContext.getContacts(flags: flags)
@@ -149,18 +189,6 @@ class AddGroupMembersViewController: GroupMembersViewController {
         return Array(contactIds)
     }
 
-    @objc func cancelButtonPressed() {
-        navigationController?.popViewController(animated: true)
-    }
-
-    @objc func doneButtonPressed() {
-        for contactId in selectedContactIds {
-           _ = dcContext.addContactToChat(chatId: chatId, contactId: contactId)
-        }
-        navigationController?.popViewController(animated: true)
-    }
-
-    // MARK: - coordinator
     private func showNewContactController() {
         let newContactController = NewContactController(dcContext: dcContext)
         newContactController.openChatOnSave = false

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

@@ -270,7 +270,7 @@ class GroupChatDetailViewController: UIViewController {
     }
 
     private func showAddGroupMember(chatId: Int) {
-        let groupMemberViewController = NewGroupAddMembersViewController(chatId: chatId)
+        let groupMemberViewController = AddGroupMembersViewController(chatId: chatId)
         groupMemberViewController.onMembersSelected = { [weak self] (memberIds: Set<Int>) -> Void in
             guard let self = self else { return }
             for contactId in memberIds {

+ 0 - 197
deltachat-ios/Controller/NewGroupAddMembersViewController.swift

@@ -1,197 +0,0 @@
-import UIKit
-import DcCore
-
-class NewGroupAddMembersViewController: GroupMembersViewController {
-    var onMembersSelected: ((Set<Int>) -> Void)?
-    lazy var isVerifiedGroup: Bool = false
-
-    lazy var isNewGroup: Bool = {
-        return chat == nil
-    }()
-
-    private lazy var sections: [AddGroupMemberSections] = {
-        if isVerifiedGroup {
-            return [.memberList]
-        } else {
-            return [.newContact, .memberList]
-        }
-    }()
-
-    enum AddGroupMemberSections {
-        case newContact
-        case memberList
-    }
-
-    private var contactAddedObserver: NSObjectProtocol?
-
-    private lazy var chatMemberIds: [Int] = {
-        if let chat = chat {
-            return chat.contactIds
-        }
-        return []
-    }()
-
-    private lazy var chat: DcChat? = {
-        if let chatId = self.chatId {
-            return dcContext.getChat(chatId: chatId)
-        }
-        return nil
-    }()
-
-    private var chatId: Int?
-
-    private lazy var newContactCell: ActionCell = {
-        let cell = ActionCell()
-        cell.actionColor = SystemColor.blue.uiColor
-        cell.actionTitle = String.localized("menu_new_contact")
-        cell.selectionStyle = .none
-        return cell
-    }()
-
-    private lazy var cancelButton: UIBarButtonItem = {
-        let button = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(cancelButtonPressed))
-        return button
-    }()
-
-    lazy var doneButton: UIBarButtonItem = {
-        let button = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(doneButtonPressed))
-        return button
-    }()
-
-    //add members of new group, no chat object yet
-    init(preselected: Set<Int>, isVerified: Bool) {
-        super.init()
-        isVerifiedGroup = isVerified
-        numberOfSections = sections.count
-        selectedContactIds = preselected
-    }
-
-    //add members of existing group
-    init(chatId: Int) {
-        self.chatId = chatId
-        super.init()
-        isVerifiedGroup = chat?.isVerified ?? false
-        numberOfSections = sections.count
-        selectedContactIds = []
-    }
-
-    required init?(coder _: NSCoder) {
-        fatalError("init(coder:) has not been implemented")
-    }
-
-    // MARK: - lifecycle
-    override func viewDidLoad() {
-        super.viewDidLoad()
-        title = String.localized("group_add_members")
-        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) {
-        // TODO: - check this for new group context
-        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() {
-        navigationController?.popViewController(animated: true)
-    }
-
-    @objc func doneButtonPressed() {
-        if let onMembersSelected = onMembersSelected {
-            if isNewGroup {
-                selectedContactIds.insert(Int(DC_CONTACT_ID_SELF))
-            }
-            onMembersSelected(selectedContactIds)
-        }
-        navigationController?.popViewController(animated: true)
-    }
-
-    override func tableView(_: UITableView, numberOfRowsInSection section: Int) -> Int {
-        let sectionType = sections[section]
-        switch sectionType {
-        case .newContact:
-            return 1
-        case .memberList:
-            return numberOfRowsForContactList
-        }
-    }
-
-    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
-        let sectionType = sections[indexPath.section]
-        return sectionType == .memberList ? ContactCell.cellHeight : UITableView.automaticDimension
-    }
-
-    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
-        let sectionType = sections[indexPath.section]
-        switch sectionType {
-        case .newContact:
-            return newContactCell
-        case .memberList:
-            return updateContactCell(for: indexPath)
-        }
-    }
-
-    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
-        let sectionType = sections[indexPath.section]
-        switch sectionType {
-        case .newContact:
-            tableView.deselectRow(at: indexPath, animated: true)
-            showNewContactController()
-        case .memberList:
-            didSelectContactCell(at: indexPath)
-        }
-    }
-
-    func loadMemberCandidates() -> [Int] {
-        var flags: Int32 = 0
-        if isVerifiedGroup {
-            flags |= DC_GCL_VERIFIED_ONLY
-        }
-        var contactIds = dcContext.getContacts(flags: flags)
-        let memberSet = Set(chatMemberIds)
-        contactIds.removeAll(where: { memberSet.contains($0)})
-        return Array(contactIds)
-    }
-
-    private func showNewContactController() {
-        let newContactController = NewContactController(dcContext: dcContext)
-        newContactController.openChatOnSave = false
-        navigationController?.pushViewController(newContactController, animated: true)
-    }
-}

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

@@ -384,7 +384,7 @@ class NewGroupController: UITableViewController, MediaPickerDelegate {
     }
 
     private func showAddMembers(preselectedMembers: Set<Int>, isVerified: Bool) {
-        let newGroupController = NewGroupAddMembersViewController(preselected: preselectedMembers,
+        let newGroupController = AddGroupMembersViewController(preselected: preselectedMembers,
                                                                   isVerified: isVerified)
         newGroupController.onMembersSelected = { [weak self] (memberIds: Set<Int>) -> Void in
             guard let self = self else { return }