Преглед изворни кода

add basic option to turn on search from contact detail viewcontroller

cyberta пре 3 година
родитељ
комит
3346c95444

+ 13 - 0
deltachat-ios/Chat/ChatViewController.swift

@@ -358,6 +358,12 @@ class ChatViewController: UITableViewController {
         }
         if !isDismissing {
             self.tableView.becomeFirstResponder()
+            if activateSearchOnAppear {
+                DispatchQueue.main.async { [weak self] in
+                    self?.searchController.isActive = true
+                    self?.searchController.searchBar.becomeFirstResponder()
+                }
+            }
             var bottomInsets = self.messageInputBar.intrinsicContentSize.height + self.messageInputBar.keyboardHeight
             if UIApplication.shared.statusBarOrientation.isLandscape,
                let root = UIApplication.shared.keyWindow?.rootViewController {
@@ -1839,6 +1845,13 @@ extension ChatViewController: UISearchBarDelegate {
         configureDraftArea(draft: draft)
         self.tableView.becomeFirstResponder()
     }
+
+    func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
+        logger.debug("searchbar: searchBarTextDidEndEditing")
+        isSearchActive = false
+        configureDraftArea(draft: draft)
+        self.tableView.becomeFirstResponder()
+    }
 }
 
 // MARK: - ChatContactRequestBar

+ 24 - 0
deltachat-ios/Controller/ContactDetailViewController.swift

@@ -89,6 +89,17 @@ class ContactDetailViewController: UITableViewController {
         return cell
     }()
 
+    private lazy var searchCell: UITableViewCell = {
+        let cell = UITableViewCell(style: .value1, reuseIdentifier: nil)
+        cell.textLabel?.text = String.localized("search")
+        cell.accessoryType = .disclosureIndicator
+        if viewModel.chatId == 0 {
+            cell.isUserInteractionEnabled = false
+            cell.textLabel?.isEnabled = false
+        }
+        return cell
+    }()
+
     private lazy var statusCell: MultilineLabelCell = {
         let cell = MultilineLabelCell()
         cell.multilineDelegate = self
@@ -170,6 +181,8 @@ class ContactDetailViewController: UITableViewController {
                 return documentsCell
             case .gallery:
                 return galleryCell
+            case .search:
+                return searchCell
             case .ephemeralMessages:
                 return ephemeralMessagesCell
             case .muteChat:
@@ -333,6 +346,8 @@ class ContactDetailViewController: UITableViewController {
             showDocuments()
         case .gallery:
             showGallery()
+        case .search:
+            showSearch()
         case .ephemeralMessages:
             showEphemeralMessagesController()
         case .muteChat:
@@ -473,6 +488,15 @@ class ContactDetailViewController: UITableViewController {
         navigationController?.pushViewController(galleryController, animated: true)
     }
 
+    private func showSearch() {
+        if let chatViewController = navigationController?.viewControllers.last(where: {
+            $0 is ChatViewController
+        }) as? ChatViewController {
+            chatViewController.activateSearchOnAppear = true
+            navigationController?.popViewController(animated: true)
+        }
+    }
+
     private func showContactAvatarIfNeeded() {
         if viewModel.isSavedMessages {
             let chat = viewModel.context.getChat(chatId: viewModel.chatId)

+ 2 - 1
deltachat-ios/ViewModel/ContactDetailViewModel.swift

@@ -15,6 +15,7 @@ class ContactDetailViewModel {
     enum ChatOption {
         case gallery
         case documents
+        case search
         case ephemeralMessages
         case muteChat
         case startChat
@@ -71,7 +72,7 @@ class ContactDetailViewModel {
         sections.append(.chatActions)
 
         if chatId != 0 {
-            chatOptions = [.gallery, .documents]
+            chatOptions = [.gallery, .documents, .search]
             if !isDeviceTalk {
                 chatOptions.append(.ephemeralMessages)
             }