// // TimelinesPageViewController.swift // Tusker // // Created by Shadowfacts on 9/14/19. // Copyright © 2019 Shadowfacts. All rights reserved. // import UIKit import SwiftUI class TimelinesPageViewController: SegmentedPageViewController { private let homeTitle = NSLocalizedString("Home", comment: "home timeline tab title") private let federatedTitle = NSLocalizedString("Federated", comment: "federated timeline tab title") private let localTitle = NSLocalizedString("Local", comment: "local timeline tab title") weak var mastodonController: MastodonController! init(mastodonController: MastodonController) { self.mastodonController = mastodonController let home = TimelineViewController(for: .home, mastodonController: mastodonController) home.title = homeTitle home.persistsState = true let federated = TimelineViewController(for: .public(local: false), mastodonController: mastodonController) federated.title = federatedTitle federated.persistsState = true let local = TimelineViewController(for: .public(local: true), mastodonController: mastodonController) local.title = localTitle local.persistsState = true super.init(pages: [ (.home, "Home", home), (.local, "Local", local), (.federated, "Federated", federated), ]) title = homeTitle tabBarItem.image = UIImage(systemName: "house.fill") let filtersItem = UIBarButtonItem(image: UIImage(systemName: "line.3.horizontal.decrease.circle"), style: .plain, target: self, action: #selector(filtersPressed)) filtersItem.accessibilityLabel = "Filters" navigationItem.leftBarButtonItem = filtersItem let jumpToPresentName = NSMutableAttributedString("Jump to Present") // otherwise it pronounces it as 'pɹizˈənt' // its IPA is also bad, this should be an alveolar approximant not a trill jumpToPresentName.addAttribute(.accessibilitySpeechIPANotation, value: "ˈprɛ.zənt", range: NSRange(location: "Jump to ".count, length: "Present".count)) segmentedControl.accessibilityCustomActions = [ UIAccessibilityCustomAction(attributedName: jumpToPresentName, actionHandler: { [unowned self] _ in guard let vc = pageControllers[currentIndex] as? TimelineViewController else { return false } Task { await vc.checkPresent(jumpImmediately: true) } return true }) ] } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } func stateRestorationActivity() -> NSUserActivity? { return (pageControllers[currentIndex] as! TimelineViewController).stateRestorationActivity() } func restoreActivity(_ activity: NSUserActivity) { guard let timeline = UserActivityManager.getTimeline(from: activity) else { return } let page: Page switch timeline { case .home: page = .home case .public(local: false): page = .federated case .public(local: true): page = .local default: return } selectPage(page, animated: false) } @objc private func filtersPressed() { present(UIHostingController(rootView: FiltersView(mastodonController: mastodonController)), animated: true) } enum Page: Hashable { case home case local case federated } }