From bc2e3c37a04127a77d13e0295396863e2f3f445f Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Sun, 15 Sep 2019 21:20:50 -0400 Subject: [PATCH] Add NSUserActivity for search --- Tusker/Info.plist | 1 + .../Search/SearchTableViewController.swift | 2 ++ Tusker/Shortcuts/UserActivityManager.swift | 24 ++++++++++++++++--- Tusker/Shortcuts/UserActivityType.swift | 3 +++ 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/Tusker/Info.plist b/Tusker/Info.plist index 46b8b212a8..5c93739c33 100644 --- a/Tusker/Info.plist +++ b/Tusker/Info.plist @@ -8,6 +8,7 @@ $(PRODUCT_BUNDLE_IDENTIFIER).activity.check-notifications $(PRODUCT_BUNDLE_IDENTIFIER).activity.check-mentions $(PRODUCT_BUNDLE_IDENTIFIER).activity.new-post + $(PRODUCT_BUNDLE_IDENTIFIER).activity.search CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) diff --git a/Tusker/Screens/Search/SearchTableViewController.swift b/Tusker/Screens/Search/SearchTableViewController.swift index 5f51d292d8..7280f09077 100644 --- a/Tusker/Screens/Search/SearchTableViewController.swift +++ b/Tusker/Screens/Search/SearchTableViewController.swift @@ -83,6 +83,8 @@ class SearchTableViewController: EnhancedTableViewController { .map { $0?.trimmingCharacters(in: .whitespacesAndNewlines) } .filter { $0 != self.currentQuery } .sink(receiveValue: performSearch(query:)) + + userActivity = UserActivityManager.searchActivity() } func performSearch(query: String?) { diff --git a/Tusker/Shortcuts/UserActivityManager.swift b/Tusker/Shortcuts/UserActivityManager.swift index e534d9cdb0..f1ee542ff4 100644 --- a/Tusker/Shortcuts/UserActivityManager.swift +++ b/Tusker/Shortcuts/UserActivityManager.swift @@ -57,9 +57,9 @@ class UserActivityManager { static func handleCheckNotifications(activity: NSUserActivity) { let tabBarController = getMainTabBarController() tabBarController.select(tab: .notifications) - if let navController = tabBarController.getTabController(tab: .notifications) as? UINavigationController, - let notificationsPageController = navController.viewControllers.first as? NotificationsPageViewController { - navController.popToRootViewController(animated: false) + if let navigationController = tabBarController.getTabController(tab: .notifications) as? UINavigationController, + let notificationsPageController = navigationController.viewControllers.first as? NotificationsPageViewController { + navigationController.popToRootViewController(animated: false) notificationsPageController.selectMode(.allNotifications) } } @@ -145,4 +145,22 @@ class UserActivityManager { } } + // MARK: - Search + + static func searchActivity() -> NSUserActivity { + let activity = NSUserActivity(type: .search) + activity.isEligibleForPrediction = true + activity.title = NSLocalizedString("Search", comment: "search shortcut title") + activity.suggestedInvocationPhrase = NSLocalizedString("Search the fediverse", comment: "search shortcut invocation phrase") + return activity + } + + static func handleSearch(activity: NSUserActivity) { + let tabBarController = getMainTabBarController() + tabBarController.select(tab: .search) + if let navigationController = tabBarController.getTabController(tab: .search) as? UINavigationController { + navigationController.popToRootViewController(animated: false) + } + } + } diff --git a/Tusker/Shortcuts/UserActivityType.swift b/Tusker/Shortcuts/UserActivityType.swift index c3ecdea9cf..86b7a2d287 100644 --- a/Tusker/Shortcuts/UserActivityType.swift +++ b/Tusker/Shortcuts/UserActivityType.swift @@ -13,6 +13,7 @@ enum UserActivityType: String { case checkNotifications = "net.shadowfacts.Tusker.activity.check-notifications" case checkMentions = "net.shadowfacts.Tusker.activity.check-mentions" case showTimeline = "net.shadowfacts.Tusker.activity.show-timeline" + case search = "net.shadowfacts.Tusker.activity.search" } extension UserActivityType { @@ -26,6 +27,8 @@ extension UserActivityType { return UserActivityManager.handleCheckMentions case .showTimeline: return UserActivityManager.handleShowTimeline + case .search: + return UserActivityManager.handleSearch } } }