From ecdaad06ff429747c68b620d94c3dbdd6911b6d5 Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Mon, 11 Jun 2018 13:33:21 -0400 Subject: [PATCH] Handle no results In line with other messaging apps, we intentionally don't show a "No Results" cell. We simply don't display any cells. Though we could easily modify this in the future. // FREEBIE --- .../ConversationSearchViewController.swift | 30 ++++++++++++------- .../translations/en.lproj/Localizable.strings | 3 -- .../utils/ConversationSearcher.swift | 4 +++ 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/Signal/src/ViewControllers/HomeView/ConversationSearchViewController.swift b/Signal/src/ViewControllers/HomeView/ConversationSearchViewController.swift index bea9df6b4..a1853916b 100644 --- a/Signal/src/ViewControllers/HomeView/ConversationSearchViewController.swift +++ b/Signal/src/ViewControllers/HomeView/ConversationSearchViewController.swift @@ -19,9 +19,10 @@ class ConversationSearchViewController: UITableViewController { } enum SearchSection: Int { - case conversations = 0 - case contacts = 1 - case messages = 2 + case noResults + case conversations + case contacts + case messages } // MARK: View Lifecyle @@ -41,39 +42,41 @@ class ConversationSearchViewController: UITableViewController { override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { tableView.deselectRow(at: indexPath, animated: false) - + guard let searchSection = SearchSection(rawValue: indexPath.section) else { owsFail("\(logTag) unknown section selected.") return } - + switch searchSection { + case .noResults: + owsFail("\(logTag) shouldn't be able to tap 'no results' section") case .conversations: let sectionResults = searchResultSet.conversations guard let searchResult = sectionResults[safe: indexPath.row] else { owsFail("\(logTag) unknown row selected.") return } - + let thread = searchResult.thread SignalApp.shared().presentConversation(for: thread.threadRecord, action: .compose) - + case .contacts: let sectionResults = searchResultSet.contacts guard let searchResult = sectionResults[safe: indexPath.row] else { owsFail("\(logTag) unknown row selected.") return } - + SignalApp.shared().presentConversation(forRecipientId: searchResult.recipientId, action: .compose) - + case .messages: let sectionResults = searchResultSet.messages guard let searchResult = sectionResults[safe: indexPath.row] else { owsFail("\(logTag) unknown row selected.") return } - + let thread = searchResult.thread SignalApp.shared().presentConversation(for: thread.threadRecord, action: .compose) } @@ -88,6 +91,9 @@ class ConversationSearchViewController: UITableViewController { } switch searchSection { + case .noResults: + // We don't display a "no results" cell, we simply display no results. + return 0 case .conversations: return searchResultSet.conversations.count case .contacts: @@ -104,6 +110,8 @@ class ConversationSearchViewController: UITableViewController { } switch searchSection { + case .noResults: + return UITableViewCell() case .conversations: guard let cell = tableView.dequeueReusableCell(withIdentifier: ConversationSearchResultCell.reuseIdentifier) as? ConversationSearchResultCell else { return UITableViewCell() @@ -150,6 +158,8 @@ class ConversationSearchViewController: UITableViewController { } switch searchSection { + case .noResults: + return nil case .conversations: if searchResultSet.conversations.count > 0 { return NSLocalizedString("SEARCH_SECTION_CONVERSATIONS", comment: "section header for search results that match existing conversations (either group or contact conversations)") diff --git a/Signal/translations/en.lproj/Localizable.strings b/Signal/translations/en.lproj/Localizable.strings index 10a9e08af..57428e1c6 100644 --- a/Signal/translations/en.lproj/Localizable.strings +++ b/Signal/translations/en.lproj/Localizable.strings @@ -986,9 +986,6 @@ /* A label for conversations with blocked users. */ "HOME_VIEW_BLOCKED_CONTACT_CONVERSATION" = "Blocked"; -/* Placeholder text for search bar which filters conversations. */ -"HOME_VIEW_CONVERSATION_SEARCHBAR_PLACEHOLDER" = "Search"; - /* Title for the home view's 'archive' mode. */ "HOME_VIEW_TITLE_ARCHIVE" = "Archive"; diff --git a/SignalMessaging/utils/ConversationSearcher.swift b/SignalMessaging/utils/ConversationSearcher.swift index c38abd771..91f01d11d 100644 --- a/SignalMessaging/utils/ConversationSearcher.swift +++ b/SignalMessaging/utils/ConversationSearcher.swift @@ -40,6 +40,10 @@ public class SearchResultSet { public class var empty: SearchResultSet { return SearchResultSet(conversations: [], contacts: [], messages: []) } + + public var isEmpty: Bool { + return conversations.isEmpty && contacts.isEmpty && messages.isEmpty + } } @objc