Fix crash when using show timeline Siri Shortcut

This commit is contained in:
Shadowfacts 2020-10-26 22:13:48 -04:00
parent 93828830a9
commit d638ff513b
Signed by untrusted user: shadowfacts
GPG Key ID: 94A5AB95422746E5
3 changed files with 36 additions and 18 deletions

View File

@ -334,4 +334,18 @@ extension MainSplitViewController: TuskerRootViewController {
} }
} }
} }
func getTabController(tab: MainTabBarViewController.Tab) -> UIViewController? {
if traitCollection.horizontalSizeClass == .compact {
return tabBarViewController?.getTabController(tab: tab)
} else {
if tab == .compose {
return nil
} else if case .tab(tab) = sidebar.selectedItem {
return viewController(for: .secondary)
} else {
return nil
}
}
}
} }

View File

@ -11,4 +11,5 @@ import UIKit
protocol TuskerRootViewController: UIViewController { protocol TuskerRootViewController: UIViewController {
func presentCompose() func presentCompose()
func select(tab: MainTabBarViewController.Tab) func select(tab: MainTabBarViewController.Tab)
func getTabController(tab: MainTabBarViewController.Tab) -> UIViewController?
} }

View File

@ -21,14 +21,14 @@ class UserActivityManager {
return scene.session.mastodonController! return scene.session.mastodonController!
} }
private static func getMainTabBarController() -> MainTabBarViewController { private static func getMainViewController() -> TuskerRootViewController {
let scene = UIApplication.shared.connectedScenes.compactMap { $0 as? UIWindowScene }.first! let scene = UIApplication.shared.connectedScenes.compactMap { $0 as? UIWindowScene }.first!
let window = scene.windows.first { $0.isKeyWindow }! let window = scene.windows.first { $0.isKeyWindow }!
return window.rootViewController as! MainTabBarViewController return window.rootViewController as! TuskerRootViewController
} }
private static func present(_ vc: UIViewController, animated: Bool = true) { private static func present(_ vc: UIViewController, animated: Bool = true) {
getMainTabBarController().present(vc, animated: animated) getMainViewController().present(vc, animated: animated)
} }
// MARK: - New Post // MARK: - New Post
@ -66,9 +66,9 @@ class UserActivityManager {
} }
static func handleCheckNotifications(activity: NSUserActivity) { static func handleCheckNotifications(activity: NSUserActivity) {
let tabBarController = getMainTabBarController() let mainViewController = getMainViewController()
tabBarController.select(tab: .notifications) mainViewController.select(tab: .notifications)
if let navigationController = tabBarController.getTabController(tab: .notifications) as? UINavigationController, if let navigationController = mainViewController.getTabController(tab: .notifications) as? UINavigationController,
let notificationsPageController = navigationController.viewControllers.first as? NotificationsPageViewController { let notificationsPageController = navigationController.viewControllers.first as? NotificationsPageViewController {
navigationController.popToRootViewController(animated: false) navigationController.popToRootViewController(animated: false)
notificationsPageController.loadViewIfNeeded() notificationsPageController.loadViewIfNeeded()
@ -86,9 +86,9 @@ class UserActivityManager {
} }
static func handleCheckMentions(activity: NSUserActivity) { static func handleCheckMentions(activity: NSUserActivity) {
let tabBarController = getMainTabBarController() let mainViewController = getMainViewController()
tabBarController.select(tab: .notifications) mainViewController.select(tab: .notifications)
if let navController = tabBarController.getTabController(tab: .notifications) as? UINavigationController, if let navController = mainViewController.getTabController(tab: .notifications) as? UINavigationController,
let notificationsPageController = navController.viewControllers.first as? NotificationsPageViewController { let notificationsPageController = navController.viewControllers.first as? NotificationsPageViewController {
navController.popToRootViewController(animated: false) navController.popToRootViewController(animated: false)
notificationsPageController.loadViewIfNeeded() notificationsPageController.loadViewIfNeeded()
@ -133,9 +133,12 @@ class UserActivityManager {
return return
} }
let tabBarController = getMainTabBarController() let mainViewController = getMainViewController()
tabBarController.select(tab: .timelines) mainViewController.select(tab: .timelines)
let navigationController = tabBarController.viewControllers![0] as! UINavigationController guard let navigationController = mainViewController.getTabController(tab: .timelines) as? UINavigationController else {
return
}
switch timeline { switch timeline {
case .home, .public(true), .public(false): case .home, .public(true), .public(false):
navigationController.popToRootViewController(animated: false) navigationController.popToRootViewController(animated: false)
@ -170,9 +173,9 @@ class UserActivityManager {
} }
static func handleSearch(activity: NSUserActivity) { static func handleSearch(activity: NSUserActivity) {
let tabBarController = getMainTabBarController() let mainViewController = getMainViewController()
tabBarController.select(tab: .explore) mainViewController.select(tab: .explore)
if let navigationController = tabBarController.getTabController(tab: .explore) as? UINavigationController, if let navigationController = mainViewController.getTabController(tab: .explore) as? UINavigationController,
let exploreController = navigationController.viewControllers.first as? ExploreViewController { let exploreController = navigationController.viewControllers.first as? ExploreViewController {
navigationController.popToRootViewController(animated: false) navigationController.popToRootViewController(animated: false)
exploreController.searchController.isActive = true exploreController.searchController.isActive = true
@ -189,9 +192,9 @@ class UserActivityManager {
} }
static func handleBookmarks(activity: NSUserActivity) { static func handleBookmarks(activity: NSUserActivity) {
let tabBarController = getMainTabBarController() let mainViewController = getMainViewController()
tabBarController.select(tab: .explore) mainViewController.select(tab: .explore)
if let navigationController = tabBarController.getTabController(tab: .explore) as? UINavigationController { if let navigationController = mainViewController.getTabController(tab: .explore) as? UINavigationController {
navigationController.popToRootViewController(animated: false) navigationController.popToRootViewController(animated: false)
navigationController.pushViewController(BookmarksTableViewController(mastodonController: mastodonController), animated: false) navigationController.pushViewController(BookmarksTableViewController(mastodonController: mastodonController), animated: false)
} }