From 43f6e46322ff726acd9193dbc160a660e988acf3 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Tue, 27 Dec 2022 03:00:34 +0200 Subject: [PATCH 01/47] Update: replace Reader-related WPTabBarController.sharedInstance usages --- ...MySitesCoordinator+RootViewPresenter.swift | 44 +++++++++++++++++++ .../Classes/System/RootViewPresenter.swift | 15 +++++++ .../Utility/Spotlight/SearchManager.swift | 2 +- ...PostSignUpInterstitialViewController.swift | 2 +- .../NUX/WordPressAuthenticationManager.swift | 2 +- .../NotificationsViewController.swift | 2 +- .../Reader/ReaderStreamViewController.swift | 2 +- ...SiteStatsInsightsTableViewController.swift | 2 +- .../Coordinators/ReaderCoordinator.swift | 22 +++++----- 9 files changed, 76 insertions(+), 17 deletions(-) diff --git a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift index 94cbe55070d6..893f411ad474 100644 --- a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift +++ b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift @@ -4,4 +4,48 @@ import Foundation /// and the app's UI is simplified. extension MySitesCoordinator: RootViewPresenter { + // MARK: Reader + + func showReaderTab() { + fallbackBehavior() + } + + func switchToDiscover() { + fallbackBehavior() + } + + func navigateToReaderSearch() { + fallbackBehavior() + } + + func switchToTopic(where predicate: (ReaderAbstractTopic) -> Bool) { + fallbackBehavior() + } + + func switchToMyLikes() { + fallbackBehavior() + } + + func switchToFollowedSites() { + fallbackBehavior() + } + + func navigateToReaderSite(_ topic: ReaderSiteTopic) { + fallbackBehavior() + } + + func navigateToReaderTag(_ topic: ReaderTagTopic) { + fallbackBehavior() + } + + func navigateToReader(_ pushControlller: UIViewController?) { + fallbackBehavior() + } + + // MARK: Helpers + + /// Default implementation for functions that are not supported by the simplified UI. + private func fallbackBehavior() { + // Do nothing + } } diff --git a/WordPress/Classes/System/RootViewPresenter.swift b/WordPress/Classes/System/RootViewPresenter.swift index 81d5403075b7..9cca6cd78840 100644 --- a/WordPress/Classes/System/RootViewPresenter.swift +++ b/WordPress/Classes/System/RootViewPresenter.swift @@ -1,6 +1,21 @@ import Foundation protocol RootViewPresenter { + + // MARK: General + var rootViewController: UIViewController { get } func showBlogDetails(for blog: Blog) + + // MARK: Reader + + func showReaderTab() + func switchToDiscover() + func navigateToReaderSearch() + func switchToTopic(where predicate: (ReaderAbstractTopic) -> Bool) + func switchToMyLikes() + func switchToFollowedSites() + func navigateToReaderSite(_ topic: ReaderSiteTopic) + func navigateToReaderTag( _ topic: ReaderTagTopic) + func navigateToReader(_ pushControlller: UIViewController?) } diff --git a/WordPress/Classes/Utility/Spotlight/SearchManager.swift b/WordPress/Classes/Utility/Spotlight/SearchManager.swift index 92949d66cb50..459cbd1ede42 100644 --- a/WordPress/Classes/Utility/Spotlight/SearchManager.swift +++ b/WordPress/Classes/Utility/Spotlight/SearchManager.swift @@ -322,7 +322,7 @@ fileprivate extension SearchManager { // MARK: Reader Tab Navigation func openReaderTab() -> Bool { - WPTabBarController.sharedInstance().showReaderTab() + RootViewControllerCoordinator.sharedPresenter.showReaderTab() return true } diff --git a/WordPress/Classes/ViewRelated/NUX/Post Signup Interstitial/PostSignUpInterstitialViewController.swift b/WordPress/Classes/ViewRelated/NUX/Post Signup Interstitial/PostSignUpInterstitialViewController.swift index 1b96f5b60559..d9564b044839 100644 --- a/WordPress/Classes/ViewRelated/NUX/Post Signup Interstitial/PostSignUpInterstitialViewController.swift +++ b/WordPress/Classes/ViewRelated/NUX/Post Signup Interstitial/PostSignUpInterstitialViewController.swift @@ -102,7 +102,7 @@ class PostSignUpInterstitialViewController: UIViewController { @IBAction func cancel(_ sender: Any) { dismiss?(.none) - WPTabBarController.sharedInstance().showReaderTab() + RootViewControllerCoordinator.sharedPresenter.showReaderTab() tracker.track(click: .dismiss, ifTrackingNotEnabled: { WPAnalytics.track(.welcomeNoSitesInterstitialDismissed) diff --git a/WordPress/Classes/ViewRelated/NUX/WordPressAuthenticationManager.swift b/WordPress/Classes/ViewRelated/NUX/WordPressAuthenticationManager.swift index 00e16e68fc7e..06de2410db56 100644 --- a/WordPress/Classes/ViewRelated/NUX/WordPressAuthenticationManager.swift +++ b/WordPress/Classes/ViewRelated/NUX/WordPressAuthenticationManager.swift @@ -585,7 +585,7 @@ private extension WordPressAuthenticationManager { /// We'll pre-switch to the users selected tab before the login flow dismisses private func handleOnboardingQuestionsWillDismiss(option: OnboardingOption) { if option == .reader { - WPTabBarController.sharedInstance().showReaderTab() + RootViewControllerCoordinator.sharedPresenter.showReaderTab() } else if option == .notifications { WPTabBarController.sharedInstance().showNotificationsTab() } diff --git a/WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationsViewController.swift b/WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationsViewController.swift index 86e28de6b882..9062cbe1ec17 100644 --- a/WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationsViewController.swift +++ b/WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationsViewController.swift @@ -1639,7 +1639,7 @@ extension NotificationsViewController: NoResultsViewControllerDelegate { .follow, .like: WPAnalytics.track(.notificationsTappedViewReader, withProperties: properties) - WPTabBarController.sharedInstance().showReaderTab() + RootViewControllerCoordinator.sharedPresenter.showReaderTab() case .unread: WPAnalytics.track(.notificationsTappedNewPost, withProperties: properties) WPTabBarController.sharedInstance().showPostTab() diff --git a/WordPress/Classes/ViewRelated/Reader/ReaderStreamViewController.swift b/WordPress/Classes/ViewRelated/Reader/ReaderStreamViewController.swift index 7951e736417c..b8d45c6c76ea 100644 --- a/WordPress/Classes/ViewRelated/Reader/ReaderStreamViewController.swift +++ b/WordPress/Classes/ViewRelated/Reader/ReaderStreamViewController.swift @@ -798,7 +798,7 @@ import Combine } private func showFollowing() { - WPTabBarController.sharedInstance().switchToFollowedSites() + RootViewControllerCoordinator.sharedPresenter.switchToFollowedSites() } // MARK: - Blocking diff --git a/WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsInsightsTableViewController.swift b/WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsInsightsTableViewController.swift index 63686994e50f..31ff7dafd6de 100644 --- a/WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsInsightsTableViewController.swift +++ b/WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsInsightsTableViewController.swift @@ -518,7 +518,7 @@ extension SiteStatsInsightsTableViewController: SiteStatsInsightsDelegate { } self.navigationController?.popToRootViewController(animated: false) - WPTabBarController.sharedInstance().showReaderTab() + RootViewControllerCoordinator.sharedPresenter.showReaderTab() if let nc = WPTabBarController.sharedInstance().selectedViewController as? UINavigationController, let vc = nc.topViewController as? ReaderTabViewController { vc.presentDiscoverTab() diff --git a/WordPress/Classes/ViewRelated/System/Coordinators/ReaderCoordinator.swift b/WordPress/Classes/ViewRelated/System/Coordinators/ReaderCoordinator.swift index 4aef7b14b531..3cfae8aecad6 100644 --- a/WordPress/Classes/ViewRelated/System/Coordinators/ReaderCoordinator.swift +++ b/WordPress/Classes/ViewRelated/System/Coordinators/ReaderCoordinator.swift @@ -13,35 +13,35 @@ class ReaderCoordinator: NSObject { } func showReaderTab() { - WPTabBarController.sharedInstance().showReaderTab() + RootViewControllerCoordinator.sharedPresenter.showReaderTab() } func showDiscover() { - WPTabBarController.sharedInstance().switchToDiscover() + RootViewControllerCoordinator.sharedPresenter.switchToDiscover() } func showSearch() { - WPTabBarController.sharedInstance().navigateToReaderSearch() + RootViewControllerCoordinator.sharedPresenter.navigateToReaderSearch() } func showA8C() { - WPTabBarController.sharedInstance()?.switchToTopic(where: { topic in + RootViewControllerCoordinator.sharedPresenter.switchToTopic(where: { topic in return (topic as? ReaderTeamTopic)?.slug == ReaderTeamTopic.a8cSlug }) } func showP2() { - WPTabBarController.sharedInstance()?.switchToTopic(where: { topic in + RootViewControllerCoordinator.sharedPresenter.switchToTopic(where: { topic in return (topic as? ReaderTeamTopic)?.slug == ReaderTeamTopic.p2Slug }) } func showMyLikes() { - WPTabBarController.sharedInstance().switchToMyLikes() + RootViewControllerCoordinator.sharedPresenter.switchToMyLikes() } func showManageFollowing() { - WPTabBarController.sharedInstance()?.switchToFollowedSites() + RootViewControllerCoordinator.sharedPresenter.switchToFollowedSites() } func showList(named listName: String, forUser user: String) { @@ -53,7 +53,7 @@ class ReaderCoordinator: NSObject { return } - WPTabBarController.sharedInstance()?.switchToTopic(where: { $0 == topic }) + RootViewControllerCoordinator.sharedPresenter.switchToTopic(where: { $0 == topic }) } func showTag(named tagName: String) { @@ -62,7 +62,7 @@ class ReaderCoordinator: NSObject { getTagTopic(tagSlug: slug) { result in guard let topic = try? result.get() else { return } - WPTabBarController.sharedInstance()?.navigateToReaderTag(topic) + RootViewControllerCoordinator.sharedPresenter.navigateToReaderTag(topic) } } @@ -91,7 +91,7 @@ class ReaderCoordinator: NSObject { return } - WPTabBarController.sharedInstance()?.navigateToReaderSite(topic) + RootViewControllerCoordinator.sharedPresenter.navigateToReaderSite(topic) } } @@ -134,7 +134,7 @@ class ReaderCoordinator: NSObject { } detailViewController.postLoadFailureBlock = postLoadFailureBlock - WPTabBarController.sharedInstance().navigateToReader(detailViewController) + RootViewControllerCoordinator.sharedPresenter.navigateToReader(detailViewController) } } From 58662061fd7157a2ad4d8c579e3c479e4cfbb4d7 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Tue, 27 Dec 2022 03:55:07 +0200 Subject: [PATCH 02/47] Refactor: MeNavigation as an extension on RootViewPresenter for reusability --- ...MySitesCoordinator+RootViewPresenter.swift | 30 ++++++++++++++++++- .../RootViewPresenter+MeNavigation.swift} | 17 ++++++----- .../Classes/System/RootViewPresenter.swift | 15 ++++++++++ ...WPTabBarController+RootViewPresenter.swift | 21 +++++++++++++ .../Coordinators/MySitesCoordinator.swift | 2 +- WordPress/WordPress.xcodeproj/project.pbxproj | 12 ++++---- 6 files changed, 81 insertions(+), 16 deletions(-) rename WordPress/Classes/{ViewRelated/System/WPTabBarController+MeNavigation.swift => System/RootViewPresenter+MeNavigation.swift} (78%) diff --git a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift index 893f411ad474..be19702bacee 100644 --- a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift +++ b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift @@ -3,6 +3,12 @@ import Foundation /// `MySitesCoordinator` is used as the root presenter when Jetpack features are disabled /// and the app's UI is simplified. extension MySitesCoordinator: RootViewPresenter { + + // MARK: General + + func getMeScenePresenter() -> ScenePresenter { + meScenePresenter + } // MARK: Reader @@ -41,11 +47,33 @@ extension MySitesCoordinator: RootViewPresenter { func navigateToReader(_ pushControlller: UIViewController?) { fallbackBehavior() } + + func showReaderTab(forPost: NSNumber!, onBlog: NSNumber!) { + fallbackBehavior() + } + + // MARK: My Site + + func showMySitesTab() { + // Do nothing + } + + // MARK: Notifications + + func showNotificationsTab() { + fallbackBehavior() + } + + func switchNotificationsTabToNotificationSettings() { + fallbackBehavior() + } // MARK: Helpers /// Default implementation for functions that are not supported by the simplified UI. private func fallbackBehavior() { - // Do nothing + // TODO: Consider showing an overlay + // TODO: Print a log statement + // TODO: Consider tracking this } } diff --git a/WordPress/Classes/ViewRelated/System/WPTabBarController+MeNavigation.swift b/WordPress/Classes/System/RootViewPresenter+MeNavigation.swift similarity index 78% rename from WordPress/Classes/ViewRelated/System/WPTabBarController+MeNavigation.swift rename to WordPress/Classes/System/RootViewPresenter+MeNavigation.swift index 59560d5e8b75..50c9f1415af1 100644 --- a/WordPress/Classes/ViewRelated/System/WPTabBarController+MeNavigation.swift +++ b/WordPress/Classes/System/RootViewPresenter+MeNavigation.swift @@ -1,32 +1,32 @@ - import UIKit /// Methods to access the Me Scene and sub levels -extension WPTabBarController { +extension RootViewPresenter { /// removes all but the primary viewControllers from the stack - @objc func popMeTabToRoot() { + func popMeTabToRoot() { getNavigationController()?.popToRootViewController(animated: false) } /// presents the Me scene. If the feature flag is disabled, replaces the previously defined `showMeTab` - @objc func showMeScene(animated: Bool = true, completion: (() -> Void)? = nil) { - meScenePresenter.present(on: self, animated: animated, completion: completion) + func showMeScene(animated: Bool = true, completion: (() -> Void)? = nil) { + let meScenePresenter = getMeScenePresenter() + meScenePresenter.present(on: rootViewController, animated: animated, completion: completion) } /// access to sub levels - @objc func navigateToAccountSettings() { + func navigateToAccountSettings() { showMeScene(animated: false) { self.popMeTabToRoot() self.getMeViewController()?.navigateToAccountSettings() } } - @objc func navigateToAppSettings() { + func navigateToAppSettings() { showMeScene() { self.popMeTabToRoot() self.getMeViewController()?.navigateToAppSettings() } } - @objc func navigateToSupport() { + func navigateToSupport() { showMeScene() { self.popMeTabToRoot() self.getMeViewController()?.navigateToHelpAndSupport() @@ -35,6 +35,7 @@ extension WPTabBarController { /// obtains a reference to the navigation controller of the presented MeViewController private func getNavigationController() -> UINavigationController? { + let meScenePresenter = getMeScenePresenter() guard let splitController = meScenePresenter.presentedViewController as? WPSplitViewController, let navigationController = splitController.viewControllers.first as? UINavigationController else { return nil diff --git a/WordPress/Classes/System/RootViewPresenter.swift b/WordPress/Classes/System/RootViewPresenter.swift index 9cca6cd78840..2afa019f25fd 100644 --- a/WordPress/Classes/System/RootViewPresenter.swift +++ b/WordPress/Classes/System/RootViewPresenter.swift @@ -6,10 +6,12 @@ protocol RootViewPresenter { var rootViewController: UIViewController { get } func showBlogDetails(for blog: Blog) + func getMeScenePresenter() -> ScenePresenter // MARK: Reader func showReaderTab() + func showReaderTab(forPost: NSNumber!, onBlog: NSNumber!) func switchToDiscover() func navigateToReaderSearch() func switchToTopic(where predicate: (ReaderAbstractTopic) -> Bool) @@ -18,4 +20,17 @@ protocol RootViewPresenter { func navigateToReaderSite(_ topic: ReaderSiteTopic) func navigateToReaderTag( _ topic: ReaderTagTopic) func navigateToReader(_ pushControlller: UIViewController?) + + // MARK: My Site + + func showMySitesTab() + func showPages(for blog: Blog) + func showPosts(for blog: Blog) + func showMedia(for blog: Blog) + + // MARK: Notifications + + func showNotificationsTab() + func switchNotificationsTabToNotificationSettings() + } diff --git a/WordPress/Classes/System/WPTabBarController+RootViewPresenter.swift b/WordPress/Classes/System/WPTabBarController+RootViewPresenter.swift index 40b6cb2baaab..4a3d5f28513d 100644 --- a/WordPress/Classes/System/WPTabBarController+RootViewPresenter.swift +++ b/WordPress/Classes/System/WPTabBarController+RootViewPresenter.swift @@ -3,7 +3,28 @@ import Foundation /// `WPTabBarController` is used as the root presenter when Jetpack features are enabled /// and the app's UI is normal. extension WPTabBarController: RootViewPresenter { + + // MARK: General + var rootViewController: UIViewController { return self } + + func getMeScenePresenter() -> ScenePresenter { + meScenePresenter + } + + // MARK: My Site + + func showPages(for blog: Blog) { + mySitesCoordinator.showPages(for: blog) + } + + func showPosts(for blog: Blog) { + mySitesCoordinator.showPosts(for: blog) + } + + func showMedia(for blog: Blog) { + mySitesCoordinator.showMedia(for: blog) + } } diff --git a/WordPress/Classes/ViewRelated/System/Coordinators/MySitesCoordinator.swift b/WordPress/Classes/ViewRelated/System/Coordinators/MySitesCoordinator.swift index 2bdb9c24d7ff..5d8d9ef2cd56 100644 --- a/WordPress/Classes/ViewRelated/System/Coordinators/MySitesCoordinator.swift +++ b/WordPress/Classes/ViewRelated/System/Coordinators/MySitesCoordinator.swift @@ -5,7 +5,7 @@ class MySitesCoordinator: NSObject { static let splitViewControllerRestorationID = "MySiteSplitViewControllerRestorationID" static let navigationControllerRestorationID = "MySiteNavigationControllerRestorationID" - private let meScenePresenter: ScenePresenter + let meScenePresenter: ScenePresenter let becomeActiveTab: () -> Void diff --git a/WordPress/WordPress.xcodeproj/project.pbxproj b/WordPress/WordPress.xcodeproj/project.pbxproj index 62cd3edae828..980493893d6b 100644 --- a/WordPress/WordPress.xcodeproj/project.pbxproj +++ b/WordPress/WordPress.xcodeproj/project.pbxproj @@ -661,7 +661,6 @@ 3F2F856126FAF235000FCDA5 /* ReaderScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE8707182006E48E004FB5A4 /* ReaderScreen.swift */; }; 3F2F856326FAF612000FCDA5 /* EditorGutenbergTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC2BB0CF228ACF710034F9AB /* EditorGutenbergTests.swift */; }; 3F3087C424EDB7040087B548 /* AnnouncementCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F3087C324EDB7040087B548 /* AnnouncementCell.swift */; }; - 3F30E50923FB362700225013 /* WPTabBarController+MeNavigation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F30E50823FB362700225013 /* WPTabBarController+MeNavigation.swift */; }; 3F338B71289BD3040014ADC5 /* Nimble in Frameworks */ = {isa = PBXBuildFile; productRef = 3F338B70289BD3040014ADC5 /* Nimble */; }; 3F338B73289BD5970014ADC5 /* Nimble in Frameworks */ = {isa = PBXBuildFile; productRef = 3F338B72289BD5970014ADC5 /* Nimble */; }; 3F39C93527A09927001EC300 /* TracksLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F39C93427A09927001EC300 /* TracksLogger.swift */; }; @@ -1567,6 +1566,8 @@ 803BB981295957CF00B3F6D6 /* WPTabBarController+RootViewPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803BB97F295957CF00B3F6D6 /* WPTabBarController+RootViewPresenter.swift */; }; 803BB983295957F600B3F6D6 /* MySitesCoordinator+RootViewPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803BB982295957F600B3F6D6 /* MySitesCoordinator+RootViewPresenter.swift */; }; 803BB984295957F600B3F6D6 /* MySitesCoordinator+RootViewPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803BB982295957F600B3F6D6 /* MySitesCoordinator+RootViewPresenter.swift */; }; + 803BB986295A873800B3F6D6 /* RootViewPresenter+MeNavigation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803BB985295A873800B3F6D6 /* RootViewPresenter+MeNavigation.swift */; }; + 803BB987295A873800B3F6D6 /* RootViewPresenter+MeNavigation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803BB985295A873800B3F6D6 /* RootViewPresenter+MeNavigation.swift */; }; 803C493B283A7C0C00003E9B /* QuickStartChecklistHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803C493A283A7C0C00003E9B /* QuickStartChecklistHeader.swift */; }; 803C493C283A7C0C00003E9B /* QuickStartChecklistHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803C493A283A7C0C00003E9B /* QuickStartChecklistHeader.swift */; }; 803C493E283A7C2200003E9B /* QuickStartChecklistHeader.xib in Resources */ = {isa = PBXBuildFile; fileRef = 803C493D283A7C2200003E9B /* QuickStartChecklistHeader.xib */; }; @@ -4591,7 +4592,6 @@ FABB23F82602FC2C00C8785C /* ImmuTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1E49CE31C4902EE002393A4 /* ImmuTableViewController.swift */; }; FABB23F92602FC2C00C8785C /* NullStockPhotosService.swift in Sources */ = {isa = PBXBuildFile; fileRef = D88A6495208D7B0B008AE9BC /* NullStockPhotosService.swift */; }; FABB23FA2602FC2C00C8785C /* RevisionPreviewViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A162F2221C26D7500FDC035 /* RevisionPreviewViewController.swift */; }; - FABB23FB2602FC2C00C8785C /* WPTabBarController+MeNavigation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F30E50823FB362700225013 /* WPTabBarController+MeNavigation.swift */; }; FABB23FC2602FC2C00C8785C /* SitePromptView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 467D3DF925E4436000EB9CB0 /* SitePromptView.swift */; }; FABB23FD2602FC2C00C8785C /* BaseRestoreCompleteViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAB8AA2125AF031200F9F8A0 /* BaseRestoreCompleteViewController.swift */; }; FABB23FE2602FC2C00C8785C /* SharingService.swift in Sources */ = {isa = PBXBuildFile; fileRef = E616E4B21C480896002C024E /* SharingService.swift */; }; @@ -6094,7 +6094,6 @@ 3F2ABE192770EF3E005D8916 /* Blog+VideoLimits.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Blog+VideoLimits.swift"; sourceTree = ""; }; 3F2F0C15256C6B2C003351C7 /* StatsWidgetsService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatsWidgetsService.swift; sourceTree = ""; }; 3F3087C324EDB7040087B548 /* AnnouncementCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnnouncementCell.swift; sourceTree = ""; }; - 3F30E50823FB362700225013 /* WPTabBarController+MeNavigation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WPTabBarController+MeNavigation.swift"; sourceTree = ""; }; 3F39C93427A09927001EC300 /* TracksLogger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TracksLogger.swift; sourceTree = ""; }; 3F3CA64F25D3003C00642A89 /* StatsWidgetsStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatsWidgetsStore.swift; sourceTree = ""; }; 3F3D854A251E6418001CA4D2 /* AnnouncementsDataStoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnnouncementsDataStoreTests.swift; sourceTree = ""; }; @@ -6890,6 +6889,7 @@ 803BB97B2959559500B3F6D6 /* RootViewPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootViewPresenter.swift; sourceTree = ""; }; 803BB97F295957CF00B3F6D6 /* WPTabBarController+RootViewPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WPTabBarController+RootViewPresenter.swift"; sourceTree = ""; }; 803BB982295957F600B3F6D6 /* MySitesCoordinator+RootViewPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MySitesCoordinator+RootViewPresenter.swift"; sourceTree = ""; }; + 803BB985295A873800B3F6D6 /* RootViewPresenter+MeNavigation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "RootViewPresenter+MeNavigation.swift"; sourceTree = ""; }; 803C493A283A7C0C00003E9B /* QuickStartChecklistHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuickStartChecklistHeader.swift; sourceTree = ""; }; 803C493D283A7C2200003E9B /* QuickStartChecklistHeader.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = QuickStartChecklistHeader.xib; sourceTree = ""; }; 803D90F6292F0188007CC0D0 /* JetpackRedirector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JetpackRedirector.swift; sourceTree = ""; }; @@ -12523,6 +12523,7 @@ children = ( 803BB9782959543D00B3F6D6 /* RootViewControllerCoordinator.swift */, 803BB97B2959559500B3F6D6 /* RootViewPresenter.swift */, + 803BB985295A873800B3F6D6 /* RootViewPresenter+MeNavigation.swift */, 803BB97F295957CF00B3F6D6 /* WPTabBarController+RootViewPresenter.swift */, 803BB982295957F600B3F6D6 /* MySitesCoordinator+RootViewPresenter.swift */, ); @@ -12913,7 +12914,6 @@ 17A28DC2205001A900EA6D9E /* FilterTabBar.swift */, D8B9B58E204F4EA1003C6042 /* NetworkAware.swift */, F5E032DE2408D1F1003AF350 /* WPTabBarController+ShowTab.swift */, - 3F30E50823FB362700225013 /* WPTabBarController+MeNavigation.swift */, 43DDFE8B21715ADD008BE72F /* WPTabBarController+QuickStart.swift */, 57BAD50B225CCE1A006139EC /* WPTabBarController+Swift.swift */, ); @@ -21009,7 +21009,6 @@ E1E49CE41C4902EE002393A4 /* ImmuTableViewController.swift in Sources */, D88A6496208D7B0B008AE9BC /* NullStockPhotosService.swift in Sources */, 9A162F2321C26D7500FDC035 /* RevisionPreviewViewController.swift in Sources */, - 3F30E50923FB362700225013 /* WPTabBarController+MeNavigation.swift in Sources */, 467D3DFA25E4436000EB9CB0 /* SitePromptView.swift in Sources */, FAB8AA2225AF031200F9F8A0 /* BaseRestoreCompleteViewController.swift in Sources */, E616E4B31C480896002C024E /* SharingService.swift in Sources */, @@ -21707,6 +21706,7 @@ 400A2C872217A985000A8A59 /* ReferrerStatsRecordValue+CoreDataProperties.swift in Sources */, 57AA848F228715DA00D3C2A2 /* PostCardCell.swift in Sources */, FE43DAAF26DFAD1C00CFF595 /* CommentContentTableViewCell.swift in Sources */, + 803BB986295A873800B3F6D6 /* RootViewPresenter+MeNavigation.swift in Sources */, F4CBE3D6292597E3004FFBB6 /* SupportTableViewControllerConfiguration.swift in Sources */, 8F22804451E5812433733348 /* TimeZoneSearchHeaderView.swift in Sources */, 8332DD2429259AE300802F7D /* DataMigrator.swift in Sources */, @@ -23166,6 +23166,7 @@ 0A3FCA1E28B71CBD00499A15 /* FullScreenCommentReplyViewModel.swift in Sources */, FABB224A2602FC2C00C8785C /* ReaderFollowedSitesViewController.swift in Sources */, FABB224B2602FC2C00C8785C /* AnnouncementsCache.swift in Sources */, + 803BB987295A873800B3F6D6 /* RootViewPresenter+MeNavigation.swift in Sources */, 8B74A9A9268E3C68003511CE /* RewindStatus+multiSite.swift in Sources */, FABB224C2602FC2C00C8785C /* GravatarUploader.swift in Sources */, FABB224D2602FC2C00C8785C /* NotificationSettingDetailsViewController.swift in Sources */, @@ -23705,7 +23706,6 @@ FABB23F92602FC2C00C8785C /* NullStockPhotosService.swift in Sources */, FABB23FA2602FC2C00C8785C /* RevisionPreviewViewController.swift in Sources */, 3F2ABE1D277118CC005D8916 /* WPMediaAsset+VideoLimits.swift in Sources */, - FABB23FB2602FC2C00C8785C /* WPTabBarController+MeNavigation.swift in Sources */, 80EF928B280D28140064A971 /* Atomic.swift in Sources */, 3FFDEF9129187F2100B625CE /* MigrationActionsConfiguration.swift in Sources */, FABB23FC2602FC2C00C8785C /* SitePromptView.swift in Sources */, From 0dfbf89c258ba40f59a008bcf89647b80be86f35 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Tue, 27 Dec 2022 03:55:20 +0200 Subject: [PATCH 03/47] Fix: remove white spaces --- .../MySitesCoordinator+RootViewPresenter.swift | 14 +++++++------- WordPress/Classes/System/RootViewPresenter.swift | 6 +++--- .../WPTabBarController+RootViewPresenter.swift | 10 +++++----- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift index be19702bacee..56578730d91a 100644 --- a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift +++ b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift @@ -3,9 +3,9 @@ import Foundation /// `MySitesCoordinator` is used as the root presenter when Jetpack features are disabled /// and the app's UI is simplified. extension MySitesCoordinator: RootViewPresenter { - + // MARK: General - + func getMeScenePresenter() -> ScenePresenter { meScenePresenter } @@ -47,23 +47,23 @@ extension MySitesCoordinator: RootViewPresenter { func navigateToReader(_ pushControlller: UIViewController?) { fallbackBehavior() } - + func showReaderTab(forPost: NSNumber!, onBlog: NSNumber!) { fallbackBehavior() } - + // MARK: My Site - + func showMySitesTab() { // Do nothing } // MARK: Notifications - + func showNotificationsTab() { fallbackBehavior() } - + func switchNotificationsTabToNotificationSettings() { fallbackBehavior() } diff --git a/WordPress/Classes/System/RootViewPresenter.swift b/WordPress/Classes/System/RootViewPresenter.swift index 2afa019f25fd..5d3d7b44b9ab 100644 --- a/WordPress/Classes/System/RootViewPresenter.swift +++ b/WordPress/Classes/System/RootViewPresenter.swift @@ -20,16 +20,16 @@ protocol RootViewPresenter { func navigateToReaderSite(_ topic: ReaderSiteTopic) func navigateToReaderTag( _ topic: ReaderTagTopic) func navigateToReader(_ pushControlller: UIViewController?) - + // MARK: My Site - + func showMySitesTab() func showPages(for blog: Blog) func showPosts(for blog: Blog) func showMedia(for blog: Blog) // MARK: Notifications - + func showNotificationsTab() func switchNotificationsTabToNotificationSettings() diff --git a/WordPress/Classes/System/WPTabBarController+RootViewPresenter.swift b/WordPress/Classes/System/WPTabBarController+RootViewPresenter.swift index 4a3d5f28513d..607b0f51ae17 100644 --- a/WordPress/Classes/System/WPTabBarController+RootViewPresenter.swift +++ b/WordPress/Classes/System/WPTabBarController+RootViewPresenter.swift @@ -9,21 +9,21 @@ extension WPTabBarController: RootViewPresenter { var rootViewController: UIViewController { return self } - + func getMeScenePresenter() -> ScenePresenter { meScenePresenter } - + // MARK: My Site - + func showPages(for blog: Blog) { mySitesCoordinator.showPages(for: blog) } - + func showPosts(for blog: Blog) { mySitesCoordinator.showPosts(for: blog) } - + func showMedia(for blog: Blog) { mySitesCoordinator.showMedia(for: blog) } From 9a66698524afbe6cbf8c6f569de9d6e289333088 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Tue, 27 Dec 2022 04:30:02 +0200 Subject: [PATCH 04/47] Update: replace Search-related WPTabBarController.sharedInstance usages --- .../Utility/Spotlight/SearchManager.swift | 39 ++++++++++--------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/WordPress/Classes/Utility/Spotlight/SearchManager.swift b/WordPress/Classes/Utility/Spotlight/SearchManager.swift index 459cbd1ede42..45518975d9e9 100644 --- a/WordPress/Classes/Utility/Spotlight/SearchManager.swift +++ b/WordPress/Classes/Utility/Spotlight/SearchManager.swift @@ -311,12 +311,12 @@ fileprivate extension SearchManager { // MARK: Site Tab Navigation func openMySitesTab() -> Bool { - WPTabBarController.sharedInstance().showMySitesTab() + RootViewControllerCoordinator.sharedPresenter.showMySitesTab() return true } func openSiteDetailsScreen(for blog: Blog) { - WPTabBarController.sharedInstance()?.mySitesCoordinator.showBlogDetails(for: blog) + RootViewControllerCoordinator.sharedPresenter.showBlogDetails(for: blog) } // MARK: Reader Tab Navigation @@ -329,29 +329,29 @@ fileprivate extension SearchManager { // MARK: Me Tab Navigation func openMeTab() -> Bool { - WPTabBarController.sharedInstance().showMeScene() + RootViewControllerCoordinator.sharedPresenter.showMeScene() return true } func openAppSettingsScreen() -> Bool { - WPTabBarController.sharedInstance().navigateToAppSettings() + RootViewControllerCoordinator.sharedPresenter.navigateToAppSettings() return true } func openSupportScreen() -> Bool { - WPTabBarController.sharedInstance().navigateToSupport() + RootViewControllerCoordinator.sharedPresenter.navigateToSupport() return true } // MARK: Notification Tab Navigation func openNotificationsTab() -> Bool { - WPTabBarController.sharedInstance().showNotificationsTab() + RootViewControllerCoordinator.sharedPresenter.showNotificationsTab() return true } func openNotificationSettingsScreen() -> Bool { - WPTabBarController.sharedInstance().switchNotificationsTabToNotificationSettings() + RootViewControllerCoordinator.sharedPresenter.switchNotificationsTabToNotificationSettings() return true } @@ -398,9 +398,9 @@ fileprivate extension SearchManager { func openListView(for apost: AbstractPost) { closePreviewIfNeeded(for: apost) if let post = apost as? Post { - WPTabBarController.sharedInstance().mySitesCoordinator.showPosts(for: post.blog) + RootViewControllerCoordinator.sharedPresenter.showPosts(for: post.blog) } else if let page = apost as? Page { - WPTabBarController.sharedInstance().mySitesCoordinator.showPages(for: page.blog) + RootViewControllerCoordinator.sharedPresenter.showPages(for: page.blog) } } @@ -412,7 +412,7 @@ fileprivate extension SearchManager { onFailure() return } - WPTabBarController.sharedInstance().showReaderTab(forPost: postID, onBlog: blogID) + RootViewControllerCoordinator.sharedPresenter.showReaderTab(forPost: postID, onBlog: blogID) } func openReader(for postID: NSNumber, siteID: NSNumber, onFailure: () -> Void) { @@ -421,7 +421,7 @@ fileprivate extension SearchManager { onFailure() return } - WPTabBarController.sharedInstance().showReaderTab(forPost: postID, onBlog: siteID) + RootViewControllerCoordinator.sharedPresenter.showReaderTab(forPost: postID, onBlog: siteID) } // MARK: - Editor @@ -431,7 +431,7 @@ fileprivate extension SearchManager { openListView(for: post) let editor = EditPostViewController.init(post: post) editor.modalPresentationStyle = .fullScreen - WPTabBarController.sharedInstance().present(editor, animated: true) + RootViewControllerCoordinator.sharedPresenter.rootViewController.present(editor, animated: true) } func openEditor(for page: Page) { @@ -439,22 +439,23 @@ fileprivate extension SearchManager { openListView(for: page) let editorViewController = EditPageViewController(page: page) - WPTabBarController.sharedInstance().present(editorViewController, animated: false) + RootViewControllerCoordinator.sharedPresenter.rootViewController.present(editorViewController, animated: false) } // MARK: - Preview func openPreview(for apost: AbstractPost) { - WPTabBarController.sharedInstance().showMySitesTab() + RootViewControllerCoordinator.sharedPresenter.showMySitesTab() closePreviewIfNeeded(for: apost) let controller = PreviewWebKitViewController(post: apost, source: "spotlight_preview_post") controller.trackOpenEvent() let navWrapper = LightNavigationController(rootViewController: controller) - if WPTabBarController.sharedInstance()?.traitCollection.userInterfaceIdiom == .pad { + let rootViewController = RootViewControllerCoordinator.sharedPresenter.rootViewController + if rootViewController.traitCollection.userInterfaceIdiom == .pad { navWrapper.modalPresentationStyle = .fullScreen } - WPTabBarController.sharedInstance().present(navWrapper, animated: true) + rootViewController.present(navWrapper, animated: true) openListView(for: apost) } @@ -463,7 +464,8 @@ fileprivate extension SearchManager { /// AbstractPost, leave it open, otherwise close it. /// func closePreviewIfNeeded(for apost: AbstractPost) { - guard let navController = WPTabBarController.sharedInstance().presentedViewController as? UINavigationController else { + let rootViewController = RootViewControllerCoordinator.sharedPresenter.rootViewController + guard let navController = rootViewController.presentedViewController as? UINavigationController else { return } @@ -479,7 +481,8 @@ fileprivate extension SearchManager { /// If there is any post preview window open, close it. /// func closeAnyOpenPreview() { - guard let navController = WPTabBarController.sharedInstance().presentedViewController as? UINavigationController, + let rootViewController = RootViewControllerCoordinator.sharedPresenter.rootViewController + guard let navController = rootViewController.presentedViewController as? UINavigationController, navController.topViewController is PreviewWebKitViewController else { return } From ca886bb0a72e1c5e06c6f7c41c0c3d61bb7c1bf6 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Tue, 27 Dec 2022 04:34:04 +0200 Subject: [PATCH 05/47] Update: replace usages of `showNotificationsTab` --- .../Classes/Utility/Universal Links/Routes+Notifications.swift | 2 +- .../ViewRelated/NUX/WordPressAuthenticationManager.swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/WordPress/Classes/Utility/Universal Links/Routes+Notifications.swift b/WordPress/Classes/Utility/Universal Links/Routes+Notifications.swift index 754c0ca98182..a5c77f186bb6 100644 --- a/WordPress/Classes/Utility/Universal Links/Routes+Notifications.swift +++ b/WordPress/Classes/Utility/Universal Links/Routes+Notifications.swift @@ -8,7 +8,7 @@ struct NotificationsRoute: Route { struct NotificationsNavigationAction: NavigationAction { func perform(_ values: [String: String], source: UIViewController? = nil, router: LinkRouter) { - WPTabBarController.sharedInstance().showNotificationsTab() + RootViewControllerCoordinator.sharedPresenter.showNotificationsTab() WPTabBarController.sharedInstance().popNotificationsTabToRoot() } } diff --git a/WordPress/Classes/ViewRelated/NUX/WordPressAuthenticationManager.swift b/WordPress/Classes/ViewRelated/NUX/WordPressAuthenticationManager.swift index 06de2410db56..52b705a6c2ed 100644 --- a/WordPress/Classes/ViewRelated/NUX/WordPressAuthenticationManager.swift +++ b/WordPress/Classes/ViewRelated/NUX/WordPressAuthenticationManager.swift @@ -587,7 +587,7 @@ private extension WordPressAuthenticationManager { if option == .reader { RootViewControllerCoordinator.sharedPresenter.showReaderTab() } else if option == .notifications { - WPTabBarController.sharedInstance().showNotificationsTab() + RootViewControllerCoordinator.sharedPresenter.showNotificationsTab() } } From 493a27f8d69e90698145d67ab4cf48f3389d285b Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Tue, 27 Dec 2022 04:34:46 +0200 Subject: [PATCH 06/47] Update: replace usage of `showReaderTab(forPost:)` --- WordPress/Classes/System/WordPressAppDelegate+openURL.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/Classes/System/WordPressAppDelegate+openURL.swift b/WordPress/Classes/System/WordPressAppDelegate+openURL.swift index 431e4d0c5c9c..d6abf8ce6473 100644 --- a/WordPress/Classes/System/WordPressAppDelegate+openURL.swift +++ b/WordPress/Classes/System/WordPressAppDelegate+openURL.swift @@ -88,7 +88,7 @@ import AutomatticTracks return false } - WPTabBarController.sharedInstance()?.showReaderTab(forPost: NSNumber(value: postId), onBlog: NSNumber(value: blogId)) + RootViewControllerCoordinator.sharedPresenter.showReaderTab(forPost: NSNumber(value: postId), onBlog: NSNumber(value: blogId)) return true } From 14fa3a5e44309c30d8760faba0d131bf5b3bf88e Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Tue, 27 Dec 2022 04:38:12 +0200 Subject: [PATCH 07/47] Update: replace usages of `WPTabBarController.sharedInstance` in Me navigation --- WordPress/Classes/Utility/Universal Links/Routes+Me.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WordPress/Classes/Utility/Universal Links/Routes+Me.swift b/WordPress/Classes/Utility/Universal Links/Routes+Me.swift index 90ba37fcec8e..ae3e7b480834 100644 --- a/WordPress/Classes/Utility/Universal Links/Routes+Me.swift +++ b/WordPress/Classes/Utility/Universal Links/Routes+Me.swift @@ -26,11 +26,11 @@ enum MeNavigationAction: NavigationAction { func perform(_ values: [String: String] = [:], source: UIViewController? = nil, router: LinkRouter) { switch self { case .root: - WPTabBarController.sharedInstance().showMeScene() + RootViewControllerCoordinator.sharedPresenter.showMeScene() case .accountSettings: - WPTabBarController.sharedInstance().navigateToAccountSettings() + RootViewControllerCoordinator.sharedPresenter.navigateToAccountSettings() case .notificationSettings: - WPTabBarController.sharedInstance().switchNotificationsTabToNotificationSettings() + RootViewControllerCoordinator.sharedPresenter.switchNotificationsTabToNotificationSettings() } } } From 831de53bac61f57acd6851981c1f8cac8f76b985 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Tue, 27 Dec 2022 04:44:37 +0200 Subject: [PATCH 08/47] Update: replace usage of `showMedia(for:)` --- .../ViewRelated/Media/MediaNoticeNavigationCoordinator.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/Classes/ViewRelated/Media/MediaNoticeNavigationCoordinator.swift b/WordPress/Classes/ViewRelated/Media/MediaNoticeNavigationCoordinator.swift index 0671f120e1ec..4e50fbfc4f8c 100644 --- a/WordPress/Classes/ViewRelated/Media/MediaNoticeNavigationCoordinator.swift +++ b/WordPress/Classes/ViewRelated/Media/MediaNoticeNavigationCoordinator.swift @@ -22,7 +22,7 @@ class MediaNoticeNavigationCoordinator { static func navigateToMediaLibrary(with userInfo: NSDictionary) { if let blog = blog(from: userInfo) { - WPTabBarController.sharedInstance()?.mySitesCoordinator.showMedia(for: blog) + RootViewControllerCoordinator.sharedPresenter.showMedia(for: blog) } } From 3e3863597d33d7576631e6ec7737dd9f9ad9c160 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Tue, 27 Dec 2022 04:44:52 +0200 Subject: [PATCH 09/47] Update: replace usage of `showPosts(for:)` --- .../ShareNoticeNavigationCoordinator.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/WordPressShareExtension/ShareNoticeNavigationCoordinator.swift b/WordPress/WordPressShareExtension/ShareNoticeNavigationCoordinator.swift index 3c3fbaeba746..67e74a9a0df1 100644 --- a/WordPress/WordPressShareExtension/ShareNoticeNavigationCoordinator.swift +++ b/WordPress/WordPressShareExtension/ShareNoticeNavigationCoordinator.swift @@ -25,7 +25,7 @@ class ShareNoticeNavigationCoordinator { static func navigateToPostList(with userInfo: NSDictionary) { fetchPost(from: userInfo, onSuccess: { post in if let post = post { - WPTabBarController.sharedInstance().mySitesCoordinator.showPosts(for: post.blog) + RootViewControllerCoordinator.sharedPresenter.showPosts(for: post.blog) } }, onFailure: { DDLogError("Could not fetch post from share notification.") From 1882ea1b8e3ad8f729fd25da95b83db3b950251f Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Tue, 27 Dec 2022 04:49:00 +0200 Subject: [PATCH 10/47] Update: replace usages of `present()` and `dismiss()` --- WordPress/Classes/System/WordPressAppDelegate+openURL.swift | 6 +++--- WordPress/Classes/Utility/PushNotificationsManager.swift | 2 +- .../Media/MediaNoticeNavigationCoordinator.swift | 2 +- .../ShareNoticeNavigationCoordinator.swift | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/WordPress/Classes/System/WordPressAppDelegate+openURL.swift b/WordPress/Classes/System/WordPressAppDelegate+openURL.swift index d6abf8ce6473..4b300243c137 100644 --- a/WordPress/Classes/System/WordPressAppDelegate+openURL.swift +++ b/WordPress/Classes/System/WordPressAppDelegate+openURL.swift @@ -112,14 +112,14 @@ import AutomatticTracks // so the Stats view displays the correct stats. SiteStatsInformation.sharedInstance.siteID = currentSiteID - WPTabBarController.sharedInstance()?.dismiss(animated: true, completion: nil) + RootViewControllerCoordinator.sharedPresenter.rootViewController.dismiss(animated: true, completion: nil) } let navController = UINavigationController(rootViewController: statsViewController) navController.modalPresentationStyle = .currentContext navController.navigationBar.isTranslucent = false - WPTabBarController.sharedInstance()?.present(navController, animated: true, completion: nil) + RootViewControllerCoordinator.sharedPresenter.rootViewController.present(navController, animated: true, completion: nil) return true } @@ -171,7 +171,7 @@ import AutomatticTracks let postVC = EditPostViewController(post: post) postVC.modalPresentationStyle = .fullScreen - WPTabBarController.sharedInstance()?.present(postVC, animated: true, completion: nil) + RootViewControllerCoordinator.sharedPresenter.rootViewController.present(postVC, animated: true, completion: nil) WPAppAnalytics.track(.editorCreatedPost, withProperties: [WPAppAnalyticsKeyTapSource: "url_scheme", WPAppAnalyticsKeyPostType: "post"]) diff --git a/WordPress/Classes/Utility/PushNotificationsManager.swift b/WordPress/Classes/Utility/PushNotificationsManager.swift index 73416fd7541c..f4cc862998c2 100644 --- a/WordPress/Classes/Utility/PushNotificationsManager.swift +++ b/WordPress/Classes/Utility/PushNotificationsManager.swift @@ -428,7 +428,7 @@ extension PushNotificationsManager { } if WPTabBarController.sharedInstance()?.presentedViewController != nil { - WPTabBarController.sharedInstance()?.dismiss(animated: false) + RootViewControllerCoordinator.sharedPresenter.rootViewController.dismiss(animated: false) } WPTabBarController.sharedInstance()?.showMySitesTab() diff --git a/WordPress/Classes/ViewRelated/Media/MediaNoticeNavigationCoordinator.swift b/WordPress/Classes/ViewRelated/Media/MediaNoticeNavigationCoordinator.swift index 4e50fbfc4f8c..56c216e04bef 100644 --- a/WordPress/Classes/ViewRelated/Media/MediaNoticeNavigationCoordinator.swift +++ b/WordPress/Classes/ViewRelated/Media/MediaNoticeNavigationCoordinator.swift @@ -16,7 +16,7 @@ class MediaNoticeNavigationCoordinator { let editor = EditPostViewController(blog: blog) editor.modalPresentationStyle = .fullScreen editor.insertedMedia = media - WPTabBarController.sharedInstance().present(editor, animated: false) + RootViewControllerCoordinator.sharedPresenter.rootViewController.present(editor, animated: false) WPAppAnalytics.track(.editorCreatedPost, withProperties: [WPAppAnalyticsKeyTapSource: source, WPAppAnalyticsKeyPostType: "post"], with: blog) } diff --git a/WordPress/WordPressShareExtension/ShareNoticeNavigationCoordinator.swift b/WordPress/WordPressShareExtension/ShareNoticeNavigationCoordinator.swift index 67e74a9a0df1..55a064e34f0f 100644 --- a/WordPress/WordPressShareExtension/ShareNoticeNavigationCoordinator.swift +++ b/WordPress/WordPressShareExtension/ShareNoticeNavigationCoordinator.swift @@ -19,7 +19,7 @@ class ShareNoticeNavigationCoordinator { let editor = EditPostViewController.init(post: post) editor.modalPresentationStyle = .fullScreen - WPTabBarController.sharedInstance().present(editor, animated: false) + RootViewControllerCoordinator.sharedPresenter.rootViewController.present(editor, animated: false) } static func navigateToPostList(with userInfo: NSDictionary) { From 8bab975bfc610fd44ee7f6bef219eccd7483fbe7 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Tue, 27 Dec 2022 05:13:51 +0200 Subject: [PATCH 11/47] Update: replace usages of `WPTabBarController.sharedInstance()` in `PushNotificationsManager` --- .../MySitesCoordinator+RootViewPresenter.swift | 4 ++++ WordPress/Classes/System/RootViewPresenter.swift | 1 + .../Classes/Utility/PushNotificationsManager.swift | 12 +++++++----- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift index 56578730d91a..ab24464b4b30 100644 --- a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift +++ b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift @@ -68,6 +68,10 @@ extension MySitesCoordinator: RootViewPresenter { fallbackBehavior() } + func showNotificationsTabForNote(withID notificationID: String!) { + fallbackBehavior() + } + // MARK: Helpers /// Default implementation for functions that are not supported by the simplified UI. diff --git a/WordPress/Classes/System/RootViewPresenter.swift b/WordPress/Classes/System/RootViewPresenter.swift index 5d3d7b44b9ab..5fdbf5d77b88 100644 --- a/WordPress/Classes/System/RootViewPresenter.swift +++ b/WordPress/Classes/System/RootViewPresenter.swift @@ -31,6 +31,7 @@ protocol RootViewPresenter { // MARK: Notifications func showNotificationsTab() + func showNotificationsTabForNote(withID notificationID: String!) func switchNotificationsTabToNotificationSettings() } diff --git a/WordPress/Classes/Utility/PushNotificationsManager.swift b/WordPress/Classes/Utility/PushNotificationsManager.swift index f4cc862998c2..01f361ec574a 100644 --- a/WordPress/Classes/Utility/PushNotificationsManager.swift +++ b/WordPress/Classes/Utility/PushNotificationsManager.swift @@ -248,7 +248,7 @@ extension PushNotificationsManager { WPAnalytics.track(.supportReceivedResponseFromSupport) if applicationState == .background { - WPTabBarController.sharedInstance().showMeScene() + RootViewControllerCoordinator.sharedPresenter.showMeScene() } completionHandler?(.newData) @@ -335,7 +335,7 @@ extension PushNotificationsManager { return false } - WPTabBarController.sharedInstance().showNotificationsTabForNote(withID: notificationId) + RootViewControllerCoordinator.sharedPresenter.showNotificationsTabForNote(withID: notificationId) completionHandler?(.newData) return true @@ -427,10 +427,12 @@ extension PushNotificationsManager { return false } - if WPTabBarController.sharedInstance()?.presentedViewController != nil { - RootViewControllerCoordinator.sharedPresenter.rootViewController.dismiss(animated: false) + let rootViewController = RootViewControllerCoordinator.sharedPresenter.rootViewController + + if rootViewController.presentedViewController != nil { + rootViewController.dismiss(animated: false) } - WPTabBarController.sharedInstance()?.showMySitesTab() + RootViewControllerCoordinator.sharedPresenter.showMySitesTab() if let taskName = userInfo.string(forKey: QuickStartTracking.taskNameKey), let quickStartType = userInfo.string(forKey: QuickStartTracking.quickStartTypeKey) { From 8fbfd1bfd33084387022c0fad8c05d3eba69636b Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Tue, 27 Dec 2022 05:36:22 +0200 Subject: [PATCH 12/47] Update: replace usages of `currentlySelectedScreen()` --- .../Classes/System/MySitesCoordinator+RootViewPresenter.swift | 4 ++++ WordPress/Classes/System/RootViewPresenter.swift | 1 + WordPress/Classes/System/WordPressAppDelegate.swift | 2 +- WordPress/Classes/ViewRelated/Comments/CommentAnalytics.swift | 2 +- 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift index ab24464b4b30..644b46a8d2f6 100644 --- a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift +++ b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift @@ -10,6 +10,10 @@ extension MySitesCoordinator: RootViewPresenter { meScenePresenter } + func currentlySelectedScreen() -> String! { + return "Blog List" + } + // MARK: Reader func showReaderTab() { diff --git a/WordPress/Classes/System/RootViewPresenter.swift b/WordPress/Classes/System/RootViewPresenter.swift index 5fdbf5d77b88..fc63ed874f3e 100644 --- a/WordPress/Classes/System/RootViewPresenter.swift +++ b/WordPress/Classes/System/RootViewPresenter.swift @@ -7,6 +7,7 @@ protocol RootViewPresenter { var rootViewController: UIViewController { get } func showBlogDetails(for blog: Blog) func getMeScenePresenter() -> ScenePresenter + func currentlySelectedScreen() -> String! // MARK: Reader diff --git a/WordPress/Classes/System/WordPressAppDelegate.swift b/WordPress/Classes/System/WordPressAppDelegate.swift index 9a0c11a93299..5c7438342c64 100644 --- a/WordPress/Classes/System/WordPressAppDelegate.swift +++ b/WordPress/Classes/System/WordPressAppDelegate.swift @@ -655,7 +655,7 @@ extension WordPressAppDelegate { return "Jetpack Migration View" #endif default: - return WPTabBarController.sharedInstance().currentlySelectedScreen() + return RootViewControllerCoordinator.sharedPresenter.currentlySelectedScreen() } } diff --git a/WordPress/Classes/ViewRelated/Comments/CommentAnalytics.swift b/WordPress/Classes/ViewRelated/Comments/CommentAnalytics.swift index 4eaaa0e9cb66..c017532965e1 100644 --- a/WordPress/Classes/ViewRelated/Comments/CommentAnalytics.swift +++ b/WordPress/Classes/ViewRelated/Comments/CommentAnalytics.swift @@ -11,7 +11,7 @@ import Foundation } static func trackingContext() -> String { - let screen = WPTabBarController.sharedInstance()?.currentlySelectedScreen() ?? Constants.unknown + let screen = RootViewControllerCoordinator.sharedPresenter.currentlySelectedScreen() switch screen { case WPTabBarCurrentlySelectedScreenSites: return Constants.sites From cd976e8b7fda1e13f0cafa4cbc1e4c6d931fadc5 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Tue, 27 Dec 2022 05:36:42 +0200 Subject: [PATCH 13/47] Update: replace usages of `showBlogDetails()` --- .../Final Assembly/SiteAssemblyWizardContent.swift | 2 +- .../ShareNoticeNavigationCoordinator.swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/WordPress/Classes/ViewRelated/Site Creation/Final Assembly/SiteAssemblyWizardContent.swift b/WordPress/Classes/ViewRelated/Site Creation/Final Assembly/SiteAssemblyWizardContent.swift index de58061038e3..61f378e1bfc5 100644 --- a/WordPress/Classes/ViewRelated/Site Creation/Final Assembly/SiteAssemblyWizardContent.swift +++ b/WordPress/Classes/ViewRelated/Site Creation/Final Assembly/SiteAssemblyWizardContent.swift @@ -242,7 +242,7 @@ extension SiteAssemblyWizardContent: NUXButtonViewControllerDelegate { } self.dismissTapped(viaDone: true) { [blog, weak self] in - WPTabBarController.sharedInstance()?.mySitesCoordinator.showBlogDetails(for: blog) + RootViewControllerCoordinator.sharedPresenter.showBlogDetails(for: blog) // present quick start, and mark site title as complete if they already selected one guard let self = self else { diff --git a/WordPress/WordPressShareExtension/ShareNoticeNavigationCoordinator.swift b/WordPress/WordPressShareExtension/ShareNoticeNavigationCoordinator.swift index 55a064e34f0f..51d1ed15c8c1 100644 --- a/WordPress/WordPressShareExtension/ShareNoticeNavigationCoordinator.swift +++ b/WordPress/WordPressShareExtension/ShareNoticeNavigationCoordinator.swift @@ -35,7 +35,7 @@ class ShareNoticeNavigationCoordinator { static func navigateToBlogDetails(with userInfo: NSDictionary) { fetchBlog(from: userInfo, onSuccess: { blog in if let blog = blog { - WPTabBarController.sharedInstance()?.mySitesCoordinator.showBlogDetails(for: blog) + RootViewControllerCoordinator.sharedPresenter.showBlogDetails(for: blog) } }, onFailure: { DDLogError("Could not fetch blog from share notification.") From 19f48de74e3edbf13b2502f22bb5fb3f288b8564 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Tue, 27 Dec 2022 05:42:42 +0200 Subject: [PATCH 14/47] Update: replace usage of `WPTabBarController.sharedInstance()` in SupportVC --- .../ViewRelated/Support/SupportTableViewController.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WordPress/Classes/ViewRelated/Support/SupportTableViewController.swift b/WordPress/Classes/ViewRelated/Support/SupportTableViewController.swift index f4c992c584d0..72932ce65440 100644 --- a/WordPress/Classes/ViewRelated/Support/SupportTableViewController.swift +++ b/WordPress/Classes/ViewRelated/Support/SupportTableViewController.swift @@ -73,11 +73,11 @@ class SupportTableViewController: UITableViewController { navigationController.modalPresentationStyle = .formSheet } - let tabBarController = WPTabBarController.sharedInstance() - if let presentedVC = tabBarController?.presentedViewController { + let rootViewController = RootViewControllerCoordinator.sharedPresenter.rootViewController + if let presentedVC = rootViewController.presentedViewController { presentedVC.present(navigationController, animated: true) } else { - tabBarController?.present(navigationController, animated: true) + rootViewController.present(navigationController, animated: true) } } From e571333c649306afd2b647c5070ac6f8b5c2a726 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Tue, 27 Dec 2022 05:53:08 +0200 Subject: [PATCH 15/47] Update: replace usages of some reader-related function with `RootViewPresenter` --- .../MySitesCoordinator+RootViewPresenter.swift | 16 ++++++++++++++++ WordPress/Classes/System/RootViewPresenter.swift | 4 ++++ .../ViewRelated/Blog/QuickStartTours.swift | 6 +----- .../Reader/ReaderSaveForLaterAction.swift | 2 +- .../Reader/ReaderStreamViewController.swift | 2 +- .../Tab Navigation/ReaderTabViewController.swift | 2 +- 6 files changed, 24 insertions(+), 8 deletions(-) diff --git a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift index 644b46a8d2f6..d7c66cb46fb7 100644 --- a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift +++ b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift @@ -16,6 +16,10 @@ extension MySitesCoordinator: RootViewPresenter { // MARK: Reader + var readerTabViewController: ReaderTabViewController? { + return nil + } + func showReaderTab() { fallbackBehavior() } @@ -24,6 +28,18 @@ extension MySitesCoordinator: RootViewPresenter { fallbackBehavior() } + func switchToSavedPosts() { + fallbackBehavior() + } + + func resetReaderDiscoverNudgeFlow() { + fallbackBehavior() + } + + func resetReaderTab() { + fallbackBehavior() + } + func navigateToReaderSearch() { fallbackBehavior() } diff --git a/WordPress/Classes/System/RootViewPresenter.swift b/WordPress/Classes/System/RootViewPresenter.swift index fc63ed874f3e..085f879e25ca 100644 --- a/WordPress/Classes/System/RootViewPresenter.swift +++ b/WordPress/Classes/System/RootViewPresenter.swift @@ -11,9 +11,13 @@ protocol RootViewPresenter { // MARK: Reader + var readerTabViewController: ReaderTabViewController? { get } func showReaderTab() func showReaderTab(forPost: NSNumber!, onBlog: NSNumber!) func switchToDiscover() + func switchToSavedPosts() + func resetReaderDiscoverNudgeFlow() + func resetReaderTab() func navigateToReaderSearch() func switchToTopic(where predicate: (ReaderAbstractTopic) -> Bool) func switchToMyLikes() diff --git a/WordPress/Classes/ViewRelated/Blog/QuickStartTours.swift b/WordPress/Classes/ViewRelated/Blog/QuickStartTours.swift index b99163939473..c6b2346ff9c5 100644 --- a/WordPress/Classes/ViewRelated/Blog/QuickStartTours.swift +++ b/WordPress/Classes/ViewRelated/Blog/QuickStartTours.swift @@ -240,11 +240,7 @@ struct QuickStartFollowTour: QuickStartTour { let accessibilityHintText = NSLocalizedString("Guides you through the process of following other sites.", comment: "This value is used to set the accessibility hint text for following the sites of other users.") func setupReaderTab() { - guard let tabBar = WPTabBarController.sharedInstance() else { - return - } - - tabBar.resetReaderTab() + RootViewControllerCoordinator.sharedPresenter.resetReaderTab() } } diff --git a/WordPress/Classes/ViewRelated/Reader/ReaderSaveForLaterAction.swift b/WordPress/Classes/ViewRelated/Reader/ReaderSaveForLaterAction.swift index 400d5987cfd3..5f87767f1705 100644 --- a/WordPress/Classes/ViewRelated/Reader/ReaderSaveForLaterAction.swift +++ b/WordPress/Classes/ViewRelated/Reader/ReaderSaveForLaterAction.swift @@ -65,7 +65,7 @@ final class ReaderSaveForLaterAction { actionTitle: Strings.viewAll, actionHandler: { _ in self.trackViewAllSavedPostsAction(origin: origin) - WPTabBarController.sharedInstance().switchToSavedPosts() + RootViewControllerCoordinator.sharedPresenter.switchToSavedPosts() }) present(notice) diff --git a/WordPress/Classes/ViewRelated/Reader/ReaderStreamViewController.swift b/WordPress/Classes/ViewRelated/Reader/ReaderStreamViewController.swift index b8d45c6c76ea..9b1f3490f5c5 100644 --- a/WordPress/Classes/ViewRelated/Reader/ReaderStreamViewController.swift +++ b/WordPress/Classes/ViewRelated/Reader/ReaderStreamViewController.swift @@ -1587,7 +1587,7 @@ extension ReaderStreamViewController: WPTableViewHandlerDelegate { private func resetReaderDiscoverNudgeFlow() { shouldShowCommentSpotlight = false - WPTabBarController.sharedInstance().resetReaderDiscoverNudgeFlow() + RootViewControllerCoordinator.sharedPresenter.resetReaderDiscoverNudgeFlow() } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { diff --git a/WordPress/Classes/ViewRelated/Reader/Tab Navigation/ReaderTabViewController.swift b/WordPress/Classes/ViewRelated/Reader/Tab Navigation/ReaderTabViewController.swift index 7c9d3a93bc31..91d0b0adf6c3 100644 --- a/WordPress/Classes/ViewRelated/Reader/Tab Navigation/ReaderTabViewController.swift +++ b/WordPress/Classes/ViewRelated/Reader/Tab Navigation/ReaderTabViewController.swift @@ -162,7 +162,7 @@ extension ReaderTabViewController: UIViewControllerRestoration { let index = Int(coder.decodeInt32(forKey: ReaderTabViewController.encodedIndexKey)) - let controller = WPTabBarController.sharedInstance().readerTabViewController + let controller = RootViewControllerCoordinator.sharedPresenter.readerTabViewController controller?.setStartIndex(index) return controller From fb98daf5a1502fbd058c5fd7d728f7a1c743a920 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Tue, 27 Dec 2022 05:54:47 +0200 Subject: [PATCH 16/47] Update: remove unneeded optional casting --- WordPress/Classes/System/WordPressAppDelegate+openURL.swift | 2 +- .../Classes/Utility/InteractiveNotificationsManager.swift | 6 +++--- WordPress/Classes/Utility/Universal Links/Route+Page.swift | 4 ++-- .../ViewRelated/Blog/My Site/MySiteViewController.swift | 2 +- .../Me/App Settings/AppSettingsViewController.swift | 2 +- .../Controllers/NotificationsViewController.swift | 2 +- .../Reader/Detail/ReaderDetailViewController.swift | 2 +- .../Reader/Tab Navigation/ReaderTabViewController.swift | 2 +- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/WordPress/Classes/System/WordPressAppDelegate+openURL.swift b/WordPress/Classes/System/WordPressAppDelegate+openURL.swift index 4b300243c137..0bcdd43f007f 100644 --- a/WordPress/Classes/System/WordPressAppDelegate+openURL.swift +++ b/WordPress/Classes/System/WordPressAppDelegate+openURL.swift @@ -200,7 +200,7 @@ import AutomatticTracks // Should more formats be accepted be accepted in the future, this line would have to be expanded to accomodate it. let contentEscaped = contentRaw.escapeHtmlNamedEntities() - WPTabBarController.sharedInstance()?.showPageEditor(blog: blog, title: title, content: contentEscaped, source: "url_scheme") + WPTabBarController.sharedInstance().showPageEditor(blog: blog, title: title, content: contentEscaped, source: "url_scheme") return true } diff --git a/WordPress/Classes/Utility/InteractiveNotificationsManager.swift b/WordPress/Classes/Utility/InteractiveNotificationsManager.swift index 8a4a4e5683f1..430b64b2a42f 100644 --- a/WordPress/Classes/Utility/InteractiveNotificationsManager.swift +++ b/WordPress/Classes/Utility/InteractiveNotificationsManager.swift @@ -210,7 +210,7 @@ final class InteractiveNotificationsManager: NSObject { if identifier == UNNotificationDefaultActionIdentifier { let targetBlog: Blog? = blog(from: threadId) - WPTabBarController.sharedInstance()?.mySitesCoordinator.showCreateSheet(for: targetBlog) + WPTabBarController.sharedInstance().mySitesCoordinator.showCreateSheet(for: targetBlog) } case .weeklyRoundup: let targetBlog = blog(from: userInfo) @@ -226,7 +226,7 @@ final class InteractiveNotificationsManager: NSObject { let targetDate = date(from: userInfo) - WPTabBarController.sharedInstance()?.mySitesCoordinator.showStats( + WPTabBarController.sharedInstance().mySitesCoordinator.showStats( for: targetBlog, timePeriod: .weeks, date: targetDate) @@ -236,7 +236,7 @@ final class InteractiveNotificationsManager: NSObject { WPAnalytics.track(.bloggingRemindersNotificationReceived, properties: ["prompt_included": true]) let answerPromptBlock = { - WPTabBarController.sharedInstance()?.showPromptAnsweringFlow(with: userInfo) + WPTabBarController.sharedInstance().showPromptAnsweringFlow(with: userInfo) } // check if user interacted with custom notification actions. diff --git a/WordPress/Classes/Utility/Universal Links/Route+Page.swift b/WordPress/Classes/Utility/Universal Links/Route+Page.swift index 924e791c44ab..54c151982e14 100644 --- a/WordPress/Classes/Utility/Universal Links/Route+Page.swift +++ b/WordPress/Classes/Utility/Universal Links/Route+Page.swift @@ -15,9 +15,9 @@ struct NewPageForSiteRoute: Route { struct NewPageNavigationAction: NavigationAction { func perform(_ values: [String: String], source: UIViewController? = nil, router: LinkRouter) { if let blog = blog(from: values) { - WPTabBarController.sharedInstance()?.showPageEditor(forBlog: blog) + WPTabBarController.sharedInstance().showPageEditor(forBlog: blog) } else { - WPTabBarController.sharedInstance()?.showPageEditor() + WPTabBarController.sharedInstance().showPageEditor() } } } diff --git a/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift b/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift index 3c834cbf07b4..970bd024af68 100644 --- a/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift +++ b/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift @@ -190,7 +190,7 @@ class MySiteViewController: UIViewController, NoResultsViewHost { workaroundLargeTitleCollapseBug() if AppConfiguration.showsWhatIsNew { - WPTabBarController.sharedInstance()?.presentWhatIsNew(on: self) + WPTabBarController.sharedInstance().presentWhatIsNew(on: self) } FancyAlertViewController.presentCustomAppIconUpgradeAlertIfNecessary(from: self) diff --git a/WordPress/Classes/ViewRelated/Me/App Settings/AppSettingsViewController.swift b/WordPress/Classes/ViewRelated/Me/App Settings/AppSettingsViewController.swift index 008ce2e74dd3..c85e6b19485f 100644 --- a/WordPress/Classes/ViewRelated/Me/App Settings/AppSettingsViewController.swift +++ b/WordPress/Classes/ViewRelated/Me/App Settings/AppSettingsViewController.swift @@ -511,7 +511,7 @@ private extension AppSettingsViewController { rows.append(debugRow) } - if let presenter = WPTabBarController.sharedInstance()?.whatIsNewScenePresenter as? WhatIsNewScenePresenter, + if let presenter = WPTabBarController.sharedInstance().whatIsNewScenePresenter as? WhatIsNewScenePresenter, presenter.versionHasAnnouncements, AppConfiguration.showsWhatIsNew { let whatIsNewRow = NavigationItemRow(title: AppConstants.Settings.whatIsNewTitle, diff --git a/WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationsViewController.swift b/WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationsViewController.swift index 9062cbe1ec17..69e82c6c11c7 100644 --- a/WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationsViewController.swift +++ b/WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationsViewController.swift @@ -227,7 +227,7 @@ class NotificationsViewController: UIViewController, UIViewControllerRestoration defer { if AppConfiguration.showsWhatIsNew { - WPTabBarController.sharedInstance()?.presentWhatIsNew(on: self) + WPTabBarController.sharedInstance().presentWhatIsNew(on: self) } } diff --git a/WordPress/Classes/ViewRelated/Reader/Detail/ReaderDetailViewController.swift b/WordPress/Classes/ViewRelated/Reader/Detail/ReaderDetailViewController.swift index c25f9925cc57..984309ffba95 100644 --- a/WordPress/Classes/ViewRelated/Reader/Detail/ReaderDetailViewController.swift +++ b/WordPress/Classes/ViewRelated/Reader/Detail/ReaderDetailViewController.swift @@ -144,7 +144,7 @@ class ReaderDetailViewController: UIViewController, ReaderDetailView { /// allowing Reader Detail to use a blue navbar. var useCompatibilityMode: Bool { // Use compatibility mode if not presented within the Reader - return WPTabBarController.sharedInstance()?.readerNavigationController.viewControllers.contains(self) == false + return WPTabBarController.sharedInstance().readerNavigationController.viewControllers.contains(self) == false } /// Used to disable ineffective buttons when a Related post fails to load. diff --git a/WordPress/Classes/ViewRelated/Reader/Tab Navigation/ReaderTabViewController.swift b/WordPress/Classes/ViewRelated/Reader/Tab Navigation/ReaderTabViewController.swift index 91d0b0adf6c3..a638d50444fa 100644 --- a/WordPress/Classes/ViewRelated/Reader/Tab Navigation/ReaderTabViewController.swift +++ b/WordPress/Classes/ViewRelated/Reader/Tab Navigation/ReaderTabViewController.swift @@ -57,7 +57,7 @@ class ReaderTabViewController: UIViewController { ReaderTracker.shared.start(.main) if AppConfiguration.showsWhatIsNew { - WPTabBarController.sharedInstance()?.presentWhatIsNew(on: self) + WPTabBarController.sharedInstance().presentWhatIsNew(on: self) } } From dc3bfca02e70234633eaf534fa05f867844d8523 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Tue, 27 Dec 2022 06:07:34 +0200 Subject: [PATCH 17/47] Update: replace usages of `WPTabBarController.sharedInstance` related to notifs --- .../Classes/System/MySitesCoordinator+RootViewPresenter.swift | 4 ++++ WordPress/Classes/System/RootViewPresenter.swift | 1 + .../Classes/Utility/InteractiveNotificationsManager.swift | 2 +- .../Utility/Universal Links/Routes+Notifications.swift | 2 +- 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift index d7c66cb46fb7..ddcb7f0c69a2 100644 --- a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift +++ b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift @@ -92,6 +92,10 @@ extension MySitesCoordinator: RootViewPresenter { fallbackBehavior() } + func popNotificationsTabToRoot() { + fallbackBehavior() + } + // MARK: Helpers /// Default implementation for functions that are not supported by the simplified UI. diff --git a/WordPress/Classes/System/RootViewPresenter.swift b/WordPress/Classes/System/RootViewPresenter.swift index 085f879e25ca..e8f79723294a 100644 --- a/WordPress/Classes/System/RootViewPresenter.swift +++ b/WordPress/Classes/System/RootViewPresenter.swift @@ -38,5 +38,6 @@ protocol RootViewPresenter { func showNotificationsTab() func showNotificationsTabForNote(withID notificationID: String!) func switchNotificationsTabToNotificationSettings() + func popNotificationsTabToRoot() } diff --git a/WordPress/Classes/Utility/InteractiveNotificationsManager.swift b/WordPress/Classes/Utility/InteractiveNotificationsManager.swift index 430b64b2a42f..2e3d166e2c02 100644 --- a/WordPress/Classes/Utility/InteractiveNotificationsManager.swift +++ b/WordPress/Classes/Utility/InteractiveNotificationsManager.swift @@ -346,7 +346,7 @@ private extension InteractiveNotificationsManager { /// - Parameter noteID: The Notification's Identifier /// func showDetailsWithNoteID(_ noteId: NSNumber) { - WPTabBarController.sharedInstance().showNotificationsTabForNote(withID: noteId.stringValue) + RootViewControllerCoordinator.sharedPresenter.showNotificationsTabForNote(withID: noteId.stringValue) } diff --git a/WordPress/Classes/Utility/Universal Links/Routes+Notifications.swift b/WordPress/Classes/Utility/Universal Links/Routes+Notifications.swift index a5c77f186bb6..1f54636ea974 100644 --- a/WordPress/Classes/Utility/Universal Links/Routes+Notifications.swift +++ b/WordPress/Classes/Utility/Universal Links/Routes+Notifications.swift @@ -9,6 +9,6 @@ struct NotificationsRoute: Route { struct NotificationsNavigationAction: NavigationAction { func perform(_ values: [String: String], source: UIViewController? = nil, router: LinkRouter) { RootViewControllerCoordinator.sharedPresenter.showNotificationsTab() - WPTabBarController.sharedInstance().popNotificationsTabToRoot() + RootViewControllerCoordinator.sharedPresenter.popNotificationsTabToRoot() } } From 2a33e0b3ddee0690923d7e3d14b6cb142e71c637 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Tue, 27 Dec 2022 06:07:55 +0200 Subject: [PATCH 18/47] Update: replace usages of `WPTabBarController.sharedInstance` as a VC --- .../Notifications/ReplyTextView/ReplyTextView.swift | 8 +++----- .../Final Assembly/SiteAssemblyWizardContent.swift | 7 ++----- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/WordPress/Classes/ViewRelated/Notifications/ReplyTextView/ReplyTextView.swift b/WordPress/Classes/ViewRelated/Notifications/ReplyTextView/ReplyTextView.swift index 2d0ede94ae34..8e78d058c6c3 100644 --- a/WordPress/Classes/ViewRelated/Notifications/ReplyTextView/ReplyTextView.swift +++ b/WordPress/Classes/ViewRelated/Notifications/ReplyTextView/ReplyTextView.swift @@ -173,9 +173,7 @@ import Gridicons } @IBAction fileprivate func btnEnterFullscreenPressed(_ sender: Any) { - guard let presenter = WPTabBarController.sharedInstance() else { - return - } + let rootViewController = RootViewControllerCoordinator.sharedPresenter.rootViewController let editViewController = FullScreenCommentReplyViewController() @@ -210,7 +208,7 @@ import Gridicons } // Dismiss the fullscreen view, once it has fully closed process the saving if needed - presenter.dismiss(animated: true) { + rootViewController.dismiss(animated: true) { let respondsToDidExit = self.delegate?.responds(to: #selector(ReplyTextViewDelegate.replyTextView(_:didExitFullScreen:))) ?? false if respondsToDidExit { @@ -222,7 +220,7 @@ import Gridicons self.resignFirstResponder() let navController = LightNavigationController(rootViewController: editViewController) - presenter.present(navController, animated: true) + rootViewController.present(navController, animated: true) } // MARK: - Gestures Recognizers diff --git a/WordPress/Classes/ViewRelated/Site Creation/Final Assembly/SiteAssemblyWizardContent.swift b/WordPress/Classes/ViewRelated/Site Creation/Final Assembly/SiteAssemblyWizardContent.swift index 61f378e1bfc5..0a02a93006b6 100644 --- a/WordPress/Classes/ViewRelated/Site Creation/Final Assembly/SiteAssemblyWizardContent.swift +++ b/WordPress/Classes/ViewRelated/Site Creation/Final Assembly/SiteAssemblyWizardContent.swift @@ -259,16 +259,13 @@ extension SiteAssemblyWizardContent: NUXButtonViewControllerDelegate { return } - guard let tabBar = WPTabBarController.sharedInstance() else { - return - } - + let rootViewController = RootViewControllerCoordinator.sharedPresenter.rootViewController let quickstartPrompt = QuickStartPromptViewController(blog: blog) quickstartPrompt.onDismiss = { blog, showQuickStart in if showQuickStart { QuickStartTourGuide.shared.setupWithDelay(for: blog, type: .newSite, withCompletedSteps: completedSteps) } } - tabBar.present(quickstartPrompt, animated: true) + rootViewController.present(quickstartPrompt, animated: true) } } From 43862d6de9ce8d0c9c4659b1bb21038904d30725 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Tue, 27 Dec 2022 06:19:06 +0200 Subject: [PATCH 19/47] Update: replace usages of `WPTabBarController.mySitesCoordinator` --- .../Classes/System/MySitesCoordinator+RootViewPresenter.swift | 4 ++++ WordPress/Classes/System/RootViewPresenter.swift | 1 + .../Classes/Utility/InteractiveNotificationsManager.swift | 4 ++-- .../Classes/Utility/Universal Links/Routes+MySites.swift | 2 +- WordPress/Classes/Utility/Universal Links/Routes+Start.swift | 2 +- WordPress/Classes/Utility/Universal Links/Routes+Stats.swift | 2 +- .../Blog/My Site/MySiteViewController+OnboardingPrompt.swift | 2 +- .../Stats Revamp v2/StatsRevampV2IntroductionPresenter.swift | 2 +- 8 files changed, 12 insertions(+), 7 deletions(-) diff --git a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift index ddcb7f0c69a2..9bc9dce9a6a8 100644 --- a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift +++ b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift @@ -74,6 +74,10 @@ extension MySitesCoordinator: RootViewPresenter { // MARK: My Site + var mySitesCoordinator: MySitesCoordinator! { + return self + } + func showMySitesTab() { // Do nothing } diff --git a/WordPress/Classes/System/RootViewPresenter.swift b/WordPress/Classes/System/RootViewPresenter.swift index e8f79723294a..bd7b738c20de 100644 --- a/WordPress/Classes/System/RootViewPresenter.swift +++ b/WordPress/Classes/System/RootViewPresenter.swift @@ -28,6 +28,7 @@ protocol RootViewPresenter { // MARK: My Site + var mySitesCoordinator: MySitesCoordinator! { get } func showMySitesTab() func showPages(for blog: Blog) func showPosts(for blog: Blog) diff --git a/WordPress/Classes/Utility/InteractiveNotificationsManager.swift b/WordPress/Classes/Utility/InteractiveNotificationsManager.swift index 2e3d166e2c02..4ebfc89b5102 100644 --- a/WordPress/Classes/Utility/InteractiveNotificationsManager.swift +++ b/WordPress/Classes/Utility/InteractiveNotificationsManager.swift @@ -210,7 +210,7 @@ final class InteractiveNotificationsManager: NSObject { if identifier == UNNotificationDefaultActionIdentifier { let targetBlog: Blog? = blog(from: threadId) - WPTabBarController.sharedInstance().mySitesCoordinator.showCreateSheet(for: targetBlog) + RootViewControllerCoordinator.sharedPresenter.mySitesCoordinator.showCreateSheet(for: targetBlog) } case .weeklyRoundup: let targetBlog = blog(from: userInfo) @@ -226,7 +226,7 @@ final class InteractiveNotificationsManager: NSObject { let targetDate = date(from: userInfo) - WPTabBarController.sharedInstance().mySitesCoordinator.showStats( + RootViewControllerCoordinator.sharedPresenter.mySitesCoordinator.showStats( for: targetBlog, timePeriod: .weeks, date: targetDate) diff --git a/WordPress/Classes/Utility/Universal Links/Routes+MySites.swift b/WordPress/Classes/Utility/Universal Links/Routes+MySites.swift index 8d7b7af6dcac..b417b2b2660a 100644 --- a/WordPress/Classes/Utility/Universal Links/Routes+MySites.swift +++ b/WordPress/Classes/Utility/Universal Links/Routes+MySites.swift @@ -44,7 +44,7 @@ extension MySitesRoute: Route { extension MySitesRoute: NavigationAction { func perform(_ values: [String: String], source: UIViewController? = nil, router: LinkRouter) { - guard let coordinator = WPTabBarController.sharedInstance().mySitesCoordinator else { + guard let coordinator = RootViewControllerCoordinator.sharedPresenter.mySitesCoordinator else { return } diff --git a/WordPress/Classes/Utility/Universal Links/Routes+Start.swift b/WordPress/Classes/Utility/Universal Links/Routes+Start.swift index 92a99df4ce07..1c9452be3618 100644 --- a/WordPress/Classes/Utility/Universal Links/Routes+Start.swift +++ b/WordPress/Classes/Utility/Universal Links/Routes+Start.swift @@ -11,7 +11,7 @@ struct StartRoute: Route, NavigationAction { func perform(_ values: [String: String], source: UIViewController?, router: LinkRouter) { guard AccountHelper.isDotcomAvailable(), - let coordinator = WPTabBarController.sharedInstance().mySitesCoordinator else { + let coordinator = RootViewControllerCoordinator.sharedPresenter.mySitesCoordinator else { return } diff --git a/WordPress/Classes/Utility/Universal Links/Routes+Stats.swift b/WordPress/Classes/Utility/Universal Links/Routes+Stats.swift index 237b9b8703c7..311047bb9c1e 100644 --- a/WordPress/Classes/Utility/Universal Links/Routes+Stats.swift +++ b/WordPress/Classes/Utility/Universal Links/Routes+Stats.swift @@ -67,7 +67,7 @@ extension StatsRoute: Route { extension StatsRoute: NavigationAction { func perform(_ values: [String: String], source: UIViewController? = nil, router: LinkRouter) { - guard let coordinator = WPTabBarController.sharedInstance().mySitesCoordinator else { + guard let coordinator = RootViewControllerCoordinator.sharedPresenter.mySitesCoordinator else { return } diff --git a/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController+OnboardingPrompt.swift b/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController+OnboardingPrompt.swift index 869d3f17434b..3792e3fd036b 100644 --- a/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController+OnboardingPrompt.swift +++ b/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController+OnboardingPrompt.swift @@ -17,7 +17,7 @@ extension MySiteViewController { case .stats: // Show the stats view for the current blog if let blog = blog { - WPTabBarController.sharedInstance().mySitesCoordinator.showStats(for: blog, timePeriod: .insights) + RootViewControllerCoordinator.sharedPresenter.mySitesCoordinator.showStats(for: blog, timePeriod: .insights) } case .writing: // Open the editor diff --git a/WordPress/Classes/ViewRelated/Feature Introduction/Stats Revamp v2/StatsRevampV2IntroductionPresenter.swift b/WordPress/Classes/ViewRelated/Feature Introduction/Stats Revamp v2/StatsRevampV2IntroductionPresenter.swift index 55f69ec00382..7b5fad17673e 100644 --- a/WordPress/Classes/ViewRelated/Feature Introduction/Stats Revamp v2/StatsRevampV2IntroductionPresenter.swift +++ b/WordPress/Classes/ViewRelated/Feature Introduction/Stats Revamp v2/StatsRevampV2IntroductionPresenter.swift @@ -44,7 +44,7 @@ class StatsRevampV2IntroductionPresenter: NSObject { return } - WPTabBarController.sharedInstance().mySitesCoordinator.showStats(for: blog, timePeriod: .insights) + RootViewControllerCoordinator.sharedPresenter.mySitesCoordinator.showStats(for: blog, timePeriod: .insights) } // "Remind Me" prompt From fb65edcd57b84a48074cd0201d47922c3ccd547d Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Tue, 27 Dec 2022 06:21:48 +0200 Subject: [PATCH 20/47] Update: replace usages of `WPTabBarController.sharedInstance()` by casting the rootVC --- .../Classes/Utility/Universal Links/Routes+Reader.swift | 3 ++- .../Controllers/NotificationsViewController.swift | 5 ++++- .../Reader/Detail/ReaderDetailViewController.swift | 5 ++++- .../Insights/SiteStatsInsightsTableViewController.swift | 3 ++- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/WordPress/Classes/Utility/Universal Links/Routes+Reader.swift b/WordPress/Classes/Utility/Universal Links/Routes+Reader.swift index 2937e21b97cb..ff0257b10a40 100644 --- a/WordPress/Classes/Utility/Universal Links/Routes+Reader.swift +++ b/WordPress/Classes/Utility/Universal Links/Routes+Reader.swift @@ -62,7 +62,8 @@ extension ReaderRoute: Route { extension ReaderRoute: NavigationAction { func perform(_ values: [String: String], source: UIViewController? = nil, router: LinkRouter) { - guard let coordinator = WPTabBarController.sharedInstance().readerCoordinator else { + guard let tabBarController = RootViewControllerCoordinator.sharedPresenter.rootViewController as? WPTabBarController, + let coordinator = tabBarController.readerCoordinator else { return } diff --git a/WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationsViewController.swift b/WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationsViewController.swift index 69e82c6c11c7..26a1d9dc55ce 100644 --- a/WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationsViewController.swift +++ b/WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationsViewController.swift @@ -297,7 +297,10 @@ class NotificationsViewController: UIViewController, UIViewControllerRestoration static func viewController(withRestorationIdentifierPath identifierComponents: [String], coder: NSCoder) -> UIViewController? { - return WPTabBarController.sharedInstance().notificationsViewController + guard let tabBarController = RootViewControllerCoordinator.sharedPresenter.rootViewController as? WPTabBarController else { + return nil + } + return tabBarController.notificationsViewController } override func encodeRestorableState(with coder: NSCoder) { diff --git a/WordPress/Classes/ViewRelated/Reader/Detail/ReaderDetailViewController.swift b/WordPress/Classes/ViewRelated/Reader/Detail/ReaderDetailViewController.swift index 984309ffba95..dfca4f10ff57 100644 --- a/WordPress/Classes/ViewRelated/Reader/Detail/ReaderDetailViewController.swift +++ b/WordPress/Classes/ViewRelated/Reader/Detail/ReaderDetailViewController.swift @@ -144,7 +144,10 @@ class ReaderDetailViewController: UIViewController, ReaderDetailView { /// allowing Reader Detail to use a blue navbar. var useCompatibilityMode: Bool { // Use compatibility mode if not presented within the Reader - return WPTabBarController.sharedInstance().readerNavigationController.viewControllers.contains(self) == false + guard let tabBarController = RootViewControllerCoordinator.sharedPresenter.rootViewController as? WPTabBarController else { + return false + } + return tabBarController.readerNavigationController.viewControllers.contains(self) == false } /// Used to disable ineffective buttons when a Related post fails to load. diff --git a/WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsInsightsTableViewController.swift b/WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsInsightsTableViewController.swift index 31ff7dafd6de..12a2a13b1c3e 100644 --- a/WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsInsightsTableViewController.swift +++ b/WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsInsightsTableViewController.swift @@ -519,7 +519,8 @@ extension SiteStatsInsightsTableViewController: SiteStatsInsightsDelegate { self.navigationController?.popToRootViewController(animated: false) RootViewControllerCoordinator.sharedPresenter.showReaderTab() - if let nc = WPTabBarController.sharedInstance().selectedViewController as? UINavigationController, + if let tabBarController = RootViewControllerCoordinator.sharedPresenter.rootViewController as? WPTabBarController, + let nc = tabBarController.selectedViewController as? UINavigationController, let vc = nc.topViewController as? ReaderTabViewController { vc.presentDiscoverTab() } From 9ea1a360f9feb182d3b22b5fa67df599d4269be0 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Tue, 27 Dec 2022 21:35:14 +0200 Subject: [PATCH 21/47] Update: move `currentOrLastBlog` to `RootViewPresenter` --- ...MySitesCoordinator+RootViewPresenter.swift | 4 ++++ .../Classes/System/RootViewPresenter.swift | 11 +++++++++ ...WPTabBarController+RootViewPresenter.swift | 7 ++++++ .../ViewRelated/System/WPTabBarController.h | 2 -- .../ViewRelated/System/WPTabBarController.m | 23 +------------------ 5 files changed, 23 insertions(+), 24 deletions(-) diff --git a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift index 9bc9dce9a6a8..5022f0629657 100644 --- a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift +++ b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift @@ -14,6 +14,10 @@ extension MySitesCoordinator: RootViewPresenter { return "Blog List" } + func currentlyVisibleBlog() -> Blog? { + currentBlog + } + // MARK: Reader var readerTabViewController: ReaderTabViewController? { diff --git a/WordPress/Classes/System/RootViewPresenter.swift b/WordPress/Classes/System/RootViewPresenter.swift index bd7b738c20de..700a10f2db11 100644 --- a/WordPress/Classes/System/RootViewPresenter.swift +++ b/WordPress/Classes/System/RootViewPresenter.swift @@ -8,6 +8,7 @@ protocol RootViewPresenter { func showBlogDetails(for blog: Blog) func getMeScenePresenter() -> ScenePresenter func currentlySelectedScreen() -> String! + func currentlyVisibleBlog() -> Blog? // MARK: Reader @@ -42,3 +43,13 @@ protocol RootViewPresenter { func popNotificationsTabToRoot() } + +extension RootViewPresenter { + func currentOrLastBlog() -> Blog? { + if let blog = currentlyVisibleBlog() { + return blog + } + let context = ContextManager.shared.mainContext + return Blog.lastUsedOrFirst(in: context) + } +} diff --git a/WordPress/Classes/System/WPTabBarController+RootViewPresenter.swift b/WordPress/Classes/System/WPTabBarController+RootViewPresenter.swift index 607b0f51ae17..ba9921fc8749 100644 --- a/WordPress/Classes/System/WPTabBarController+RootViewPresenter.swift +++ b/WordPress/Classes/System/WPTabBarController+RootViewPresenter.swift @@ -14,6 +14,13 @@ extension WPTabBarController: RootViewPresenter { meScenePresenter } + func currentlyVisibleBlog() -> Blog? { + guard selectedIndex == WPTab.mySites.rawValue else { + return nil + } + return mySitesCoordinator.currentBlog + } + // MARK: My Site func showPages(for blog: Blog) { diff --git a/WordPress/Classes/ViewRelated/System/WPTabBarController.h b/WordPress/Classes/ViewRelated/System/WPTabBarController.h index 36c46c334c4f..fe8ffed2894c 100644 --- a/WordPress/Classes/ViewRelated/System/WPTabBarController.h +++ b/WordPress/Classes/ViewRelated/System/WPTabBarController.h @@ -51,6 +51,4 @@ extern NSNotificationName const WPTabBarHeightChangedNotification; - (void)showNotificationsTabForNoteWithID:(NSString *)notificationID; - (void)updateNotificationBadgeVisibility; -- (Blog *)currentOrLastBlog; - @end diff --git a/WordPress/Classes/ViewRelated/System/WPTabBarController.m b/WordPress/Classes/ViewRelated/System/WPTabBarController.m index 61739f665c1b..389f37accf97 100644 --- a/WordPress/Classes/ViewRelated/System/WPTabBarController.m +++ b/WordPress/Classes/ViewRelated/System/WPTabBarController.m @@ -363,7 +363,7 @@ - (void)showPostTabAnimated:(BOOL)animated toMedia:(BOOL)openToMedia blog:(Blog } if (!blog) { - blog = [self currentOrLastBlog]; +// blog = [self currentOrLastBlog]; } EditPostViewController* editor = [[EditPostViewController alloc] initWithBlog:blog]; @@ -429,27 +429,6 @@ - (NSString *)currentlySelectedScreen return currentlySelectedScreen; } -- (Blog *)currentlyVisibleBlog -{ - if (self.selectedIndex != WPTabMySites) { - return nil; - } - - return [self.mySitesCoordinator currentBlog]; -} - -- (Blog *)currentOrLastBlog -{ - Blog *blog = [self currentlyVisibleBlog]; - - if (blog == nil) { - NSManagedObjectContext *context = [[ContextManager sharedInstance] mainContext]; - blog = [Blog lastUsedOrFirstInContext: context]; - } - - return blog; -} - #pragma mark - UITabBarControllerDelegate methods - (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController From 57e4609ef14a0953c4a6ea1dbffe5caa544d6a27 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Tue, 27 Dec 2022 21:57:27 +0200 Subject: [PATCH 22/47] Refactor: add a new file for editor navigation extension --- .../System/RootViewPresenter+EditorNavigation.swift | 11 +++++++++++ WordPress/Classes/System/RootViewPresenter.swift | 10 ---------- WordPress/WordPress.xcodeproj/project.pbxproj | 6 ++++++ 3 files changed, 17 insertions(+), 10 deletions(-) create mode 100644 WordPress/Classes/System/RootViewPresenter+EditorNavigation.swift diff --git a/WordPress/Classes/System/RootViewPresenter+EditorNavigation.swift b/WordPress/Classes/System/RootViewPresenter+EditorNavigation.swift new file mode 100644 index 000000000000..f3cdd2011349 --- /dev/null +++ b/WordPress/Classes/System/RootViewPresenter+EditorNavigation.swift @@ -0,0 +1,11 @@ +import Foundation + +extension RootViewPresenter { + func currentOrLastBlog() -> Blog? { + if let blog = currentlyVisibleBlog() { + return blog + } + let context = ContextManager.shared.mainContext + return Blog.lastUsedOrFirst(in: context) + } +} diff --git a/WordPress/Classes/System/RootViewPresenter.swift b/WordPress/Classes/System/RootViewPresenter.swift index 700a10f2db11..37c25fba90cc 100644 --- a/WordPress/Classes/System/RootViewPresenter.swift +++ b/WordPress/Classes/System/RootViewPresenter.swift @@ -43,13 +43,3 @@ protocol RootViewPresenter { func popNotificationsTabToRoot() } - -extension RootViewPresenter { - func currentOrLastBlog() -> Blog? { - if let blog = currentlyVisibleBlog() { - return blog - } - let context = ContextManager.shared.mainContext - return Blog.lastUsedOrFirst(in: context) - } -} diff --git a/WordPress/WordPress.xcodeproj/project.pbxproj b/WordPress/WordPress.xcodeproj/project.pbxproj index 980493893d6b..d806027f84be 100644 --- a/WordPress/WordPress.xcodeproj/project.pbxproj +++ b/WordPress/WordPress.xcodeproj/project.pbxproj @@ -1568,6 +1568,8 @@ 803BB984295957F600B3F6D6 /* MySitesCoordinator+RootViewPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803BB982295957F600B3F6D6 /* MySitesCoordinator+RootViewPresenter.swift */; }; 803BB986295A873800B3F6D6 /* RootViewPresenter+MeNavigation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803BB985295A873800B3F6D6 /* RootViewPresenter+MeNavigation.swift */; }; 803BB987295A873800B3F6D6 /* RootViewPresenter+MeNavigation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803BB985295A873800B3F6D6 /* RootViewPresenter+MeNavigation.swift */; }; + 803BB989295B80D300B3F6D6 /* RootViewPresenter+EditorNavigation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803BB988295B80D300B3F6D6 /* RootViewPresenter+EditorNavigation.swift */; }; + 803BB98A295B80D300B3F6D6 /* RootViewPresenter+EditorNavigation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803BB988295B80D300B3F6D6 /* RootViewPresenter+EditorNavigation.swift */; }; 803C493B283A7C0C00003E9B /* QuickStartChecklistHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803C493A283A7C0C00003E9B /* QuickStartChecklistHeader.swift */; }; 803C493C283A7C0C00003E9B /* QuickStartChecklistHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803C493A283A7C0C00003E9B /* QuickStartChecklistHeader.swift */; }; 803C493E283A7C2200003E9B /* QuickStartChecklistHeader.xib in Resources */ = {isa = PBXBuildFile; fileRef = 803C493D283A7C2200003E9B /* QuickStartChecklistHeader.xib */; }; @@ -6890,6 +6892,7 @@ 803BB97F295957CF00B3F6D6 /* WPTabBarController+RootViewPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WPTabBarController+RootViewPresenter.swift"; sourceTree = ""; }; 803BB982295957F600B3F6D6 /* MySitesCoordinator+RootViewPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MySitesCoordinator+RootViewPresenter.swift"; sourceTree = ""; }; 803BB985295A873800B3F6D6 /* RootViewPresenter+MeNavigation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "RootViewPresenter+MeNavigation.swift"; sourceTree = ""; }; + 803BB988295B80D300B3F6D6 /* RootViewPresenter+EditorNavigation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "RootViewPresenter+EditorNavigation.swift"; sourceTree = ""; }; 803C493A283A7C0C00003E9B /* QuickStartChecklistHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuickStartChecklistHeader.swift; sourceTree = ""; }; 803C493D283A7C2200003E9B /* QuickStartChecklistHeader.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = QuickStartChecklistHeader.xib; sourceTree = ""; }; 803D90F6292F0188007CC0D0 /* JetpackRedirector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JetpackRedirector.swift; sourceTree = ""; }; @@ -12524,6 +12527,7 @@ 803BB9782959543D00B3F6D6 /* RootViewControllerCoordinator.swift */, 803BB97B2959559500B3F6D6 /* RootViewPresenter.swift */, 803BB985295A873800B3F6D6 /* RootViewPresenter+MeNavigation.swift */, + 803BB988295B80D300B3F6D6 /* RootViewPresenter+EditorNavigation.swift */, 803BB97F295957CF00B3F6D6 /* WPTabBarController+RootViewPresenter.swift */, 803BB982295957F600B3F6D6 /* MySitesCoordinator+RootViewPresenter.swift */, ); @@ -20886,6 +20890,7 @@ 5903AE1B19B60A98009D5354 /* WPButtonForNavigationBar.m in Sources */, 1717139F265FE59700F3A022 /* ButtonStyles.swift in Sources */, C3FF78E828354A91008FA600 /* SiteDesignSectionLoader.swift in Sources */, + 803BB989295B80D300B3F6D6 /* RootViewPresenter+EditorNavigation.swift in Sources */, B58C4ECA207C5E1A00E32E4D /* UIImage+Assets.swift in Sources */, E684383E221F535900752258 /* LoadMoreCounter.swift in Sources */, E6158ACA1ECDF518005FA441 /* LoginEpilogueUserInfo.swift in Sources */, @@ -23675,6 +23680,7 @@ FABB23DC2602FC2C00C8785C /* JetpackScanThreatCell.swift in Sources */, FABB23DD2602FC2C00C8785C /* SiteSegmentsCell.swift in Sources */, FABB23DE2602FC2C00C8785C /* SharingConnectionsViewController.m in Sources */, + 803BB98A295B80D300B3F6D6 /* RootViewPresenter+EditorNavigation.swift in Sources */, FABB23DF2602FC2C00C8785C /* BlogSelectorViewController.m in Sources */, FABB23E02602FC2C00C8785C /* HomepageSettingsViewController.swift in Sources */, 93E6336D272AF504009DACF8 /* LoginEpilogueDividerView.swift in Sources */, From 51a698253f804b8ae8e44daa68b2f1981bd98652 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Tue, 27 Dec 2022 22:07:19 +0200 Subject: [PATCH 23/47] Refactor: move showPostTab functions to `RootViewPresenter` --- .../RootViewPresenter+EditorNavigation.swift | 46 +++++++++++++++ .../ViewRelated/System/WPTabBarController.h | 4 -- .../ViewRelated/System/WPTabBarController.m | 57 ------------------- 3 files changed, 46 insertions(+), 61 deletions(-) diff --git a/WordPress/Classes/System/RootViewPresenter+EditorNavigation.swift b/WordPress/Classes/System/RootViewPresenter+EditorNavigation.swift index f3cdd2011349..110b2008a155 100644 --- a/WordPress/Classes/System/RootViewPresenter+EditorNavigation.swift +++ b/WordPress/Classes/System/RootViewPresenter+EditorNavigation.swift @@ -8,4 +8,50 @@ extension RootViewPresenter { let context = ContextManager.shared.mainContext return Blog.lastUsedOrFirst(in: context) } + + func showPostTab() { + showPostTab(completion: nil) + } + + func showPostTab(completion afterDismiss: (() -> Void)?) { + let context = ContextManager.shared.mainContext + // Ignore taps on the post tab and instead show the modal. + if Blog.count(in: context) == 0 { + mySitesCoordinator.showAddNewSite() + } else { + showPostTab(animated: true, toMedia: false, completion: afterDismiss) + } + } + + func showPostTab(for blog: Blog) { + let context = ContextManager.shared.mainContext + if Blog.count(in: context) == 0 { + mySitesCoordinator.showAddNewSite() + } else { + showPostTab(animated: true, toMedia: false, blog: blog) + } + } + + func showPostTab(animated: Bool, + toMedia openToMedia: Bool, + blog: Blog? = nil, + completion afterDismiss: (() -> Void)? = nil) { + if rootViewController.presentedViewController != nil { + rootViewController.dismiss(animated: false) + } + + guard let blog = blog ?? currentOrLastBlog() else { + return + } + + let editor = EditPostViewController(blog: blog) + editor.modalPresentationStyle = .fullScreen + editor.showImmediately = !animated + editor.openWithMediaPicker = openToMedia + editor.afterDismiss = afterDismiss + + let properties = [WPAppAnalyticsKeyTapSource: "create_button", WPAppAnalyticsKeyPostType: "post"] + WPAppAnalytics.track(.editorCreatedPost, withProperties: properties, with: blog) + rootViewController.present(editor, animated: false) + } } diff --git a/WordPress/Classes/ViewRelated/System/WPTabBarController.h b/WordPress/Classes/ViewRelated/System/WPTabBarController.h index fe8ffed2894c..d3337291a2de 100644 --- a/WordPress/Classes/ViewRelated/System/WPTabBarController.h +++ b/WordPress/Classes/ViewRelated/System/WPTabBarController.h @@ -37,11 +37,7 @@ extern NSNotificationName const WPTabBarHeightChangedNotification; - (void)showMySitesTab; - (void)showReaderTab; - (void)resetReaderTab; -- (void)showPostTab; -- (void)showPostTabWithCompletion:(void (^)(void))afterDismiss; -- (void)showPostTabForBlog:(Blog *)blog; - (void)showNotificationsTab; -- (void)showPostTabAnimated:(BOOL)animated toMedia:(BOOL)openToMedia; - (void)showReaderTabForPost:(NSNumber *)postId onBlog:(NSNumber *)blogId; - (void)reloadSplitViewControllers; diff --git a/WordPress/Classes/ViewRelated/System/WPTabBarController.m b/WordPress/Classes/ViewRelated/System/WPTabBarController.m index 389f37accf97..38e4f1c98da2 100644 --- a/WordPress/Classes/ViewRelated/System/WPTabBarController.m +++ b/WordPress/Classes/ViewRelated/System/WPTabBarController.m @@ -315,68 +315,11 @@ - (void)showReaderTab [self setSelectedIndex:WPTabReader]; } -- (void)showPostTab -{ - [self showPostTabWithCompletion:nil]; -} - -- (void)showPostTabWithCompletion:(void (^)(void))afterDismiss -{ - NSManagedObjectContext *context = [[ContextManager sharedInstance] mainContext]; - // Ignore taps on the post tab and instead show the modal. - if ([Blog countInContext:context] == 0) { - [self.mySitesCoordinator showAddNewSite]; - } else { - [self showPostTabAnimated:true toMedia:false blog:nil afterDismiss:afterDismiss]; - } -} - -- (void)showPostTabForBlog:(Blog *)blog -{ - NSManagedObjectContext *context = [[ContextManager sharedInstance] mainContext]; - if ([Blog countInContext:context] == 0) { - [self.mySitesCoordinator showAddNewSite]; - } else { - [self showPostTabAnimated:YES toMedia:NO blog:blog]; - } -} - - (void)showNotificationsTab { [self setSelectedIndex:WPTabNotifications]; } -- (void)showPostTabAnimated:(BOOL)animated toMedia:(BOOL)openToMedia -{ - [self showPostTabAnimated:animated toMedia:openToMedia blog:nil]; -} - -- (void)showPostTabAnimated:(BOOL)animated toMedia:(BOOL)openToMedia blog:(Blog *)blog -{ - [self showPostTabAnimated:animated toMedia:openToMedia blog:blog afterDismiss:nil]; -} - -- (void)showPostTabAnimated:(BOOL)animated toMedia:(BOOL)openToMedia blog:(Blog *)blog afterDismiss:(void (^)(void))afterDismiss -{ - if (self.presentedViewController) { - [self dismissViewControllerAnimated:NO completion:nil]; - } - - if (!blog) { -// blog = [self currentOrLastBlog]; - } - - EditPostViewController* editor = [[EditPostViewController alloc] initWithBlog:blog]; - editor.modalPresentationStyle = UIModalPresentationFullScreen; - editor.showImmediately = !animated; - editor.openWithMediaPicker = openToMedia; - editor.afterDismiss = afterDismiss; - - NSString *tapSource = @"create_button"; - [WPAppAnalytics track:WPAnalyticsStatEditorCreatedPost withProperties:@{ WPAppAnalyticsKeyTapSource: tapSource, WPAppAnalyticsKeyPostType: @"post"} withBlog:blog]; - [self presentViewController:editor animated:NO completion:nil]; -} - - (void)showReaderTabForPost:(NSNumber *)postId onBlog:(NSNumber *)blogId { [self showReaderTab]; From 2ecdd7b0c33b0057933cb075a1eefc49410e71eb Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Tue, 27 Dec 2022 22:08:45 +0200 Subject: [PATCH 24/47] Refactor: move ShowTab functions to `RootViewPresenter` --- .../RootViewPresenter+EditorNavigation.swift | 78 ++++++++++++++++++ .../Classes/System/RootViewPresenter.swift | 2 +- ...WPTabBarController+RootViewPresenter.swift | 4 + .../System/WPTabBarController+ShowTab.swift | 81 ------------------- 4 files changed, 83 insertions(+), 82 deletions(-) diff --git a/WordPress/Classes/System/RootViewPresenter+EditorNavigation.swift b/WordPress/Classes/System/RootViewPresenter+EditorNavigation.swift index 110b2008a155..3e0e52a0a5f7 100644 --- a/WordPress/Classes/System/RootViewPresenter+EditorNavigation.swift +++ b/WordPress/Classes/System/RootViewPresenter+EditorNavigation.swift @@ -54,4 +54,82 @@ extension RootViewPresenter { WPAppAnalytics.track(.editorCreatedPost, withProperties: properties, with: blog) rootViewController.present(editor, animated: false) } + + func showPageEditor(forBlog: Blog? = nil) { + showPageEditor(blog: forBlog) + } + + func showStoryEditor(forBlog: Blog? = nil) { + showStoryEditor(blog: forBlog) + } + + /// Show the page tab + /// - Parameter blog: Blog to a add a page to. Uses the current or last blog if not provided + func showPageEditor(blog inBlog: Blog? = nil, title: String? = nil, content: String? = nil, source: String = "create_button") { + + // If we are already showing a view controller, dismiss and show the editor afterward + guard rootViewController.presentedViewController == nil else { + rootViewController.dismiss(animated: true) { [weak self] in + self?.showPageEditor(blog: inBlog, title: title, content: content, source: source) + } + return + } + guard let blog = inBlog ?? self.currentOrLastBlog() else { return } + guard content == nil else { + showEditor(blog: blog, title: title, content: content, templateKey: nil) + return + } + + let blogID = blog.dotComID?.intValue ?? 0 as Any + WPAnalytics.track(WPAnalyticsEvent.editorCreatedPage, properties: [WPAppAnalyticsKeyTapSource: source, WPAppAnalyticsKeyBlogID: blogID, WPAppAnalyticsKeyPostType: "page"]) + + PageCoordinator.showLayoutPickerIfNeeded(from: rootViewController, forBlog: blog) { [weak self] (selectedLayout) in + self?.showEditor(blog: blog, title: selectedLayout?.title, content: selectedLayout?.content, templateKey: selectedLayout?.slug) + } + } + + private func showEditor(blog: Blog, title: String?, content: String?, templateKey: String?) { + let editorViewController = EditPageViewController(blog: blog, postTitle: title, content: content, appliedTemplate: templateKey) + rootViewController.present(editorViewController, animated: false) + } + + /// Show the story editor + /// - Parameter blog: Blog to a add a story to. Uses the current or last blog if not provided + func showStoryEditor(blog inBlog: Blog? = nil, title: String? = nil, content: String? = nil, source: String = "create_button") { + // If we are already showing a view controller, dismiss and show the editor afterward + guard rootViewController.presentedViewController == nil else { + rootViewController.dismiss(animated: true) { [weak self] in + self?.showStoryEditor(blog: inBlog, title: title, content: content, source: source) + } + return + } + + if UserPersistentStoreFactory.instance().storiesIntroWasAcknowledged == false { + // Show Intro screen + let intro = StoriesIntroViewController(continueTapped: { [weak self] in + UserPersistentStoreFactory.instance().storiesIntroWasAcknowledged = true + self?.showStoryEditor() + }, openURL: { [weak self] url in + let webViewController = WebViewControllerFactory.controller(url: url, source: "show_story_example") + let navController = UINavigationController(rootViewController: webViewController) + self?.rootViewController.presentedViewController?.present(navController, animated: true) + }) + + rootViewController.present(intro, animated: true, completion: { + StoriesIntroViewController.trackShown() + }) + } else { + guard let blog = inBlog ?? self.currentOrLastBlog() else { return } + let blogID = blog.dotComID?.intValue ?? 0 as Any + + WPAppAnalytics.track(.editorCreatedPost, withProperties: [WPAppAnalyticsKeyTapSource: source, WPAppAnalyticsKeyBlogID: blogID, WPAppAnalyticsKeyEditorSource: "stories", WPAppAnalyticsKeyPostType: "post"]) + + do { + let controller = try StoryEditor.editor(blog: blog, context: ContextManager.shared.mainContext, updated: {_ in }) + rootViewController.present(controller, animated: true, completion: nil) + } catch { + assertionFailure("Story editor should not fail since this button is hidden on iPads.") + } + } + } } diff --git a/WordPress/Classes/System/RootViewPresenter.swift b/WordPress/Classes/System/RootViewPresenter.swift index 37c25fba90cc..2f11e6a00293 100644 --- a/WordPress/Classes/System/RootViewPresenter.swift +++ b/WordPress/Classes/System/RootViewPresenter.swift @@ -1,6 +1,6 @@ import Foundation -protocol RootViewPresenter { +protocol RootViewPresenter: AnyObject { // MARK: General diff --git a/WordPress/Classes/System/WPTabBarController+RootViewPresenter.swift b/WordPress/Classes/System/WPTabBarController+RootViewPresenter.swift index ba9921fc8749..c37dd046c381 100644 --- a/WordPress/Classes/System/WPTabBarController+RootViewPresenter.swift +++ b/WordPress/Classes/System/WPTabBarController+RootViewPresenter.swift @@ -10,6 +10,10 @@ extension WPTabBarController: RootViewPresenter { return self } + func showBlogDetails(for blog: Blog) { + mySitesCoordinator.showBlogDetails(for: blog) + } + func getMeScenePresenter() -> ScenePresenter { meScenePresenter } diff --git a/WordPress/Classes/ViewRelated/System/WPTabBarController+ShowTab.swift b/WordPress/Classes/ViewRelated/System/WPTabBarController+ShowTab.swift index 1d7b2558bd31..820f713f8a89 100644 --- a/WordPress/Classes/ViewRelated/System/WPTabBarController+ShowTab.swift +++ b/WordPress/Classes/ViewRelated/System/WPTabBarController+ShowTab.swift @@ -1,84 +1,3 @@ extension WPTabBarController { - func showBlogDetails(for blog: Blog) { - mySitesCoordinator.showBlogDetails(for: blog) - } - - @objc func showPageEditor(forBlog: Blog? = nil) { - showPageEditor(blog: forBlog) - } - - @objc func showStoryEditor(forBlog: Blog? = nil) { - showStoryEditor(blog: forBlog) - } - - /// Show the page tab - /// - Parameter blog: Blog to a add a page to. Uses the current or last blog if not provided - func showPageEditor(blog inBlog: Blog? = nil, title: String? = nil, content: String? = nil, source: String = "create_button") { - - // If we are already showing a view controller, dismiss and show the editor afterward - guard presentedViewController == nil else { - dismiss(animated: true) { [weak self] in - self?.showPageEditor(blog: inBlog, title: title, content: content, source: source) - } - return - } - guard let blog = inBlog ?? self.currentOrLastBlog() else { return } - guard content == nil else { - showEditor(blog: blog, title: title, content: content, templateKey: nil) - return - } - - let blogID = blog.dotComID?.intValue ?? 0 as Any - WPAnalytics.track(WPAnalyticsEvent.editorCreatedPage, properties: [WPAppAnalyticsKeyTapSource: source, WPAppAnalyticsKeyBlogID: blogID, WPAppAnalyticsKeyPostType: "page"]) - - PageCoordinator.showLayoutPickerIfNeeded(from: self, forBlog: blog) { [weak self] (selectedLayout) in - self?.showEditor(blog: blog, title: selectedLayout?.title, content: selectedLayout?.content, templateKey: selectedLayout?.slug) - } - } - - private func showEditor(blog: Blog, title: String?, content: String?, templateKey: String?) { - let editorViewController = EditPageViewController(blog: blog, postTitle: title, content: content, appliedTemplate: templateKey) - present(editorViewController, animated: false) - } - - /// Show the story editor - /// - Parameter blog: Blog to a add a story to. Uses the current or last blog if not provided - func showStoryEditor(blog inBlog: Blog? = nil, title: String? = nil, content: String? = nil, source: String = "create_button") { - // If we are already showing a view controller, dismiss and show the editor afterward - guard presentedViewController == nil else { - dismiss(animated: true) { [weak self] in - self?.showStoryEditor(blog: inBlog, title: title, content: content, source: source) - } - return - } - - if UserPersistentStoreFactory.instance().storiesIntroWasAcknowledged == false { - // Show Intro screen - let intro = StoriesIntroViewController(continueTapped: { [weak self] in - UserPersistentStoreFactory.instance().storiesIntroWasAcknowledged = true - self?.showStoryEditor() - }, openURL: { [weak self] url in - let webViewController = WebViewControllerFactory.controller(url: url, source: "show_story_example") - let navController = UINavigationController(rootViewController: webViewController) - self?.presentedViewController?.present(navController, animated: true) - }) - - present(intro, animated: true, completion: { - StoriesIntroViewController.trackShown() - }) - } else { - guard let blog = inBlog ?? self.currentOrLastBlog() else { return } - let blogID = blog.dotComID?.intValue ?? 0 as Any - - WPAppAnalytics.track(.editorCreatedPost, withProperties: [WPAppAnalyticsKeyTapSource: source, WPAppAnalyticsKeyBlogID: blogID, WPAppAnalyticsKeyEditorSource: "stories", WPAppAnalyticsKeyPostType: "post"]) - - do { - let controller = try StoryEditor.editor(blog: blog, context: ContextManager.shared.mainContext, updated: {_ in }) - present(controller, animated: true, completion: nil) - } catch { - assertionFailure("Story editor should not fail since this button is hidden on iPads.") - } - } - } } From ffcac1808b838a6f1a23ea7c934151fd37731db2 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Tue, 27 Dec 2022 22:09:53 +0200 Subject: [PATCH 25/47] Remove: Unneeded `WPTabBarController+ShowTab` file --- .../ViewRelated/System/WPTabBarController+ShowTab.swift | 3 --- WordPress/WordPress.xcodeproj/project.pbxproj | 6 ------ 2 files changed, 9 deletions(-) delete mode 100644 WordPress/Classes/ViewRelated/System/WPTabBarController+ShowTab.swift diff --git a/WordPress/Classes/ViewRelated/System/WPTabBarController+ShowTab.swift b/WordPress/Classes/ViewRelated/System/WPTabBarController+ShowTab.swift deleted file mode 100644 index 820f713f8a89..000000000000 --- a/WordPress/Classes/ViewRelated/System/WPTabBarController+ShowTab.swift +++ /dev/null @@ -1,3 +0,0 @@ -extension WPTabBarController { - -} diff --git a/WordPress/WordPress.xcodeproj/project.pbxproj b/WordPress/WordPress.xcodeproj/project.pbxproj index d806027f84be..9989898a4b5d 100644 --- a/WordPress/WordPress.xcodeproj/project.pbxproj +++ b/WordPress/WordPress.xcodeproj/project.pbxproj @@ -3522,7 +3522,6 @@ F5D399302541F25B0058D0AB /* SheetActions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5D3992F2541F25B0058D0AB /* SheetActions.swift */; }; F5E032D6240889EB003AF350 /* CreateButtonCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5E032D5240889EB003AF350 /* CreateButtonCoordinator.swift */; }; F5E032DB24088F44003AF350 /* UIView+SpringAnimations.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5E032DA24088F44003AF350 /* UIView+SpringAnimations.swift */; }; - F5E032DF2408D1F1003AF350 /* WPTabBarController+ShowTab.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5E032DE2408D1F1003AF350 /* WPTabBarController+ShowTab.swift */; }; F5E032E62408D537003AF350 /* ActionSheetViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5E032E32408D537003AF350 /* ActionSheetViewController.swift */; }; F5E032E82408D537003AF350 /* BottomSheetPresentationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5E032E52408D537003AF350 /* BottomSheetPresentationController.swift */; }; F5E1577F25DE04E200EEEDFB /* GutenbergMediaFilesUploadProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5E1577E25DE04E200EEEDFB /* GutenbergMediaFilesUploadProcessor.swift */; }; @@ -4610,7 +4609,6 @@ FABB240A2602FC2C00C8785C /* Environment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E58879920FE8D9300DB6F80 /* Environment.swift */; }; FABB240B2602FC2C00C8785C /* AbstractPostListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 591232681CCEAA5100B86207 /* AbstractPostListViewController.swift */; }; FABB240C2602FC2C00C8785C /* ManagedAccountSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = E14200771C117A2E00B3B115 /* ManagedAccountSettings.swift */; }; - FABB240D2602FC2C00C8785C /* WPTabBarController+ShowTab.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5E032DE2408D1F1003AF350 /* WPTabBarController+ShowTab.swift */; }; FABB240E2602FC2C00C8785C /* Blog+Plans.swift in Sources */ = {isa = PBXBuildFile; fileRef = 401AC82622DD2387006D78D4 /* Blog+Plans.swift */; }; FABB240F2602FC2C00C8785C /* PostType.m in Sources */ = {isa = PBXBuildFile; fileRef = 08B6D6F11C8F7DCE0052C52B /* PostType.m */; }; FABB24102602FC2C00C8785C /* ThemeService.m in Sources */ = {isa = PBXBuildFile; fileRef = 59A9AB341B4C33A500A433DC /* ThemeService.m */; }; @@ -8692,7 +8690,6 @@ F5D3992F2541F25B0058D0AB /* SheetActions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SheetActions.swift; sourceTree = ""; }; F5E032D5240889EB003AF350 /* CreateButtonCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateButtonCoordinator.swift; sourceTree = ""; }; F5E032DA24088F44003AF350 /* UIView+SpringAnimations.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+SpringAnimations.swift"; sourceTree = ""; }; - F5E032DE2408D1F1003AF350 /* WPTabBarController+ShowTab.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WPTabBarController+ShowTab.swift"; sourceTree = ""; }; F5E032E32408D537003AF350 /* ActionSheetViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActionSheetViewController.swift; sourceTree = ""; }; F5E032E52408D537003AF350 /* BottomSheetPresentationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BottomSheetPresentationController.swift; sourceTree = ""; }; F5E032EB240D49FF003AF350 /* ActionSheetComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionSheetComponent.swift; sourceTree = ""; }; @@ -12917,7 +12914,6 @@ 3101866A1A373B01008F7DF6 /* WPTabBarController.m */, 17A28DC2205001A900EA6D9E /* FilterTabBar.swift */, D8B9B58E204F4EA1003C6042 /* NetworkAware.swift */, - F5E032DE2408D1F1003AF350 /* WPTabBarController+ShowTab.swift */, 43DDFE8B21715ADD008BE72F /* WPTabBarController+QuickStart.swift */, 57BAD50B225CCE1A006139EC /* WPTabBarController+Swift.swift */, ); @@ -21034,7 +21030,6 @@ 7E58879A20FE8D9300DB6F80 /* Environment.swift in Sources */, 591232691CCEAA5100B86207 /* AbstractPostListViewController.swift in Sources */, E14200781C117A2E00B3B115 /* ManagedAccountSettings.swift in Sources */, - F5E032DF2408D1F1003AF350 /* WPTabBarController+ShowTab.swift in Sources */, 401AC82722DD2387006D78D4 /* Blog+Plans.swift in Sources */, 08B6D6F31C8F7DCE0052C52B /* PostType.m in Sources */, FE06AC8526C3C2F800B69DE4 /* ShareAppTextActivityItemSource.swift in Sources */, @@ -23733,7 +23728,6 @@ FABB240B2602FC2C00C8785C /* AbstractPostListViewController.swift in Sources */, FABB240C2602FC2C00C8785C /* ManagedAccountSettings.swift in Sources */, FA88EAD6260AE69C001D232B /* TemplatePreviewViewController.swift in Sources */, - FABB240D2602FC2C00C8785C /* WPTabBarController+ShowTab.swift in Sources */, F41BDD7B29114E2400B7F2B0 /* MigrationStep.swift in Sources */, FABB240E2602FC2C00C8785C /* Blog+Plans.swift in Sources */, FABB240F2602FC2C00C8785C /* PostType.m in Sources */, From f17c60f4423257a06ab4a4379f3b339c98278632 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Tue, 27 Dec 2022 22:11:54 +0200 Subject: [PATCH 26/47] Update: Replace usages of `WPTabBar.sharedInstance` in 3D touch handler --- .../System/3DTouch/WP3DTouchShortcutHandler.swift | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/WordPress/Classes/System/3DTouch/WP3DTouchShortcutHandler.swift b/WordPress/Classes/System/3DTouch/WP3DTouchShortcutHandler.swift index 805aa52973d6..ab56fa5a3fce 100644 --- a/WordPress/Classes/System/3DTouch/WP3DTouchShortcutHandler.swift +++ b/WordPress/Classes/System/3DTouch/WP3DTouchShortcutHandler.swift @@ -25,7 +25,7 @@ open class WP3DTouchShortcutHandler: NSObject { @objc static let applicationShortcutUserInfoIconKey = "applicationShortcutUserInfoIconKey" @objc open func handleShortcutItem(_ shortcutItem: UIApplicationShortcutItem) -> Bool { - let tabBarController: WPTabBarController = WPTabBarController.sharedInstance() + let rootViewPresenter = RootViewControllerCoordinator.sharedPresenter switch shortcutItem.type { case ShortcutIdentifier.LogIn.type: @@ -33,23 +33,23 @@ open class WP3DTouchShortcutHandler: NSObject { return true case ShortcutIdentifier.NewPost.type: WPAnalytics.track(.shortcutNewPost) - tabBarController.showPostTab(animated: false, toMedia: false) + rootViewPresenter.showPostTab(animated: false, toMedia: false) return true case ShortcutIdentifier.NewPhotoPost.type: WPAnalytics.track(.shortcutNewPhotoPost) - tabBarController.showPostTab(animated: false, toMedia: true) + rootViewPresenter.showPostTab(animated: false, toMedia: true) return true case ShortcutIdentifier.Stats.type: WPAnalytics.track(.shortcutStats) clearCurrentViewController() if let mainBlog = Blog.lastUsedOrFirst(in: ContextManager.sharedInstance().mainContext) { - tabBarController.mySitesCoordinator.showStats(for: mainBlog) + rootViewPresenter.mySitesCoordinator.showStats(for: mainBlog) } return true case ShortcutIdentifier.Notifications.type: WPAnalytics.track(.shortcutNotifications) clearCurrentViewController() - tabBarController.showNotificationsTab() + rootViewPresenter.showNotificationsTab() return true default: return false From 77fb5c69ec649b1271f53dbb3a978af34f2e18e3 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Tue, 27 Dec 2022 22:23:29 +0200 Subject: [PATCH 27/47] Update: replace editor navigation usages of `WPTabBar.sharedInstance` --- WordPress/Classes/System/WordPressAppDelegate+openURL.swift | 2 +- WordPress/Classes/Utility/Universal Links/Route+Page.swift | 4 ++-- WordPress/Classes/Utility/Universal Links/Routes+Post.swift | 4 ++-- .../Stats Revamp v2/StatsRevampV2IntroductionPresenter.swift | 2 +- .../Controllers/NotificationsViewController.swift | 2 +- .../Stats/Insights/SiteStatsInsightsTableViewController.swift | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/WordPress/Classes/System/WordPressAppDelegate+openURL.swift b/WordPress/Classes/System/WordPressAppDelegate+openURL.swift index 0bcdd43f007f..e0af9bfa4970 100644 --- a/WordPress/Classes/System/WordPressAppDelegate+openURL.swift +++ b/WordPress/Classes/System/WordPressAppDelegate+openURL.swift @@ -200,7 +200,7 @@ import AutomatticTracks // Should more formats be accepted be accepted in the future, this line would have to be expanded to accomodate it. let contentEscaped = contentRaw.escapeHtmlNamedEntities() - WPTabBarController.sharedInstance().showPageEditor(blog: blog, title: title, content: contentEscaped, source: "url_scheme") + RootViewControllerCoordinator.sharedPresenter.showPageEditor(blog: blog, title: title, content: contentEscaped, source: "url_scheme") return true } diff --git a/WordPress/Classes/Utility/Universal Links/Route+Page.swift b/WordPress/Classes/Utility/Universal Links/Route+Page.swift index 54c151982e14..a379e0b37934 100644 --- a/WordPress/Classes/Utility/Universal Links/Route+Page.swift +++ b/WordPress/Classes/Utility/Universal Links/Route+Page.swift @@ -15,9 +15,9 @@ struct NewPageForSiteRoute: Route { struct NewPageNavigationAction: NavigationAction { func perform(_ values: [String: String], source: UIViewController? = nil, router: LinkRouter) { if let blog = blog(from: values) { - WPTabBarController.sharedInstance().showPageEditor(forBlog: blog) + RootViewControllerCoordinator.sharedPresenter.showPageEditor(forBlog: blog) } else { - WPTabBarController.sharedInstance().showPageEditor() + RootViewControllerCoordinator.sharedPresenter.showPageEditor() } } } diff --git a/WordPress/Classes/Utility/Universal Links/Routes+Post.swift b/WordPress/Classes/Utility/Universal Links/Routes+Post.swift index 7084b136ecc2..6f2eaed5bc58 100644 --- a/WordPress/Classes/Utility/Universal Links/Routes+Post.swift +++ b/WordPress/Classes/Utility/Universal Links/Routes+Post.swift @@ -15,9 +15,9 @@ struct NewPostForSiteRoute: Route { struct NewPostNavigationAction: NavigationAction { func perform(_ values: [String: String], source: UIViewController? = nil, router: LinkRouter) { if let blog = blog(from: values) { - WPTabBarController.sharedInstance().showPostTab(for: blog) + RootViewControllerCoordinator.sharedPresenter.showPostTab(for: blog) } else { - WPTabBarController.sharedInstance().showPostTab() + RootViewControllerCoordinator.sharedPresenter.showPostTab() } } } diff --git a/WordPress/Classes/ViewRelated/Feature Introduction/Stats Revamp v2/StatsRevampV2IntroductionPresenter.swift b/WordPress/Classes/ViewRelated/Feature Introduction/Stats Revamp v2/StatsRevampV2IntroductionPresenter.swift index 7b5fad17673e..7ab8d51baa0a 100644 --- a/WordPress/Classes/ViewRelated/Feature Introduction/Stats Revamp v2/StatsRevampV2IntroductionPresenter.swift +++ b/WordPress/Classes/ViewRelated/Feature Introduction/Stats Revamp v2/StatsRevampV2IntroductionPresenter.swift @@ -40,7 +40,7 @@ class StatsRevampV2IntroductionPresenter: NSObject { func primaryButtonSelected() { presentingViewController?.dismiss(animated: true) - guard let blog = WPTabBarController.sharedInstance().currentOrLastBlog() else { + guard let blog = RootViewControllerCoordinator.sharedPresenter.currentOrLastBlog() else { return } diff --git a/WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationsViewController.swift b/WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationsViewController.swift index 26a1d9dc55ce..5f2f0951cc43 100644 --- a/WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationsViewController.swift +++ b/WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationsViewController.swift @@ -1645,7 +1645,7 @@ extension NotificationsViewController: NoResultsViewControllerDelegate { RootViewControllerCoordinator.sharedPresenter.showReaderTab() case .unread: WPAnalytics.track(.notificationsTappedNewPost, withProperties: properties) - WPTabBarController.sharedInstance().showPostTab() + RootViewControllerCoordinator.sharedPresenter.showPostTab() } } } diff --git a/WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsInsightsTableViewController.swift b/WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsInsightsTableViewController.swift index 12a2a13b1c3e..086ddaa4192a 100644 --- a/WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsInsightsTableViewController.swift +++ b/WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsInsightsTableViewController.swift @@ -359,7 +359,7 @@ extension SiteStatsInsightsTableViewController: SiteStatsInsightsDelegate { } func showCreatePost() { - WPTabBarController.sharedInstance().showPostTab { [weak self] in + RootViewControllerCoordinator.sharedPresenter.showPostTab { [weak self] in self?.refreshInsights() } } From 1119446c5f2b605c6bdfe3b9988420e03d2049a7 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Tue, 27 Dec 2022 22:59:13 +0200 Subject: [PATCH 28/47] Update: replace usages of `tabBarController` with RootViewPresenter --- .../Posts/DashboardEmptyPostsCardCell.swift | 4 ++-- .../My Site/MySiteViewController+FAB.swift | 20 +++++++++---------- ...ySiteViewController+OnboardingPrompt.swift | 6 +++--- .../Post/PostListViewController.swift | 3 ++- 4 files changed, 17 insertions(+), 16 deletions(-) diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Posts/DashboardEmptyPostsCardCell.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Posts/DashboardEmptyPostsCardCell.swift index c8d036bacbeb..1db34d4b364f 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Posts/DashboardEmptyPostsCardCell.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Posts/DashboardEmptyPostsCardCell.swift @@ -150,8 +150,8 @@ extension DashboardEmptyPostsCardCell { private extension DashboardEmptyPostsCardCell { func presentEditor() { BlogDashboardAnalytics.shared.track(.dashboardCardItemTapped, properties: ["type": "post", "sub_type": cardType?.rawValue ?? ""]) - let controller = viewController?.tabBarController as? WPTabBarController - controller?.showPostTab() + let presenter = RootViewControllerCoordinator.sharedPresenter + presenter.showPostTab() } } diff --git a/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController+FAB.swift b/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController+FAB.swift index 5d6efbbafa33..6d4abc9a29f5 100644 --- a/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController+FAB.swift +++ b/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController+FAB.swift @@ -5,23 +5,23 @@ extension MySiteViewController { /// - Returns: CreateButtonCoordinator with new post, page, and story actions. @objc func makeCreateButtonCoordinator() -> CreateButtonCoordinator { - let newPage = { [weak self] in - let controller = self?.tabBarController as? WPTabBarController - let blog = controller?.currentOrLastBlog() - controller?.showPageEditor(forBlog: blog) + let newPage = { + let presenter = RootViewControllerCoordinator.sharedPresenter + let blog = presenter.currentOrLastBlog() + presenter.showPageEditor(forBlog: blog) } let newPost = { [weak self] in - let controller = self?.tabBarController as? WPTabBarController - controller?.showPostTab(completion: { + let presenter = RootViewControllerCoordinator.sharedPresenter + presenter.showPostTab(completion: { self?.startAlertTimer() }) } - let newStory = { [weak self] in - let controller = self?.tabBarController as? WPTabBarController - let blog = controller?.currentOrLastBlog() - controller?.showStoryEditor(forBlog: blog) + let newStory = { + let presenter = RootViewControllerCoordinator.sharedPresenter + let blog = presenter.currentOrLastBlog() + presenter.showStoryEditor(forBlog: blog) } let source = "my_site" diff --git a/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController+OnboardingPrompt.swift b/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController+OnboardingPrompt.swift index 3792e3fd036b..1eb428348324 100644 --- a/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController+OnboardingPrompt.swift +++ b/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController+OnboardingPrompt.swift @@ -21,9 +21,9 @@ extension MySiteViewController { } case .writing: // Open the editor - let controller = tabBarController as? WPTabBarController - controller?.showPostTab(completion: { - self.startAlertTimer() + let presenter = RootViewControllerCoordinator.sharedPresenter + presenter.showPostTab(completion: { [weak self] in + self?.startAlertTimer() }) case .showMeAround: diff --git a/WordPress/Classes/ViewRelated/Post/PostListViewController.swift b/WordPress/Classes/ViewRelated/Post/PostListViewController.swift index a39803d86a54..7dba07267191 100644 --- a/WordPress/Classes/ViewRelated/Post/PostListViewController.swift +++ b/WordPress/Classes/ViewRelated/Post/PostListViewController.swift @@ -191,7 +191,8 @@ class PostListViewController: AbstractPostListViewController, UIViewControllerRe guard let self = self else { return } - (self.tabBarController as? WPTabBarController)?.showStoryEditor(blog: self.blog, title: nil, content: nil) + let presenter = RootViewControllerCoordinator.sharedPresenter + presenter.showStoryEditor(blog: self.blog, title: nil, content: nil) }, source: Constants.source), at: 0) } return CreateButtonCoordinator(self, actions: actions, source: Constants.source, blog: blog) From fe3bd344c9d8567ba91e0f6e46a6a07e8c048e00 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Wed, 28 Dec 2022 00:14:36 +0200 Subject: [PATCH 29/47] Refactor: move whats new logic to `RootViewControllerCoordinator` --- .../System/RootViewControllerCoordinator.swift | 6 ++++++ .../Blog/My Site/MySiteViewController.swift | 2 +- .../Me/App Settings/AppSettingsViewController.swift | 4 ++-- .../Controllers/NotificationsViewController.swift | 2 +- .../Tab Navigation/ReaderTabViewController.swift | 2 +- .../Classes/ViewRelated/System/WPTabBarController.h | 1 - .../Classes/ViewRelated/System/WPTabBarController.m | 10 ---------- ...=> RootViewControllerCoordinator+WhatIsNew.swift} | 2 +- WordPress/WordPress.xcodeproj/project.pbxproj | 12 ++++++------ 9 files changed, 18 insertions(+), 23 deletions(-) rename WordPress/Classes/ViewRelated/What's New/Dependency container/{WPTabBarController+WhatIsNew.swift => RootViewControllerCoordinator+WhatIsNew.swift} (97%) diff --git a/WordPress/Classes/System/RootViewControllerCoordinator.swift b/WordPress/Classes/System/RootViewControllerCoordinator.swift index 04fa755969b0..26b3870de282 100644 --- a/WordPress/Classes/System/RootViewControllerCoordinator.swift +++ b/WordPress/Classes/System/RootViewControllerCoordinator.swift @@ -8,6 +8,12 @@ class RootViewControllerCoordinator { static var sharedPresenter: RootViewPresenter { shared.rootViewPresenter } + + // MARK: Public Variables + + lazy var whatIsNewScenePresenter: ScenePresenter = { + return makeWhatIsNewPresenter() + }() // MARK: Private instance variables diff --git a/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift b/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift index 970bd024af68..b16d0c6c1c3d 100644 --- a/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift +++ b/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift @@ -190,7 +190,7 @@ class MySiteViewController: UIViewController, NoResultsViewHost { workaroundLargeTitleCollapseBug() if AppConfiguration.showsWhatIsNew { - WPTabBarController.sharedInstance().presentWhatIsNew(on: self) + RootViewControllerCoordinator.shared.presentWhatIsNew(on: self) } FancyAlertViewController.presentCustomAppIconUpgradeAlertIfNecessary(from: self) diff --git a/WordPress/Classes/ViewRelated/Me/App Settings/AppSettingsViewController.swift b/WordPress/Classes/ViewRelated/Me/App Settings/AppSettingsViewController.swift index c85e6b19485f..ba359f4635a5 100644 --- a/WordPress/Classes/ViewRelated/Me/App Settings/AppSettingsViewController.swift +++ b/WordPress/Classes/ViewRelated/Me/App Settings/AppSettingsViewController.swift @@ -312,7 +312,7 @@ class AppSettingsViewController: UITableViewController { return } self.tableView.deselectSelectedRowWithAnimation(true) - WPTabBarController.sharedInstance().presentWhatIsNew(on: self) + RootViewControllerCoordinator.shared.presentWhatIsNew(on: self) } } @@ -511,7 +511,7 @@ private extension AppSettingsViewController { rows.append(debugRow) } - if let presenter = WPTabBarController.sharedInstance().whatIsNewScenePresenter as? WhatIsNewScenePresenter, + if let presenter = RootViewControllerCoordinator.shared.whatIsNewScenePresenter as? WhatIsNewScenePresenter, presenter.versionHasAnnouncements, AppConfiguration.showsWhatIsNew { let whatIsNewRow = NavigationItemRow(title: AppConstants.Settings.whatIsNewTitle, diff --git a/WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationsViewController.swift b/WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationsViewController.swift index 5f2f0951cc43..c9433ab1ebcc 100644 --- a/WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationsViewController.swift +++ b/WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationsViewController.swift @@ -227,7 +227,7 @@ class NotificationsViewController: UIViewController, UIViewControllerRestoration defer { if AppConfiguration.showsWhatIsNew { - WPTabBarController.sharedInstance().presentWhatIsNew(on: self) + RootViewControllerCoordinator.shared.presentWhatIsNew(on: self) } } diff --git a/WordPress/Classes/ViewRelated/Reader/Tab Navigation/ReaderTabViewController.swift b/WordPress/Classes/ViewRelated/Reader/Tab Navigation/ReaderTabViewController.swift index a638d50444fa..1e3010c66c74 100644 --- a/WordPress/Classes/ViewRelated/Reader/Tab Navigation/ReaderTabViewController.swift +++ b/WordPress/Classes/ViewRelated/Reader/Tab Navigation/ReaderTabViewController.swift @@ -57,7 +57,7 @@ class ReaderTabViewController: UIViewController { ReaderTracker.shared.start(.main) if AppConfiguration.showsWhatIsNew { - WPTabBarController.sharedInstance().presentWhatIsNew(on: self) + RootViewControllerCoordinator.shared.presentWhatIsNew(on: self) } } diff --git a/WordPress/Classes/ViewRelated/System/WPTabBarController.h b/WordPress/Classes/ViewRelated/System/WPTabBarController.h index d3337291a2de..e876d4fb2def 100644 --- a/WordPress/Classes/ViewRelated/System/WPTabBarController.h +++ b/WordPress/Classes/ViewRelated/System/WPTabBarController.h @@ -27,7 +27,6 @@ extern NSNotificationName const WPTabBarHeightChangedNotification; @property (nonatomic, strong, readonly) ReaderCoordinator *readerCoordinator; @property (nonatomic, strong, readonly) BloggingPromptCoordinator *bloggingPromptCoordinator; @property (nonatomic, strong) id meScenePresenter; -@property (nonatomic, strong) id whatIsNewScenePresenter; @property (nonatomic, strong, readonly) ReaderTabViewModel *readerTabViewModel; + (instancetype)sharedInstance; diff --git a/WordPress/Classes/ViewRelated/System/WPTabBarController.m b/WordPress/Classes/ViewRelated/System/WPTabBarController.m index 38e4f1c98da2..d57947c251a5 100644 --- a/WordPress/Classes/ViewRelated/System/WPTabBarController.m +++ b/WordPress/Classes/ViewRelated/System/WPTabBarController.m @@ -569,16 +569,6 @@ - (UIPresentationController *)presentationControllerForPresentedViewController:( return nil; } -#pragma mark - What's New Presentation -- (id)whatIsNewScenePresenter -{ - if (_whatIsNewScenePresenter) { - return _whatIsNewScenePresenter; - } - self.whatIsNewScenePresenter = [self makeWhatIsNewPresenter]; - return _whatIsNewScenePresenter; -} - #pragma mark - Blogging Prompt - (BloggingPromptCoordinator *)bloggingPromptCoordinator { diff --git a/WordPress/Classes/ViewRelated/What's New/Dependency container/WPTabBarController+WhatIsNew.swift b/WordPress/Classes/ViewRelated/What's New/Dependency container/RootViewControllerCoordinator+WhatIsNew.swift similarity index 97% rename from WordPress/Classes/ViewRelated/What's New/Dependency container/WPTabBarController+WhatIsNew.swift rename to WordPress/Classes/ViewRelated/What's New/Dependency container/RootViewControllerCoordinator+WhatIsNew.swift index 0e2d798d8747..25db3bd994dd 100644 --- a/WordPress/Classes/ViewRelated/What's New/Dependency container/WPTabBarController+WhatIsNew.swift +++ b/WordPress/Classes/ViewRelated/What's New/Dependency container/RootViewControllerCoordinator+WhatIsNew.swift @@ -1,6 +1,6 @@ /// dependency container for the What's New / Feature Announcements scene -extension WPTabBarController { +extension RootViewControllerCoordinator { @objc func presentWhatIsNew(on viewController: UIViewController) { diff --git a/WordPress/WordPress.xcodeproj/project.pbxproj b/WordPress/WordPress.xcodeproj/project.pbxproj index 9989898a4b5d..7b8244738b3b 100644 --- a/WordPress/WordPress.xcodeproj/project.pbxproj +++ b/WordPress/WordPress.xcodeproj/project.pbxproj @@ -722,7 +722,7 @@ 3F662C4A24DC9FAC00CAEA95 /* WhatIsNewViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F662C4924DC9FAC00CAEA95 /* WhatIsNewViewController.swift */; }; 3F685B6A26D431FA001C6808 /* DomainSuggestionViewControllerWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FAF9CC426D03C7400268EA2 /* DomainSuggestionViewControllerWrapper.swift */; }; 3F6975FF242D941E001F1807 /* ReaderTabViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F6975FE242D941E001F1807 /* ReaderTabViewModel.swift */; }; - 3F6A7E92251BC1DC005B6A61 /* WPTabBarController+WhatIsNew.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F6A7E91251BC1DC005B6A61 /* WPTabBarController+WhatIsNew.swift */; }; + 3F6A7E92251BC1DC005B6A61 /* RootViewControllerCoordinator+WhatIsNew.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F6A7E91251BC1DC005B6A61 /* RootViewControllerCoordinator+WhatIsNew.swift */; }; 3F6AD0562502A91400080F3B /* AnnouncementsCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F6AD0552502A91400080F3B /* AnnouncementsCache.swift */; }; 3F6BC04B25B2474C007369D3 /* FeatureFlag.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1D690151F828FF000200E30 /* FeatureFlag.swift */; }; 3F6BC05C25B24773007369D3 /* FeatureFlagOverrideStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17A09B98238FE13B0022AE0D /* FeatureFlagOverrideStore.swift */; }; @@ -4711,7 +4711,7 @@ FABB24732602FC2C00C8785C /* PostTagService.m in Sources */ = {isa = PBXBuildFile; fileRef = 082AB9D81C4EEEF4000CA523 /* PostTagService.m */; }; FABB24742602FC2C00C8785C /* ReaderTabViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F6975FE242D941E001F1807 /* ReaderTabViewModel.swift */; }; FABB24752602FC2C00C8785C /* ReaderSearchSuggestionService.swift in Sources */ = {isa = PBXBuildFile; fileRef = E62079E01CF7A61200F5CD46 /* ReaderSearchSuggestionService.swift */; }; - FABB24762602FC2C00C8785C /* WPTabBarController+WhatIsNew.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F6A7E91251BC1DC005B6A61 /* WPTabBarController+WhatIsNew.swift */; }; + FABB24762602FC2C00C8785C /* RootViewControllerCoordinator+WhatIsNew.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F6A7E91251BC1DC005B6A61 /* RootViewControllerCoordinator+WhatIsNew.swift */; }; FABB24772602FC2C00C8785C /* CachedAnimatedImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF8A04DF1D9BFE7400523BC4 /* CachedAnimatedImageView.swift */; }; FABB24782602FC2C00C8785C /* AccountToAccount20to21.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5A6CEA519FA800E009F07DE /* AccountToAccount20to21.swift */; }; FABB24792602FC2C00C8785C /* AutoUploadMessageProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = F16C35DB23F3F78E00C81331 /* AutoUploadMessageProvider.swift */; }; @@ -6135,7 +6135,7 @@ 3F63B93B258179D100F581BE /* StatsWidgetEntry.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatsWidgetEntry.swift; sourceTree = ""; }; 3F662C4924DC9FAC00CAEA95 /* WhatIsNewViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WhatIsNewViewController.swift; sourceTree = ""; }; 3F6975FE242D941E001F1807 /* ReaderTabViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReaderTabViewModel.swift; sourceTree = ""; }; - 3F6A7E91251BC1DC005B6A61 /* WPTabBarController+WhatIsNew.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WPTabBarController+WhatIsNew.swift"; sourceTree = ""; }; + 3F6A7E91251BC1DC005B6A61 /* RootViewControllerCoordinator+WhatIsNew.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "RootViewControllerCoordinator+WhatIsNew.swift"; sourceTree = ""; }; 3F6AD0552502A91400080F3B /* AnnouncementsCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnnouncementsCache.swift; sourceTree = ""; }; 3F6DA04025646F96002AB88F /* HomeWidgetData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeWidgetData.swift; sourceTree = ""; }; 3F720C2028899DD900519938 /* JetpackBrandingVisibility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JetpackBrandingVisibility.swift; sourceTree = ""; }; @@ -10828,7 +10828,7 @@ 3F6A7E90251BC1C4005B6A61 /* Dependency container */ = { isa = PBXGroup; children = ( - 3F6A7E91251BC1DC005B6A61 /* WPTabBarController+WhatIsNew.swift */, + 3F6A7E91251BC1DC005B6A61 /* RootViewControllerCoordinator+WhatIsNew.swift */, ); path = "Dependency container"; sourceTree = ""; @@ -21166,7 +21166,7 @@ 082AB9D91C4EEEF4000CA523 /* PostTagService.m in Sources */, 3F6975FF242D941E001F1807 /* ReaderTabViewModel.swift in Sources */, E62079E11CF7A61200F5CD46 /* ReaderSearchSuggestionService.swift in Sources */, - 3F6A7E92251BC1DC005B6A61 /* WPTabBarController+WhatIsNew.swift in Sources */, + 3F6A7E92251BC1DC005B6A61 /* RootViewControllerCoordinator+WhatIsNew.swift in Sources */, 3FAE0652287C8FC500F46508 /* JPScrollViewDelegate.swift in Sources */, FF8A04E01D9BFE7400523BC4 /* CachedAnimatedImageView.swift in Sources */, B5A6CEA619FA800E009F07DE /* AccountToAccount20to21.swift in Sources */, @@ -23864,7 +23864,7 @@ FADFBD27265F580500039C41 /* MultilineButton.swift in Sources */, C71AF534281064DE00F9E99E /* OnboardingQuestionsCoordinator.swift in Sources */, FABB24752602FC2C00C8785C /* ReaderSearchSuggestionService.swift in Sources */, - FABB24762602FC2C00C8785C /* WPTabBarController+WhatIsNew.swift in Sources */, + FABB24762602FC2C00C8785C /* RootViewControllerCoordinator+WhatIsNew.swift in Sources */, FABB24772602FC2C00C8785C /* CachedAnimatedImageView.swift in Sources */, FABB24782602FC2C00C8785C /* AccountToAccount20to21.swift in Sources */, FABB24792602FC2C00C8785C /* AutoUploadMessageProvider.swift in Sources */, From 2a9a88617cb3d5bdc118b19871690d512622d91e Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Wed, 28 Dec 2022 00:16:43 +0200 Subject: [PATCH 30/47] Refactor: move blogging prompts logic to `RootViewControllerCoordinator` --- .../MySitesCoordinator+RootViewPresenter.swift | 4 ++++ .../System/RootViewControllerCoordinator.swift | 11 ++++++++--- WordPress/Classes/System/RootViewPresenter.swift | 1 + .../WPTabBarController+RootViewPresenter.swift | 4 ++++ .../Utility/InteractiveNotificationsManager.swift | 2 +- ...tViewControllerCoordinator+BloggingPrompt.swift} | 8 ++++---- .../Classes/ViewRelated/System/WPTabBarController.h | 1 - .../Classes/ViewRelated/System/WPTabBarController.m | 13 ------------- WordPress/WordPress.xcodeproj/project.pbxproj | 12 ++++++------ 9 files changed, 28 insertions(+), 28 deletions(-) rename WordPress/Classes/ViewRelated/Blog/Blogging Prompts/{WPTabBarController+BloggingPrompt.swift => RootViewControllerCoordinator+BloggingPrompt.swift} (86%) diff --git a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift index 5022f0629657..7d6e37a49ce5 100644 --- a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift +++ b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift @@ -6,6 +6,10 @@ extension MySitesCoordinator: RootViewPresenter { // MARK: General + var currentViewController: UIViewController? { + return rootViewController + } + func getMeScenePresenter() -> ScenePresenter { meScenePresenter } diff --git a/WordPress/Classes/System/RootViewControllerCoordinator.swift b/WordPress/Classes/System/RootViewControllerCoordinator.swift index 26b3870de282..bf4821cef2e6 100644 --- a/WordPress/Classes/System/RootViewControllerCoordinator.swift +++ b/WordPress/Classes/System/RootViewControllerCoordinator.swift @@ -8,16 +8,20 @@ class RootViewControllerCoordinator { static var sharedPresenter: RootViewPresenter { shared.rootViewPresenter } - + // MARK: Public Variables - + lazy var whatIsNewScenePresenter: ScenePresenter = { return makeWhatIsNewPresenter() }() + lazy var bloggingPromptCoordinator: BloggingPromptCoordinator = { + return makeBloggingPromptCoordinator() + }() + // MARK: Private instance variables - private var rootViewPresenter: RootViewPresenter + private(set) var rootViewPresenter: RootViewPresenter // MARK: Initializer @@ -29,5 +33,6 @@ class RootViewControllerCoordinator { else { self.rootViewPresenter = WPTabBarController.sharedInstance() // TODO: Remove shared instance and create an instance here } + updatePromptsIfNeeded() } } diff --git a/WordPress/Classes/System/RootViewPresenter.swift b/WordPress/Classes/System/RootViewPresenter.swift index 2f11e6a00293..e2c7a7ca8d49 100644 --- a/WordPress/Classes/System/RootViewPresenter.swift +++ b/WordPress/Classes/System/RootViewPresenter.swift @@ -5,6 +5,7 @@ protocol RootViewPresenter: AnyObject { // MARK: General var rootViewController: UIViewController { get } + var currentViewController: UIViewController? { get } func showBlogDetails(for blog: Blog) func getMeScenePresenter() -> ScenePresenter func currentlySelectedScreen() -> String! diff --git a/WordPress/Classes/System/WPTabBarController+RootViewPresenter.swift b/WordPress/Classes/System/WPTabBarController+RootViewPresenter.swift index c37dd046c381..ef1371a88c47 100644 --- a/WordPress/Classes/System/WPTabBarController+RootViewPresenter.swift +++ b/WordPress/Classes/System/WPTabBarController+RootViewPresenter.swift @@ -10,6 +10,10 @@ extension WPTabBarController: RootViewPresenter { return self } + var currentViewController: UIViewController? { + return viewControllers?[selectedIndex] + } + func showBlogDetails(for blog: Blog) { mySitesCoordinator.showBlogDetails(for: blog) } diff --git a/WordPress/Classes/Utility/InteractiveNotificationsManager.swift b/WordPress/Classes/Utility/InteractiveNotificationsManager.swift index 4ebfc89b5102..6164c7745ac5 100644 --- a/WordPress/Classes/Utility/InteractiveNotificationsManager.swift +++ b/WordPress/Classes/Utility/InteractiveNotificationsManager.swift @@ -236,7 +236,7 @@ final class InteractiveNotificationsManager: NSObject { WPAnalytics.track(.bloggingRemindersNotificationReceived, properties: ["prompt_included": true]) let answerPromptBlock = { - WPTabBarController.sharedInstance().showPromptAnsweringFlow(with: userInfo) + RootViewControllerCoordinator.shared.showPromptAnsweringFlow(with: userInfo) } // check if user interacted with custom notification actions. diff --git a/WordPress/Classes/ViewRelated/Blog/Blogging Prompts/WPTabBarController+BloggingPrompt.swift b/WordPress/Classes/ViewRelated/Blog/Blogging Prompts/RootViewControllerCoordinator+BloggingPrompt.swift similarity index 86% rename from WordPress/Classes/ViewRelated/Blog/Blogging Prompts/WPTabBarController+BloggingPrompt.swift rename to WordPress/Classes/ViewRelated/Blog/Blogging Prompts/RootViewControllerCoordinator+BloggingPrompt.swift index c701b4512a33..ea65cbe85f1e 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blogging Prompts/WPTabBarController+BloggingPrompt.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blogging Prompts/RootViewControllerCoordinator+BloggingPrompt.swift @@ -1,14 +1,14 @@ /// Encapsulates logic related to Blogging Prompts in WPTabBarController. /// -extension WPTabBarController { +extension RootViewControllerCoordinator { @objc func makeBloggingPromptCoordinator() -> BloggingPromptCoordinator { return BloggingPromptCoordinator() } @objc func updatePromptsIfNeeded() { - guard let blog = currentOrLastBlog() else { + guard let blog = rootViewPresenter.currentOrLastBlog() else { return } @@ -22,7 +22,7 @@ extension WPTabBarController { guard Feature.enabled(.bloggingPrompts), let siteID = userInfo[BloggingPrompt.NotificationKeys.siteID] as? Int, let blog = accountSites?.first(where: { $0.dotComID == NSNumber(value: siteID) }), - let viewController = viewControllers?[selectedIndex] else { + let viewController = rootViewPresenter.currentViewController else { return } @@ -40,7 +40,7 @@ extension WPTabBarController { } -private extension WPTabBarController { +private extension RootViewControllerCoordinator { var accountSites: [Blog]? { try? WPAccount.lookupDefaultWordPressComAccount(in: ContextManager.shared.mainContext)?.visibleBlogs diff --git a/WordPress/Classes/ViewRelated/System/WPTabBarController.h b/WordPress/Classes/ViewRelated/System/WPTabBarController.h index e876d4fb2def..403004d609f8 100644 --- a/WordPress/Classes/ViewRelated/System/WPTabBarController.h +++ b/WordPress/Classes/ViewRelated/System/WPTabBarController.h @@ -25,7 +25,6 @@ extern NSNotificationName const WPTabBarHeightChangedNotification; @property (nonatomic, strong, readonly) UINavigationController *readerNavigationController; @property (nonatomic, strong, readonly) MySitesCoordinator *mySitesCoordinator; @property (nonatomic, strong, readonly) ReaderCoordinator *readerCoordinator; -@property (nonatomic, strong, readonly) BloggingPromptCoordinator *bloggingPromptCoordinator; @property (nonatomic, strong) id meScenePresenter; @property (nonatomic, strong, readonly) ReaderTabViewModel *readerTabViewModel; diff --git a/WordPress/Classes/ViewRelated/System/WPTabBarController.m b/WordPress/Classes/ViewRelated/System/WPTabBarController.m index d57947c251a5..3160d8e460d8 100644 --- a/WordPress/Classes/ViewRelated/System/WPTabBarController.m +++ b/WordPress/Classes/ViewRelated/System/WPTabBarController.m @@ -538,8 +538,6 @@ - (BOOL)canBecomeFirstResponder - (void)viewDidLoad { [super viewDidLoad]; [self startObserversForTabAccessTracking]; - - [self updatePromptsIfNeeded]; } - (void)viewDidAppear:(BOOL)animated @@ -569,15 +567,4 @@ - (UIPresentationController *)presentationControllerForPresentedViewController:( return nil; } -#pragma mark - Blogging Prompt -- (BloggingPromptCoordinator *)bloggingPromptCoordinator -{ - if (_bloggingPromptCoordinator) { - return _bloggingPromptCoordinator; - } - - self.bloggingPromptCoordinator = [self makeBloggingPromptCoordinator]; - return _bloggingPromptCoordinator; -} - @end diff --git a/WordPress/WordPress.xcodeproj/project.pbxproj b/WordPress/WordPress.xcodeproj/project.pbxproj index 7b8244738b3b..b8b613f378b0 100644 --- a/WordPress/WordPress.xcodeproj/project.pbxproj +++ b/WordPress/WordPress.xcodeproj/project.pbxproj @@ -5276,8 +5276,8 @@ FEAC916F28001FC4005026E7 /* AvatarTrainView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEAC916D28001FC4005026E7 /* AvatarTrainView.swift */; }; FEC26030283FBA1A003D886A /* BloggingPromptCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEC2602F283FBA1A003D886A /* BloggingPromptCoordinator.swift */; }; FEC26031283FBA1A003D886A /* BloggingPromptCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEC2602F283FBA1A003D886A /* BloggingPromptCoordinator.swift */; }; - FEC26033283FC902003D886A /* WPTabBarController+BloggingPrompt.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEC26032283FC902003D886A /* WPTabBarController+BloggingPrompt.swift */; }; - FEC26034283FC902003D886A /* WPTabBarController+BloggingPrompt.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEC26032283FC902003D886A /* WPTabBarController+BloggingPrompt.swift */; }; + FEC26033283FC902003D886A /* RootViewControllerCoordinator+BloggingPrompt.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEC26032283FC902003D886A /* RootViewControllerCoordinator+BloggingPrompt.swift */; }; + FEC26034283FC902003D886A /* RootViewControllerCoordinator+BloggingPrompt.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEC26032283FC902003D886A /* RootViewControllerCoordinator+BloggingPrompt.swift */; }; FECA442F28350B7800D01F15 /* PromptRemindersScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = FECA442E28350B7800D01F15 /* PromptRemindersScheduler.swift */; }; FECA443028350B7800D01F15 /* PromptRemindersScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = FECA442E28350B7800D01F15 /* PromptRemindersScheduler.swift */; }; FECA44322836647100D01F15 /* PromptRemindersSchedulerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FECA44312836647100D01F15 /* PromptRemindersSchedulerTests.swift */; }; @@ -8867,7 +8867,7 @@ FEAC916D28001FC4005026E7 /* AvatarTrainView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AvatarTrainView.swift; sourceTree = ""; }; FEB7A8922718852A00A8CF85 /* WordPress 134.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "WordPress 134.xcdatamodel"; sourceTree = ""; }; FEC2602F283FBA1A003D886A /* BloggingPromptCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BloggingPromptCoordinator.swift; sourceTree = ""; }; - FEC26032283FC902003D886A /* WPTabBarController+BloggingPrompt.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WPTabBarController+BloggingPrompt.swift"; sourceTree = ""; }; + FEC26032283FC902003D886A /* RootViewControllerCoordinator+BloggingPrompt.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "RootViewControllerCoordinator+BloggingPrompt.swift"; sourceTree = ""; }; FECA442E28350B7800D01F15 /* PromptRemindersScheduler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PromptRemindersScheduler.swift; sourceTree = ""; }; FECA44312836647100D01F15 /* PromptRemindersSchedulerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PromptRemindersSchedulerTests.swift; sourceTree = ""; }; FED65D78293511E4008071BF /* SharedDataIssueSolver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SharedDataIssueSolver.swift; sourceTree = ""; }; @@ -13650,7 +13650,7 @@ 98517E5828220411001FFD45 /* BloggingPromptTableViewCell.swift */, 98517E5B28220474001FFD45 /* BloggingPromptTableViewCell.xib */, FEC2602F283FBA1A003D886A /* BloggingPromptCoordinator.swift */, - FEC26032283FC902003D886A /* WPTabBarController+BloggingPrompt.swift */, + FEC26032283FC902003D886A /* RootViewControllerCoordinator+BloggingPrompt.swift */, ); path = "Blogging Prompts"; sourceTree = ""; @@ -21552,7 +21552,7 @@ E15632CC1EB9ECF40035A099 /* TableViewKeyboardObserver.swift in Sources */, E1A03F48174283E10085D192 /* BlogToJetpackAccount.m in Sources */, B522C4F81B3DA79B00E47B59 /* NotificationSettingsViewController.swift in Sources */, - FEC26033283FC902003D886A /* WPTabBarController+BloggingPrompt.swift in Sources */, + FEC26033283FC902003D886A /* RootViewControllerCoordinator+BloggingPrompt.swift in Sources */, 93E63369272AC532009DACF8 /* LoginEpilogueChooseSiteTableViewCell.swift in Sources */, 9A51DA1522E9E8C7005CC335 /* ChangeUsernameViewController.swift in Sources */, 5D6C4B121B604190005E3C43 /* RichTextView.swift in Sources */, @@ -24320,7 +24320,7 @@ 46F583B02624CE790010A723 /* BlockEditorSettingElement+CoreDataProperties.swift in Sources */, FABB25D22602FC2C00C8785C /* SiteSegmentsWizardContent.swift in Sources */, FABB25D32602FC2C00C8785C /* ReaderTopicToReaderDefaultTopic37to38.swift in Sources */, - FEC26034283FC902003D886A /* WPTabBarController+BloggingPrompt.swift in Sources */, + FEC26034283FC902003D886A /* RootViewControllerCoordinator+BloggingPrompt.swift in Sources */, FABB25D42602FC2C00C8785C /* UploadsManager.swift in Sources */, 9856A3E5261FD27A008D6354 /* UserProfileSectionHeader.swift in Sources */, FABB25D62602FC2C00C8785C /* ActivityListSectionHeaderView.swift in Sources */, From 67c878696b93fc8f481020033f544510a86365f3 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Wed, 28 Dec 2022 00:39:22 +0200 Subject: [PATCH 31/47] Update: remove usage of `WPTabBar.sharedInstance` in `BlogDetailsVC.m` --- .../BlogDetailsViewController+SectionHelpers.swift | 5 +++++ .../Blog/Blog Details/BlogDetailsViewController.m | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController+SectionHelpers.swift b/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController+SectionHelpers.swift index 90c7c917e10c..f80762a57a31 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController+SectionHelpers.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController+SectionHelpers.swift @@ -32,6 +32,11 @@ extension BlogDetailsSubsection { } extension BlogDetailsViewController { + + @objc class func mySitesCoordinator() -> MySitesCoordinator { + RootViewControllerCoordinator.sharedPresenter.mySitesCoordinator + } + @objc func findSectionIndex(sections: [BlogDetailsSection], category: BlogDetailsSectionCategory) -> Int { return sections.findSectionIndex(of: category) ?? NSNotFound } diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController.m b/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController.m index 0c881c145e86..a85030a8e6ad 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController.m +++ b/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController.m @@ -259,7 +259,7 @@ + (UIViewController *)viewControllerWithRestorationIdentifierPath:(NSArray *)ide // If there's already a blog details view controller for this blog in the primary // navigation stack, we'll return that instead of creating a new one. - UISplitViewController *splitViewController = [WPTabBarController sharedInstance].mySitesCoordinator.splitViewController; + UISplitViewController *splitViewController = [self mySitesCoordinator].splitViewController; UINavigationController *navigationController = splitViewController.viewControllers.firstObject; if (navigationController && [navigationController isKindOfClass:[UINavigationController class]]) { BlogDetailsViewController *topViewController = (BlogDetailsViewController *)navigationController.topViewController; From c450a6f86de3bb1ed92fa67a9b5ee6edc8757854 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Wed, 28 Dec 2022 00:39:52 +0200 Subject: [PATCH 32/47] Update: Completely remove `WPTabBarController.sharedInstance()` --- .../System/RootViewControllerCoordinator.swift | 2 +- .../Classes/ViewRelated/System/WPTabBarController.h | 2 -- .../Classes/ViewRelated/System/WPTabBarController.m | 11 ----------- 3 files changed, 1 insertion(+), 14 deletions(-) diff --git a/WordPress/Classes/System/RootViewControllerCoordinator.swift b/WordPress/Classes/System/RootViewControllerCoordinator.swift index bf4821cef2e6..25c1680e33b3 100644 --- a/WordPress/Classes/System/RootViewControllerCoordinator.swift +++ b/WordPress/Classes/System/RootViewControllerCoordinator.swift @@ -31,7 +31,7 @@ class RootViewControllerCoordinator { self.rootViewPresenter = MySitesCoordinator(meScenePresenter: meScenePresenter, onBecomeActiveTab: {}) } else { - self.rootViewPresenter = WPTabBarController.sharedInstance() // TODO: Remove shared instance and create an instance here + self.rootViewPresenter = WPTabBarController() } updatePromptsIfNeeded() } diff --git a/WordPress/Classes/ViewRelated/System/WPTabBarController.h b/WordPress/Classes/ViewRelated/System/WPTabBarController.h index 403004d609f8..d035fa345587 100644 --- a/WordPress/Classes/ViewRelated/System/WPTabBarController.h +++ b/WordPress/Classes/ViewRelated/System/WPTabBarController.h @@ -28,8 +28,6 @@ extern NSNotificationName const WPTabBarHeightChangedNotification; @property (nonatomic, strong) id meScenePresenter; @property (nonatomic, strong, readonly) ReaderTabViewModel *readerTabViewModel; -+ (instancetype)sharedInstance; - - (NSString *)currentlySelectedScreen; - (void)showMySitesTab; diff --git a/WordPress/Classes/ViewRelated/System/WPTabBarController.m b/WordPress/Classes/ViewRelated/System/WPTabBarController.m index 3160d8e460d8..cc1f5d74f015 100644 --- a/WordPress/Classes/ViewRelated/System/WPTabBarController.m +++ b/WordPress/Classes/ViewRelated/System/WPTabBarController.m @@ -57,7 +57,6 @@ @interface WPTabBarController () Date: Wed, 28 Dec 2022 00:41:40 +0200 Subject: [PATCH 33/47] Update: Fix incorrect documentation --- .../RootViewControllerCoordinator+BloggingPrompt.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/Classes/ViewRelated/Blog/Blogging Prompts/RootViewControllerCoordinator+BloggingPrompt.swift b/WordPress/Classes/ViewRelated/Blog/Blogging Prompts/RootViewControllerCoordinator+BloggingPrompt.swift index ea65cbe85f1e..ac7b8ac51f2b 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blogging Prompts/RootViewControllerCoordinator+BloggingPrompt.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blogging Prompts/RootViewControllerCoordinator+BloggingPrompt.swift @@ -1,5 +1,5 @@ -/// Encapsulates logic related to Blogging Prompts in WPTabBarController. +/// Encapsulates logic related to Blogging Prompts in RootViewControllerCoordinator. /// extension RootViewControllerCoordinator { From 2b07177e65d550d4d4c96144f99e4aa2078c573f Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Wed, 28 Dec 2022 02:24:03 +0200 Subject: [PATCH 34/47] Add: track incorrectly accessed jetpack functions --- .../System/MySitesCoordinator+RootViewPresenter.swift | 8 ++++---- .../Classes/Utility/Analytics/WPAnalyticsEvent.swift | 3 +++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift index 7d6e37a49ce5..7532cfe9e05a 100644 --- a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift +++ b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift @@ -88,6 +88,7 @@ extension MySitesCoordinator: RootViewPresenter { func showMySitesTab() { // Do nothing + // Landing here means we're trying to show the My Sites, but it's already showing. } // MARK: Notifications @@ -111,9 +112,8 @@ extension MySitesCoordinator: RootViewPresenter { // MARK: Helpers /// Default implementation for functions that are not supported by the simplified UI. - private func fallbackBehavior() { - // TODO: Consider showing an overlay - // TODO: Print a log statement - // TODO: Consider tracking this + private func fallbackBehavior(callingFunction: String = #function) { + let properties = ["calling_function": callingFunction] + WPAnalytics.track(.jetpackFeatureIncorrectlyAccessed, properties: properties) } } diff --git a/WordPress/Classes/Utility/Analytics/WPAnalyticsEvent.swift b/WordPress/Classes/Utility/Analytics/WPAnalyticsEvent.swift index 83765b99e02a..a4736e135ad1 100644 --- a/WordPress/Classes/Utility/Analytics/WPAnalyticsEvent.swift +++ b/WordPress/Classes/Utility/Analytics/WPAnalyticsEvent.swift @@ -420,6 +420,7 @@ import Foundation case jetpackBrandingMenuCardHidden case jetpackBrandingMenuCardRemindLater case jetpackBrandingMenuCardContextualMenuAccessed + case jetpackFeatureIncorrectlyAccessed /// A String that represents the event var value: String { @@ -1141,6 +1142,8 @@ import Foundation return "remove_feature_card_remind_later_tapped" case .jetpackBrandingMenuCardContextualMenuAccessed: return "remove_feature_card_menu_accessed" + case .jetpackFeatureIncorrectlyAccessed: + return "jetpack_feature_incorrectly_accessed" } // END OF SWITCH } From d16a99535a54f6140ded93bbc4f534936e47d5b8 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Wed, 28 Dec 2022 03:28:26 +0200 Subject: [PATCH 35/47] Refactor: rename `RootViewControllerCoordinator` to `RootViewCoordinator` --- .../3DTouch/WP3DTouchShortcutHandler.swift | 2 +- ...inator.swift => RootViewCoordinator.swift} | 4 +-- WordPress/Classes/System/WindowManager.swift | 4 +-- .../System/WordPressAppDelegate+openURL.swift | 10 +++--- .../Classes/System/WordPressAppDelegate.swift | 2 +- .../InteractiveNotificationsManager.swift | 8 ++--- .../Utility/PushNotificationsManager.swift | 8 ++--- .../Utility/Spotlight/SearchManager.swift | 36 +++++++++---------- .../Utility/Universal Links/Route+Page.swift | 4 +-- .../Utility/Universal Links/Routes+Me.swift | 6 ++-- .../Universal Links/Routes+MySites.swift | 2 +- .../Routes+Notifications.swift | 4 +-- .../Utility/Universal Links/Routes+Post.swift | 4 +-- .../Universal Links/Routes+Reader.swift | 2 +- .../Universal Links/Routes+Start.swift | 2 +- .../Universal Links/Routes+Stats.swift | 2 +- .../Posts/DashboardEmptyPostsCardCell.swift | 2 +- ...DetailsViewController+SectionHelpers.swift | 2 +- ... RootViewCoordinator+BloggingPrompt.swift} | 6 ++-- .../My Site/MySiteViewController+FAB.swift | 6 ++-- ...ySiteViewController+OnboardingPrompt.swift | 4 +-- .../Blog/My Site/MySiteViewController.swift | 2 +- .../ViewRelated/Blog/QuickStartTours.swift | 2 +- .../Comments/CommentAnalytics.swift | 2 +- .../StatsRevampV2IntroductionPresenter.swift | 4 +-- .../AppSettingsViewController.swift | 4 +-- .../MediaNoticeNavigationCoordinator.swift | 4 +-- ...PostSignUpInterstitialViewController.swift | 2 +- .../NUX/WordPressAuthenticationManager.swift | 4 +-- .../NotificationsViewController.swift | 8 ++--- .../ReplyTextView/ReplyTextView.swift | 2 +- .../Post/PostListViewController.swift | 2 +- .../Detail/ReaderDetailViewController.swift | 2 +- .../Reader/ReaderSaveForLaterAction.swift | 2 +- .../Reader/ReaderStreamViewController.swift | 4 +-- .../ReaderTabViewController.swift | 4 +-- .../SiteAssemblyWizardContent.swift | 4 +-- ...SiteStatsInsightsTableViewController.swift | 6 ++-- .../Support/SupportTableViewController.swift | 2 +- .../Coordinators/ReaderCoordinator.swift | 22 ++++++------ ...ft => RootViewCoordinator+WhatIsNew.swift} | 2 +- WordPress/WordPress.xcodeproj/project.pbxproj | 36 +++++++++---------- .../ShareNoticeNavigationCoordinator.swift | 6 ++-- 43 files changed, 123 insertions(+), 123 deletions(-) rename WordPress/Classes/System/{RootViewControllerCoordinator.swift => RootViewCoordinator.swift} (90%) rename WordPress/Classes/ViewRelated/Blog/Blogging Prompts/{RootViewControllerCoordinator+BloggingPrompt.swift => RootViewCoordinator+BloggingPrompt.swift} (93%) rename WordPress/Classes/ViewRelated/What's New/Dependency container/{RootViewControllerCoordinator+WhatIsNew.swift => RootViewCoordinator+WhatIsNew.swift} (97%) diff --git a/WordPress/Classes/System/3DTouch/WP3DTouchShortcutHandler.swift b/WordPress/Classes/System/3DTouch/WP3DTouchShortcutHandler.swift index ab56fa5a3fce..2127f862ee8c 100644 --- a/WordPress/Classes/System/3DTouch/WP3DTouchShortcutHandler.swift +++ b/WordPress/Classes/System/3DTouch/WP3DTouchShortcutHandler.swift @@ -25,7 +25,7 @@ open class WP3DTouchShortcutHandler: NSObject { @objc static let applicationShortcutUserInfoIconKey = "applicationShortcutUserInfoIconKey" @objc open func handleShortcutItem(_ shortcutItem: UIApplicationShortcutItem) -> Bool { - let rootViewPresenter = RootViewControllerCoordinator.sharedPresenter + let rootViewPresenter = RootViewCoordinator.sharedPresenter switch shortcutItem.type { case ShortcutIdentifier.LogIn.type: diff --git a/WordPress/Classes/System/RootViewControllerCoordinator.swift b/WordPress/Classes/System/RootViewCoordinator.swift similarity index 90% rename from WordPress/Classes/System/RootViewControllerCoordinator.swift rename to WordPress/Classes/System/RootViewCoordinator.swift index 25c1680e33b3..4f8529e9e0c5 100644 --- a/WordPress/Classes/System/RootViewControllerCoordinator.swift +++ b/WordPress/Classes/System/RootViewCoordinator.swift @@ -1,10 +1,10 @@ import Foundation -class RootViewControllerCoordinator { +class RootViewCoordinator { // MARK: Static shared variables - static let shared = RootViewControllerCoordinator() + static let shared = RootViewCoordinator() static var sharedPresenter: RootViewPresenter { shared.rootViewPresenter } diff --git a/WordPress/Classes/System/WindowManager.swift b/WordPress/Classes/System/WindowManager.swift index 27c4809b5a8c..5521caa432b1 100644 --- a/WordPress/Classes/System/WindowManager.swift +++ b/WordPress/Classes/System/WindowManager.swift @@ -57,13 +57,13 @@ class WindowManager: NSObject { /// @objc func showAppUI(for blog: Blog? = nil, completion: Completion? = nil) { isShowingFullscreenSignIn = false - show(RootViewControllerCoordinator.sharedPresenter.rootViewController, completion: completion) + show(RootViewCoordinator.sharedPresenter.rootViewController, completion: completion) guard let blog = blog else { return } - RootViewControllerCoordinator.sharedPresenter.showBlogDetails(for: blog) + RootViewCoordinator.sharedPresenter.showBlogDetails(for: blog) } /// Shows the initial UI for unauthenticated users. diff --git a/WordPress/Classes/System/WordPressAppDelegate+openURL.swift b/WordPress/Classes/System/WordPressAppDelegate+openURL.swift index e0af9bfa4970..181d0b928171 100644 --- a/WordPress/Classes/System/WordPressAppDelegate+openURL.swift +++ b/WordPress/Classes/System/WordPressAppDelegate+openURL.swift @@ -88,7 +88,7 @@ import AutomatticTracks return false } - RootViewControllerCoordinator.sharedPresenter.showReaderTab(forPost: NSNumber(value: postId), onBlog: NSNumber(value: blogId)) + RootViewCoordinator.sharedPresenter.showReaderTab(forPost: NSNumber(value: postId), onBlog: NSNumber(value: blogId)) return true } @@ -112,14 +112,14 @@ import AutomatticTracks // so the Stats view displays the correct stats. SiteStatsInformation.sharedInstance.siteID = currentSiteID - RootViewControllerCoordinator.sharedPresenter.rootViewController.dismiss(animated: true, completion: nil) + RootViewCoordinator.sharedPresenter.rootViewController.dismiss(animated: true, completion: nil) } let navController = UINavigationController(rootViewController: statsViewController) navController.modalPresentationStyle = .currentContext navController.navigationBar.isTranslucent = false - RootViewControllerCoordinator.sharedPresenter.rootViewController.present(navController, animated: true, completion: nil) + RootViewCoordinator.sharedPresenter.rootViewController.present(navController, animated: true, completion: nil) return true } @@ -171,7 +171,7 @@ import AutomatticTracks let postVC = EditPostViewController(post: post) postVC.modalPresentationStyle = .fullScreen - RootViewControllerCoordinator.sharedPresenter.rootViewController.present(postVC, animated: true, completion: nil) + RootViewCoordinator.sharedPresenter.rootViewController.present(postVC, animated: true, completion: nil) WPAppAnalytics.track(.editorCreatedPost, withProperties: [WPAppAnalyticsKeyTapSource: "url_scheme", WPAppAnalyticsKeyPostType: "post"]) @@ -200,7 +200,7 @@ import AutomatticTracks // Should more formats be accepted be accepted in the future, this line would have to be expanded to accomodate it. let contentEscaped = contentRaw.escapeHtmlNamedEntities() - RootViewControllerCoordinator.sharedPresenter.showPageEditor(blog: blog, title: title, content: contentEscaped, source: "url_scheme") + RootViewCoordinator.sharedPresenter.showPageEditor(blog: blog, title: title, content: contentEscaped, source: "url_scheme") return true } diff --git a/WordPress/Classes/System/WordPressAppDelegate.swift b/WordPress/Classes/System/WordPressAppDelegate.swift index 5c7438342c64..a0d674005c0f 100644 --- a/WordPress/Classes/System/WordPressAppDelegate.swift +++ b/WordPress/Classes/System/WordPressAppDelegate.swift @@ -655,7 +655,7 @@ extension WordPressAppDelegate { return "Jetpack Migration View" #endif default: - return RootViewControllerCoordinator.sharedPresenter.currentlySelectedScreen() + return RootViewCoordinator.sharedPresenter.currentlySelectedScreen() } } diff --git a/WordPress/Classes/Utility/InteractiveNotificationsManager.swift b/WordPress/Classes/Utility/InteractiveNotificationsManager.swift index 6164c7745ac5..e350320ee656 100644 --- a/WordPress/Classes/Utility/InteractiveNotificationsManager.swift +++ b/WordPress/Classes/Utility/InteractiveNotificationsManager.swift @@ -210,7 +210,7 @@ final class InteractiveNotificationsManager: NSObject { if identifier == UNNotificationDefaultActionIdentifier { let targetBlog: Blog? = blog(from: threadId) - RootViewControllerCoordinator.sharedPresenter.mySitesCoordinator.showCreateSheet(for: targetBlog) + RootViewCoordinator.sharedPresenter.mySitesCoordinator.showCreateSheet(for: targetBlog) } case .weeklyRoundup: let targetBlog = blog(from: userInfo) @@ -226,7 +226,7 @@ final class InteractiveNotificationsManager: NSObject { let targetDate = date(from: userInfo) - RootViewControllerCoordinator.sharedPresenter.mySitesCoordinator.showStats( + RootViewCoordinator.sharedPresenter.mySitesCoordinator.showStats( for: targetBlog, timePeriod: .weeks, date: targetDate) @@ -236,7 +236,7 @@ final class InteractiveNotificationsManager: NSObject { WPAnalytics.track(.bloggingRemindersNotificationReceived, properties: ["prompt_included": true]) let answerPromptBlock = { - RootViewControllerCoordinator.shared.showPromptAnsweringFlow(with: userInfo) + RootViewCoordinator.shared.showPromptAnsweringFlow(with: userInfo) } // check if user interacted with custom notification actions. @@ -346,7 +346,7 @@ private extension InteractiveNotificationsManager { /// - Parameter noteID: The Notification's Identifier /// func showDetailsWithNoteID(_ noteId: NSNumber) { - RootViewControllerCoordinator.sharedPresenter.showNotificationsTabForNote(withID: noteId.stringValue) + RootViewCoordinator.sharedPresenter.showNotificationsTabForNote(withID: noteId.stringValue) } diff --git a/WordPress/Classes/Utility/PushNotificationsManager.swift b/WordPress/Classes/Utility/PushNotificationsManager.swift index 01f361ec574a..7d4d1aacf16e 100644 --- a/WordPress/Classes/Utility/PushNotificationsManager.swift +++ b/WordPress/Classes/Utility/PushNotificationsManager.swift @@ -248,7 +248,7 @@ extension PushNotificationsManager { WPAnalytics.track(.supportReceivedResponseFromSupport) if applicationState == .background { - RootViewControllerCoordinator.sharedPresenter.showMeScene() + RootViewCoordinator.sharedPresenter.showMeScene() } completionHandler?(.newData) @@ -335,7 +335,7 @@ extension PushNotificationsManager { return false } - RootViewControllerCoordinator.sharedPresenter.showNotificationsTabForNote(withID: notificationId) + RootViewCoordinator.sharedPresenter.showNotificationsTabForNote(withID: notificationId) completionHandler?(.newData) return true @@ -427,12 +427,12 @@ extension PushNotificationsManager { return false } - let rootViewController = RootViewControllerCoordinator.sharedPresenter.rootViewController + let rootViewController = RootViewCoordinator.sharedPresenter.rootViewController if rootViewController.presentedViewController != nil { rootViewController.dismiss(animated: false) } - RootViewControllerCoordinator.sharedPresenter.showMySitesTab() + RootViewCoordinator.sharedPresenter.showMySitesTab() if let taskName = userInfo.string(forKey: QuickStartTracking.taskNameKey), let quickStartType = userInfo.string(forKey: QuickStartTracking.quickStartTypeKey) { diff --git a/WordPress/Classes/Utility/Spotlight/SearchManager.swift b/WordPress/Classes/Utility/Spotlight/SearchManager.swift index 45518975d9e9..f63122c0df4d 100644 --- a/WordPress/Classes/Utility/Spotlight/SearchManager.swift +++ b/WordPress/Classes/Utility/Spotlight/SearchManager.swift @@ -311,47 +311,47 @@ fileprivate extension SearchManager { // MARK: Site Tab Navigation func openMySitesTab() -> Bool { - RootViewControllerCoordinator.sharedPresenter.showMySitesTab() + RootViewCoordinator.sharedPresenter.showMySitesTab() return true } func openSiteDetailsScreen(for blog: Blog) { - RootViewControllerCoordinator.sharedPresenter.showBlogDetails(for: blog) + RootViewCoordinator.sharedPresenter.showBlogDetails(for: blog) } // MARK: Reader Tab Navigation func openReaderTab() -> Bool { - RootViewControllerCoordinator.sharedPresenter.showReaderTab() + RootViewCoordinator.sharedPresenter.showReaderTab() return true } // MARK: Me Tab Navigation func openMeTab() -> Bool { - RootViewControllerCoordinator.sharedPresenter.showMeScene() + RootViewCoordinator.sharedPresenter.showMeScene() return true } func openAppSettingsScreen() -> Bool { - RootViewControllerCoordinator.sharedPresenter.navigateToAppSettings() + RootViewCoordinator.sharedPresenter.navigateToAppSettings() return true } func openSupportScreen() -> Bool { - RootViewControllerCoordinator.sharedPresenter.navigateToSupport() + RootViewCoordinator.sharedPresenter.navigateToSupport() return true } // MARK: Notification Tab Navigation func openNotificationsTab() -> Bool { - RootViewControllerCoordinator.sharedPresenter.showNotificationsTab() + RootViewCoordinator.sharedPresenter.showNotificationsTab() return true } func openNotificationSettingsScreen() -> Bool { - RootViewControllerCoordinator.sharedPresenter.switchNotificationsTabToNotificationSettings() + RootViewCoordinator.sharedPresenter.switchNotificationsTabToNotificationSettings() return true } @@ -398,9 +398,9 @@ fileprivate extension SearchManager { func openListView(for apost: AbstractPost) { closePreviewIfNeeded(for: apost) if let post = apost as? Post { - RootViewControllerCoordinator.sharedPresenter.showPosts(for: post.blog) + RootViewCoordinator.sharedPresenter.showPosts(for: post.blog) } else if let page = apost as? Page { - RootViewControllerCoordinator.sharedPresenter.showPages(for: page.blog) + RootViewCoordinator.sharedPresenter.showPages(for: page.blog) } } @@ -412,7 +412,7 @@ fileprivate extension SearchManager { onFailure() return } - RootViewControllerCoordinator.sharedPresenter.showReaderTab(forPost: postID, onBlog: blogID) + RootViewCoordinator.sharedPresenter.showReaderTab(forPost: postID, onBlog: blogID) } func openReader(for postID: NSNumber, siteID: NSNumber, onFailure: () -> Void) { @@ -421,7 +421,7 @@ fileprivate extension SearchManager { onFailure() return } - RootViewControllerCoordinator.sharedPresenter.showReaderTab(forPost: postID, onBlog: siteID) + RootViewCoordinator.sharedPresenter.showReaderTab(forPost: postID, onBlog: siteID) } // MARK: - Editor @@ -431,7 +431,7 @@ fileprivate extension SearchManager { openListView(for: post) let editor = EditPostViewController.init(post: post) editor.modalPresentationStyle = .fullScreen - RootViewControllerCoordinator.sharedPresenter.rootViewController.present(editor, animated: true) + RootViewCoordinator.sharedPresenter.rootViewController.present(editor, animated: true) } func openEditor(for page: Page) { @@ -439,19 +439,19 @@ fileprivate extension SearchManager { openListView(for: page) let editorViewController = EditPageViewController(page: page) - RootViewControllerCoordinator.sharedPresenter.rootViewController.present(editorViewController, animated: false) + RootViewCoordinator.sharedPresenter.rootViewController.present(editorViewController, animated: false) } // MARK: - Preview func openPreview(for apost: AbstractPost) { - RootViewControllerCoordinator.sharedPresenter.showMySitesTab() + RootViewCoordinator.sharedPresenter.showMySitesTab() closePreviewIfNeeded(for: apost) let controller = PreviewWebKitViewController(post: apost, source: "spotlight_preview_post") controller.trackOpenEvent() let navWrapper = LightNavigationController(rootViewController: controller) - let rootViewController = RootViewControllerCoordinator.sharedPresenter.rootViewController + let rootViewController = RootViewCoordinator.sharedPresenter.rootViewController if rootViewController.traitCollection.userInterfaceIdiom == .pad { navWrapper.modalPresentationStyle = .fullScreen } @@ -464,7 +464,7 @@ fileprivate extension SearchManager { /// AbstractPost, leave it open, otherwise close it. /// func closePreviewIfNeeded(for apost: AbstractPost) { - let rootViewController = RootViewControllerCoordinator.sharedPresenter.rootViewController + let rootViewController = RootViewCoordinator.sharedPresenter.rootViewController guard let navController = rootViewController.presentedViewController as? UINavigationController else { return } @@ -481,7 +481,7 @@ fileprivate extension SearchManager { /// If there is any post preview window open, close it. /// func closeAnyOpenPreview() { - let rootViewController = RootViewControllerCoordinator.sharedPresenter.rootViewController + let rootViewController = RootViewCoordinator.sharedPresenter.rootViewController guard let navController = rootViewController.presentedViewController as? UINavigationController, navController.topViewController is PreviewWebKitViewController else { return diff --git a/WordPress/Classes/Utility/Universal Links/Route+Page.swift b/WordPress/Classes/Utility/Universal Links/Route+Page.swift index a379e0b37934..df34b828c1c6 100644 --- a/WordPress/Classes/Utility/Universal Links/Route+Page.swift +++ b/WordPress/Classes/Utility/Universal Links/Route+Page.swift @@ -15,9 +15,9 @@ struct NewPageForSiteRoute: Route { struct NewPageNavigationAction: NavigationAction { func perform(_ values: [String: String], source: UIViewController? = nil, router: LinkRouter) { if let blog = blog(from: values) { - RootViewControllerCoordinator.sharedPresenter.showPageEditor(forBlog: blog) + RootViewCoordinator.sharedPresenter.showPageEditor(forBlog: blog) } else { - RootViewControllerCoordinator.sharedPresenter.showPageEditor() + RootViewCoordinator.sharedPresenter.showPageEditor() } } } diff --git a/WordPress/Classes/Utility/Universal Links/Routes+Me.swift b/WordPress/Classes/Utility/Universal Links/Routes+Me.swift index ae3e7b480834..e6d0fa219ff4 100644 --- a/WordPress/Classes/Utility/Universal Links/Routes+Me.swift +++ b/WordPress/Classes/Utility/Universal Links/Routes+Me.swift @@ -26,11 +26,11 @@ enum MeNavigationAction: NavigationAction { func perform(_ values: [String: String] = [:], source: UIViewController? = nil, router: LinkRouter) { switch self { case .root: - RootViewControllerCoordinator.sharedPresenter.showMeScene() + RootViewCoordinator.sharedPresenter.showMeScene() case .accountSettings: - RootViewControllerCoordinator.sharedPresenter.navigateToAccountSettings() + RootViewCoordinator.sharedPresenter.navigateToAccountSettings() case .notificationSettings: - RootViewControllerCoordinator.sharedPresenter.switchNotificationsTabToNotificationSettings() + RootViewCoordinator.sharedPresenter.switchNotificationsTabToNotificationSettings() } } } diff --git a/WordPress/Classes/Utility/Universal Links/Routes+MySites.swift b/WordPress/Classes/Utility/Universal Links/Routes+MySites.swift index b417b2b2660a..19efe1bb9255 100644 --- a/WordPress/Classes/Utility/Universal Links/Routes+MySites.swift +++ b/WordPress/Classes/Utility/Universal Links/Routes+MySites.swift @@ -44,7 +44,7 @@ extension MySitesRoute: Route { extension MySitesRoute: NavigationAction { func perform(_ values: [String: String], source: UIViewController? = nil, router: LinkRouter) { - guard let coordinator = RootViewControllerCoordinator.sharedPresenter.mySitesCoordinator else { + guard let coordinator = RootViewCoordinator.sharedPresenter.mySitesCoordinator else { return } diff --git a/WordPress/Classes/Utility/Universal Links/Routes+Notifications.swift b/WordPress/Classes/Utility/Universal Links/Routes+Notifications.swift index 1f54636ea974..dff33ca35e5c 100644 --- a/WordPress/Classes/Utility/Universal Links/Routes+Notifications.swift +++ b/WordPress/Classes/Utility/Universal Links/Routes+Notifications.swift @@ -8,7 +8,7 @@ struct NotificationsRoute: Route { struct NotificationsNavigationAction: NavigationAction { func perform(_ values: [String: String], source: UIViewController? = nil, router: LinkRouter) { - RootViewControllerCoordinator.sharedPresenter.showNotificationsTab() - RootViewControllerCoordinator.sharedPresenter.popNotificationsTabToRoot() + RootViewCoordinator.sharedPresenter.showNotificationsTab() + RootViewCoordinator.sharedPresenter.popNotificationsTabToRoot() } } diff --git a/WordPress/Classes/Utility/Universal Links/Routes+Post.swift b/WordPress/Classes/Utility/Universal Links/Routes+Post.swift index 6f2eaed5bc58..ef3b1124ba79 100644 --- a/WordPress/Classes/Utility/Universal Links/Routes+Post.swift +++ b/WordPress/Classes/Utility/Universal Links/Routes+Post.swift @@ -15,9 +15,9 @@ struct NewPostForSiteRoute: Route { struct NewPostNavigationAction: NavigationAction { func perform(_ values: [String: String], source: UIViewController? = nil, router: LinkRouter) { if let blog = blog(from: values) { - RootViewControllerCoordinator.sharedPresenter.showPostTab(for: blog) + RootViewCoordinator.sharedPresenter.showPostTab(for: blog) } else { - RootViewControllerCoordinator.sharedPresenter.showPostTab() + RootViewCoordinator.sharedPresenter.showPostTab() } } } diff --git a/WordPress/Classes/Utility/Universal Links/Routes+Reader.swift b/WordPress/Classes/Utility/Universal Links/Routes+Reader.swift index ff0257b10a40..3d37dacab930 100644 --- a/WordPress/Classes/Utility/Universal Links/Routes+Reader.swift +++ b/WordPress/Classes/Utility/Universal Links/Routes+Reader.swift @@ -62,7 +62,7 @@ extension ReaderRoute: Route { extension ReaderRoute: NavigationAction { func perform(_ values: [String: String], source: UIViewController? = nil, router: LinkRouter) { - guard let tabBarController = RootViewControllerCoordinator.sharedPresenter.rootViewController as? WPTabBarController, + guard let tabBarController = RootViewCoordinator.sharedPresenter.rootViewController as? WPTabBarController, let coordinator = tabBarController.readerCoordinator else { return } diff --git a/WordPress/Classes/Utility/Universal Links/Routes+Start.swift b/WordPress/Classes/Utility/Universal Links/Routes+Start.swift index 1c9452be3618..565cc66917be 100644 --- a/WordPress/Classes/Utility/Universal Links/Routes+Start.swift +++ b/WordPress/Classes/Utility/Universal Links/Routes+Start.swift @@ -11,7 +11,7 @@ struct StartRoute: Route, NavigationAction { func perform(_ values: [String: String], source: UIViewController?, router: LinkRouter) { guard AccountHelper.isDotcomAvailable(), - let coordinator = RootViewControllerCoordinator.sharedPresenter.mySitesCoordinator else { + let coordinator = RootViewCoordinator.sharedPresenter.mySitesCoordinator else { return } diff --git a/WordPress/Classes/Utility/Universal Links/Routes+Stats.swift b/WordPress/Classes/Utility/Universal Links/Routes+Stats.swift index 311047bb9c1e..3e0ef3f0f400 100644 --- a/WordPress/Classes/Utility/Universal Links/Routes+Stats.swift +++ b/WordPress/Classes/Utility/Universal Links/Routes+Stats.swift @@ -67,7 +67,7 @@ extension StatsRoute: Route { extension StatsRoute: NavigationAction { func perform(_ values: [String: String], source: UIViewController? = nil, router: LinkRouter) { - guard let coordinator = RootViewControllerCoordinator.sharedPresenter.mySitesCoordinator else { + guard let coordinator = RootViewCoordinator.sharedPresenter.mySitesCoordinator else { return } diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Posts/DashboardEmptyPostsCardCell.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Posts/DashboardEmptyPostsCardCell.swift index 1db34d4b364f..87a55a0b43de 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Posts/DashboardEmptyPostsCardCell.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Posts/DashboardEmptyPostsCardCell.swift @@ -150,7 +150,7 @@ extension DashboardEmptyPostsCardCell { private extension DashboardEmptyPostsCardCell { func presentEditor() { BlogDashboardAnalytics.shared.track(.dashboardCardItemTapped, properties: ["type": "post", "sub_type": cardType?.rawValue ?? ""]) - let presenter = RootViewControllerCoordinator.sharedPresenter + let presenter = RootViewCoordinator.sharedPresenter presenter.showPostTab() } } diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController+SectionHelpers.swift b/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController+SectionHelpers.swift index 406e5b0e8cf2..92a5fc9ff657 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController+SectionHelpers.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController+SectionHelpers.swift @@ -34,7 +34,7 @@ extension BlogDetailsSubsection { extension BlogDetailsViewController { @objc class func mySitesCoordinator() -> MySitesCoordinator { - RootViewControllerCoordinator.sharedPresenter.mySitesCoordinator + RootViewCoordinator.sharedPresenter.mySitesCoordinator } @objc func findSectionIndex(sections: [BlogDetailsSection], category: BlogDetailsSectionCategory) -> Int { diff --git a/WordPress/Classes/ViewRelated/Blog/Blogging Prompts/RootViewControllerCoordinator+BloggingPrompt.swift b/WordPress/Classes/ViewRelated/Blog/Blogging Prompts/RootViewCoordinator+BloggingPrompt.swift similarity index 93% rename from WordPress/Classes/ViewRelated/Blog/Blogging Prompts/RootViewControllerCoordinator+BloggingPrompt.swift rename to WordPress/Classes/ViewRelated/Blog/Blogging Prompts/RootViewCoordinator+BloggingPrompt.swift index ac7b8ac51f2b..fdee3998d56e 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blogging Prompts/RootViewControllerCoordinator+BloggingPrompt.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blogging Prompts/RootViewCoordinator+BloggingPrompt.swift @@ -1,7 +1,7 @@ -/// Encapsulates logic related to Blogging Prompts in RootViewControllerCoordinator. +/// Encapsulates logic related to Blogging Prompts in RootViewCoordinator. /// -extension RootViewControllerCoordinator { +extension RootViewCoordinator { @objc func makeBloggingPromptCoordinator() -> BloggingPromptCoordinator { return BloggingPromptCoordinator() @@ -40,7 +40,7 @@ extension RootViewControllerCoordinator { } -private extension RootViewControllerCoordinator { +private extension RootViewCoordinator { var accountSites: [Blog]? { try? WPAccount.lookupDefaultWordPressComAccount(in: ContextManager.shared.mainContext)?.visibleBlogs diff --git a/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController+FAB.swift b/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController+FAB.swift index 6d4abc9a29f5..5976b5edb80d 100644 --- a/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController+FAB.swift +++ b/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController+FAB.swift @@ -6,20 +6,20 @@ extension MySiteViewController { @objc func makeCreateButtonCoordinator() -> CreateButtonCoordinator { let newPage = { - let presenter = RootViewControllerCoordinator.sharedPresenter + let presenter = RootViewCoordinator.sharedPresenter let blog = presenter.currentOrLastBlog() presenter.showPageEditor(forBlog: blog) } let newPost = { [weak self] in - let presenter = RootViewControllerCoordinator.sharedPresenter + let presenter = RootViewCoordinator.sharedPresenter presenter.showPostTab(completion: { self?.startAlertTimer() }) } let newStory = { - let presenter = RootViewControllerCoordinator.sharedPresenter + let presenter = RootViewCoordinator.sharedPresenter let blog = presenter.currentOrLastBlog() presenter.showStoryEditor(forBlog: blog) } diff --git a/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController+OnboardingPrompt.swift b/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController+OnboardingPrompt.swift index 1eb428348324..8d1ffaef503e 100644 --- a/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController+OnboardingPrompt.swift +++ b/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController+OnboardingPrompt.swift @@ -17,11 +17,11 @@ extension MySiteViewController { case .stats: // Show the stats view for the current blog if let blog = blog { - RootViewControllerCoordinator.sharedPresenter.mySitesCoordinator.showStats(for: blog, timePeriod: .insights) + RootViewCoordinator.sharedPresenter.mySitesCoordinator.showStats(for: blog, timePeriod: .insights) } case .writing: // Open the editor - let presenter = RootViewControllerCoordinator.sharedPresenter + let presenter = RootViewCoordinator.sharedPresenter presenter.showPostTab(completion: { [weak self] in self?.startAlertTimer() }) diff --git a/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift b/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift index b16d0c6c1c3d..389cd83dc0ac 100644 --- a/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift +++ b/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift @@ -190,7 +190,7 @@ class MySiteViewController: UIViewController, NoResultsViewHost { workaroundLargeTitleCollapseBug() if AppConfiguration.showsWhatIsNew { - RootViewControllerCoordinator.shared.presentWhatIsNew(on: self) + RootViewCoordinator.shared.presentWhatIsNew(on: self) } FancyAlertViewController.presentCustomAppIconUpgradeAlertIfNecessary(from: self) diff --git a/WordPress/Classes/ViewRelated/Blog/QuickStartTours.swift b/WordPress/Classes/ViewRelated/Blog/QuickStartTours.swift index c6b2346ff9c5..096e6addcef9 100644 --- a/WordPress/Classes/ViewRelated/Blog/QuickStartTours.swift +++ b/WordPress/Classes/ViewRelated/Blog/QuickStartTours.swift @@ -240,7 +240,7 @@ struct QuickStartFollowTour: QuickStartTour { let accessibilityHintText = NSLocalizedString("Guides you through the process of following other sites.", comment: "This value is used to set the accessibility hint text for following the sites of other users.") func setupReaderTab() { - RootViewControllerCoordinator.sharedPresenter.resetReaderTab() + RootViewCoordinator.sharedPresenter.resetReaderTab() } } diff --git a/WordPress/Classes/ViewRelated/Comments/CommentAnalytics.swift b/WordPress/Classes/ViewRelated/Comments/CommentAnalytics.swift index c017532965e1..66acd29fac80 100644 --- a/WordPress/Classes/ViewRelated/Comments/CommentAnalytics.swift +++ b/WordPress/Classes/ViewRelated/Comments/CommentAnalytics.swift @@ -11,7 +11,7 @@ import Foundation } static func trackingContext() -> String { - let screen = RootViewControllerCoordinator.sharedPresenter.currentlySelectedScreen() + let screen = RootViewCoordinator.sharedPresenter.currentlySelectedScreen() switch screen { case WPTabBarCurrentlySelectedScreenSites: return Constants.sites diff --git a/WordPress/Classes/ViewRelated/Feature Introduction/Stats Revamp v2/StatsRevampV2IntroductionPresenter.swift b/WordPress/Classes/ViewRelated/Feature Introduction/Stats Revamp v2/StatsRevampV2IntroductionPresenter.swift index 7ab8d51baa0a..45fc6ba0cf73 100644 --- a/WordPress/Classes/ViewRelated/Feature Introduction/Stats Revamp v2/StatsRevampV2IntroductionPresenter.swift +++ b/WordPress/Classes/ViewRelated/Feature Introduction/Stats Revamp v2/StatsRevampV2IntroductionPresenter.swift @@ -40,11 +40,11 @@ class StatsRevampV2IntroductionPresenter: NSObject { func primaryButtonSelected() { presentingViewController?.dismiss(animated: true) - guard let blog = RootViewControllerCoordinator.sharedPresenter.currentOrLastBlog() else { + guard let blog = RootViewCoordinator.sharedPresenter.currentOrLastBlog() else { return } - RootViewControllerCoordinator.sharedPresenter.mySitesCoordinator.showStats(for: blog, timePeriod: .insights) + RootViewCoordinator.sharedPresenter.mySitesCoordinator.showStats(for: blog, timePeriod: .insights) } // "Remind Me" prompt diff --git a/WordPress/Classes/ViewRelated/Me/App Settings/AppSettingsViewController.swift b/WordPress/Classes/ViewRelated/Me/App Settings/AppSettingsViewController.swift index ba359f4635a5..287b8c2436e9 100644 --- a/WordPress/Classes/ViewRelated/Me/App Settings/AppSettingsViewController.swift +++ b/WordPress/Classes/ViewRelated/Me/App Settings/AppSettingsViewController.swift @@ -312,7 +312,7 @@ class AppSettingsViewController: UITableViewController { return } self.tableView.deselectSelectedRowWithAnimation(true) - RootViewControllerCoordinator.shared.presentWhatIsNew(on: self) + RootViewCoordinator.shared.presentWhatIsNew(on: self) } } @@ -511,7 +511,7 @@ private extension AppSettingsViewController { rows.append(debugRow) } - if let presenter = RootViewControllerCoordinator.shared.whatIsNewScenePresenter as? WhatIsNewScenePresenter, + if let presenter = RootViewCoordinator.shared.whatIsNewScenePresenter as? WhatIsNewScenePresenter, presenter.versionHasAnnouncements, AppConfiguration.showsWhatIsNew { let whatIsNewRow = NavigationItemRow(title: AppConstants.Settings.whatIsNewTitle, diff --git a/WordPress/Classes/ViewRelated/Media/MediaNoticeNavigationCoordinator.swift b/WordPress/Classes/ViewRelated/Media/MediaNoticeNavigationCoordinator.swift index 56c216e04bef..d2f49a0cc7a4 100644 --- a/WordPress/Classes/ViewRelated/Media/MediaNoticeNavigationCoordinator.swift +++ b/WordPress/Classes/ViewRelated/Media/MediaNoticeNavigationCoordinator.swift @@ -16,13 +16,13 @@ class MediaNoticeNavigationCoordinator { let editor = EditPostViewController(blog: blog) editor.modalPresentationStyle = .fullScreen editor.insertedMedia = media - RootViewControllerCoordinator.sharedPresenter.rootViewController.present(editor, animated: false) + RootViewCoordinator.sharedPresenter.rootViewController.present(editor, animated: false) WPAppAnalytics.track(.editorCreatedPost, withProperties: [WPAppAnalyticsKeyTapSource: source, WPAppAnalyticsKeyPostType: "post"], with: blog) } static func navigateToMediaLibrary(with userInfo: NSDictionary) { if let blog = blog(from: userInfo) { - RootViewControllerCoordinator.sharedPresenter.showMedia(for: blog) + RootViewCoordinator.sharedPresenter.showMedia(for: blog) } } diff --git a/WordPress/Classes/ViewRelated/NUX/Post Signup Interstitial/PostSignUpInterstitialViewController.swift b/WordPress/Classes/ViewRelated/NUX/Post Signup Interstitial/PostSignUpInterstitialViewController.swift index d9564b044839..8238b74661bc 100644 --- a/WordPress/Classes/ViewRelated/NUX/Post Signup Interstitial/PostSignUpInterstitialViewController.swift +++ b/WordPress/Classes/ViewRelated/NUX/Post Signup Interstitial/PostSignUpInterstitialViewController.swift @@ -102,7 +102,7 @@ class PostSignUpInterstitialViewController: UIViewController { @IBAction func cancel(_ sender: Any) { dismiss?(.none) - RootViewControllerCoordinator.sharedPresenter.showReaderTab() + RootViewCoordinator.sharedPresenter.showReaderTab() tracker.track(click: .dismiss, ifTrackingNotEnabled: { WPAnalytics.track(.welcomeNoSitesInterstitialDismissed) diff --git a/WordPress/Classes/ViewRelated/NUX/WordPressAuthenticationManager.swift b/WordPress/Classes/ViewRelated/NUX/WordPressAuthenticationManager.swift index 52b705a6c2ed..a0bdf2de5ec7 100644 --- a/WordPress/Classes/ViewRelated/NUX/WordPressAuthenticationManager.swift +++ b/WordPress/Classes/ViewRelated/NUX/WordPressAuthenticationManager.swift @@ -585,9 +585,9 @@ private extension WordPressAuthenticationManager { /// We'll pre-switch to the users selected tab before the login flow dismisses private func handleOnboardingQuestionsWillDismiss(option: OnboardingOption) { if option == .reader { - RootViewControllerCoordinator.sharedPresenter.showReaderTab() + RootViewCoordinator.sharedPresenter.showReaderTab() } else if option == .notifications { - RootViewControllerCoordinator.sharedPresenter.showNotificationsTab() + RootViewCoordinator.sharedPresenter.showNotificationsTab() } } diff --git a/WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationsViewController.swift b/WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationsViewController.swift index c9433ab1ebcc..8156868d01ad 100644 --- a/WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationsViewController.swift +++ b/WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationsViewController.swift @@ -227,7 +227,7 @@ class NotificationsViewController: UIViewController, UIViewControllerRestoration defer { if AppConfiguration.showsWhatIsNew { - RootViewControllerCoordinator.shared.presentWhatIsNew(on: self) + RootViewCoordinator.shared.presentWhatIsNew(on: self) } } @@ -297,7 +297,7 @@ class NotificationsViewController: UIViewController, UIViewControllerRestoration static func viewController(withRestorationIdentifierPath identifierComponents: [String], coder: NSCoder) -> UIViewController? { - guard let tabBarController = RootViewControllerCoordinator.sharedPresenter.rootViewController as? WPTabBarController else { + guard let tabBarController = RootViewCoordinator.sharedPresenter.rootViewController as? WPTabBarController else { return nil } return tabBarController.notificationsViewController @@ -1642,10 +1642,10 @@ extension NotificationsViewController: NoResultsViewControllerDelegate { .follow, .like: WPAnalytics.track(.notificationsTappedViewReader, withProperties: properties) - RootViewControllerCoordinator.sharedPresenter.showReaderTab() + RootViewCoordinator.sharedPresenter.showReaderTab() case .unread: WPAnalytics.track(.notificationsTappedNewPost, withProperties: properties) - RootViewControllerCoordinator.sharedPresenter.showPostTab() + RootViewCoordinator.sharedPresenter.showPostTab() } } } diff --git a/WordPress/Classes/ViewRelated/Notifications/ReplyTextView/ReplyTextView.swift b/WordPress/Classes/ViewRelated/Notifications/ReplyTextView/ReplyTextView.swift index 8e78d058c6c3..8776ab45a89d 100644 --- a/WordPress/Classes/ViewRelated/Notifications/ReplyTextView/ReplyTextView.swift +++ b/WordPress/Classes/ViewRelated/Notifications/ReplyTextView/ReplyTextView.swift @@ -173,7 +173,7 @@ import Gridicons } @IBAction fileprivate func btnEnterFullscreenPressed(_ sender: Any) { - let rootViewController = RootViewControllerCoordinator.sharedPresenter.rootViewController + let rootViewController = RootViewCoordinator.sharedPresenter.rootViewController let editViewController = FullScreenCommentReplyViewController() diff --git a/WordPress/Classes/ViewRelated/Post/PostListViewController.swift b/WordPress/Classes/ViewRelated/Post/PostListViewController.swift index 7dba07267191..d3d2114fc63a 100644 --- a/WordPress/Classes/ViewRelated/Post/PostListViewController.swift +++ b/WordPress/Classes/ViewRelated/Post/PostListViewController.swift @@ -191,7 +191,7 @@ class PostListViewController: AbstractPostListViewController, UIViewControllerRe guard let self = self else { return } - let presenter = RootViewControllerCoordinator.sharedPresenter + let presenter = RootViewCoordinator.sharedPresenter presenter.showStoryEditor(blog: self.blog, title: nil, content: nil) }, source: Constants.source), at: 0) } diff --git a/WordPress/Classes/ViewRelated/Reader/Detail/ReaderDetailViewController.swift b/WordPress/Classes/ViewRelated/Reader/Detail/ReaderDetailViewController.swift index dfca4f10ff57..06490adb2f0b 100644 --- a/WordPress/Classes/ViewRelated/Reader/Detail/ReaderDetailViewController.swift +++ b/WordPress/Classes/ViewRelated/Reader/Detail/ReaderDetailViewController.swift @@ -144,7 +144,7 @@ class ReaderDetailViewController: UIViewController, ReaderDetailView { /// allowing Reader Detail to use a blue navbar. var useCompatibilityMode: Bool { // Use compatibility mode if not presented within the Reader - guard let tabBarController = RootViewControllerCoordinator.sharedPresenter.rootViewController as? WPTabBarController else { + guard let tabBarController = RootViewCoordinator.sharedPresenter.rootViewController as? WPTabBarController else { return false } return tabBarController.readerNavigationController.viewControllers.contains(self) == false diff --git a/WordPress/Classes/ViewRelated/Reader/ReaderSaveForLaterAction.swift b/WordPress/Classes/ViewRelated/Reader/ReaderSaveForLaterAction.swift index 5f87767f1705..e335713c22e0 100644 --- a/WordPress/Classes/ViewRelated/Reader/ReaderSaveForLaterAction.swift +++ b/WordPress/Classes/ViewRelated/Reader/ReaderSaveForLaterAction.swift @@ -65,7 +65,7 @@ final class ReaderSaveForLaterAction { actionTitle: Strings.viewAll, actionHandler: { _ in self.trackViewAllSavedPostsAction(origin: origin) - RootViewControllerCoordinator.sharedPresenter.switchToSavedPosts() + RootViewCoordinator.sharedPresenter.switchToSavedPosts() }) present(notice) diff --git a/WordPress/Classes/ViewRelated/Reader/ReaderStreamViewController.swift b/WordPress/Classes/ViewRelated/Reader/ReaderStreamViewController.swift index 9b1f3490f5c5..e4a6a662b5ea 100644 --- a/WordPress/Classes/ViewRelated/Reader/ReaderStreamViewController.swift +++ b/WordPress/Classes/ViewRelated/Reader/ReaderStreamViewController.swift @@ -798,7 +798,7 @@ import Combine } private func showFollowing() { - RootViewControllerCoordinator.sharedPresenter.switchToFollowedSites() + RootViewCoordinator.sharedPresenter.switchToFollowedSites() } // MARK: - Blocking @@ -1587,7 +1587,7 @@ extension ReaderStreamViewController: WPTableViewHandlerDelegate { private func resetReaderDiscoverNudgeFlow() { shouldShowCommentSpotlight = false - RootViewControllerCoordinator.sharedPresenter.resetReaderDiscoverNudgeFlow() + RootViewCoordinator.sharedPresenter.resetReaderDiscoverNudgeFlow() } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { diff --git a/WordPress/Classes/ViewRelated/Reader/Tab Navigation/ReaderTabViewController.swift b/WordPress/Classes/ViewRelated/Reader/Tab Navigation/ReaderTabViewController.swift index 1e3010c66c74..426dd587ef5a 100644 --- a/WordPress/Classes/ViewRelated/Reader/Tab Navigation/ReaderTabViewController.swift +++ b/WordPress/Classes/ViewRelated/Reader/Tab Navigation/ReaderTabViewController.swift @@ -57,7 +57,7 @@ class ReaderTabViewController: UIViewController { ReaderTracker.shared.start(.main) if AppConfiguration.showsWhatIsNew { - RootViewControllerCoordinator.shared.presentWhatIsNew(on: self) + RootViewCoordinator.shared.presentWhatIsNew(on: self) } } @@ -162,7 +162,7 @@ extension ReaderTabViewController: UIViewControllerRestoration { let index = Int(coder.decodeInt32(forKey: ReaderTabViewController.encodedIndexKey)) - let controller = RootViewControllerCoordinator.sharedPresenter.readerTabViewController + let controller = RootViewCoordinator.sharedPresenter.readerTabViewController controller?.setStartIndex(index) return controller diff --git a/WordPress/Classes/ViewRelated/Site Creation/Final Assembly/SiteAssemblyWizardContent.swift b/WordPress/Classes/ViewRelated/Site Creation/Final Assembly/SiteAssemblyWizardContent.swift index 0a02a93006b6..16f4dea3d909 100644 --- a/WordPress/Classes/ViewRelated/Site Creation/Final Assembly/SiteAssemblyWizardContent.swift +++ b/WordPress/Classes/ViewRelated/Site Creation/Final Assembly/SiteAssemblyWizardContent.swift @@ -242,7 +242,7 @@ extension SiteAssemblyWizardContent: NUXButtonViewControllerDelegate { } self.dismissTapped(viaDone: true) { [blog, weak self] in - RootViewControllerCoordinator.sharedPresenter.showBlogDetails(for: blog) + RootViewCoordinator.sharedPresenter.showBlogDetails(for: blog) // present quick start, and mark site title as complete if they already selected one guard let self = self else { @@ -259,7 +259,7 @@ extension SiteAssemblyWizardContent: NUXButtonViewControllerDelegate { return } - let rootViewController = RootViewControllerCoordinator.sharedPresenter.rootViewController + let rootViewController = RootViewCoordinator.sharedPresenter.rootViewController let quickstartPrompt = QuickStartPromptViewController(blog: blog) quickstartPrompt.onDismiss = { blog, showQuickStart in if showQuickStart { diff --git a/WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsInsightsTableViewController.swift b/WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsInsightsTableViewController.swift index 086ddaa4192a..943373f55361 100644 --- a/WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsInsightsTableViewController.swift +++ b/WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsInsightsTableViewController.swift @@ -359,7 +359,7 @@ extension SiteStatsInsightsTableViewController: SiteStatsInsightsDelegate { } func showCreatePost() { - RootViewControllerCoordinator.sharedPresenter.showPostTab { [weak self] in + RootViewCoordinator.sharedPresenter.showPostTab { [weak self] in self?.refreshInsights() } } @@ -518,8 +518,8 @@ extension SiteStatsInsightsTableViewController: SiteStatsInsightsDelegate { } self.navigationController?.popToRootViewController(animated: false) - RootViewControllerCoordinator.sharedPresenter.showReaderTab() - if let tabBarController = RootViewControllerCoordinator.sharedPresenter.rootViewController as? WPTabBarController, + RootViewCoordinator.sharedPresenter.showReaderTab() + if let tabBarController = RootViewCoordinator.sharedPresenter.rootViewController as? WPTabBarController, let nc = tabBarController.selectedViewController as? UINavigationController, let vc = nc.topViewController as? ReaderTabViewController { vc.presentDiscoverTab() diff --git a/WordPress/Classes/ViewRelated/Support/SupportTableViewController.swift b/WordPress/Classes/ViewRelated/Support/SupportTableViewController.swift index 72932ce65440..ffe603587d7e 100644 --- a/WordPress/Classes/ViewRelated/Support/SupportTableViewController.swift +++ b/WordPress/Classes/ViewRelated/Support/SupportTableViewController.swift @@ -73,7 +73,7 @@ class SupportTableViewController: UITableViewController { navigationController.modalPresentationStyle = .formSheet } - let rootViewController = RootViewControllerCoordinator.sharedPresenter.rootViewController + let rootViewController = RootViewCoordinator.sharedPresenter.rootViewController if let presentedVC = rootViewController.presentedViewController { presentedVC.present(navigationController, animated: true) } else { diff --git a/WordPress/Classes/ViewRelated/System/Coordinators/ReaderCoordinator.swift b/WordPress/Classes/ViewRelated/System/Coordinators/ReaderCoordinator.swift index 3cfae8aecad6..e999368294fe 100644 --- a/WordPress/Classes/ViewRelated/System/Coordinators/ReaderCoordinator.swift +++ b/WordPress/Classes/ViewRelated/System/Coordinators/ReaderCoordinator.swift @@ -13,35 +13,35 @@ class ReaderCoordinator: NSObject { } func showReaderTab() { - RootViewControllerCoordinator.sharedPresenter.showReaderTab() + RootViewCoordinator.sharedPresenter.showReaderTab() } func showDiscover() { - RootViewControllerCoordinator.sharedPresenter.switchToDiscover() + RootViewCoordinator.sharedPresenter.switchToDiscover() } func showSearch() { - RootViewControllerCoordinator.sharedPresenter.navigateToReaderSearch() + RootViewCoordinator.sharedPresenter.navigateToReaderSearch() } func showA8C() { - RootViewControllerCoordinator.sharedPresenter.switchToTopic(where: { topic in + RootViewCoordinator.sharedPresenter.switchToTopic(where: { topic in return (topic as? ReaderTeamTopic)?.slug == ReaderTeamTopic.a8cSlug }) } func showP2() { - RootViewControllerCoordinator.sharedPresenter.switchToTopic(where: { topic in + RootViewCoordinator.sharedPresenter.switchToTopic(where: { topic in return (topic as? ReaderTeamTopic)?.slug == ReaderTeamTopic.p2Slug }) } func showMyLikes() { - RootViewControllerCoordinator.sharedPresenter.switchToMyLikes() + RootViewCoordinator.sharedPresenter.switchToMyLikes() } func showManageFollowing() { - RootViewControllerCoordinator.sharedPresenter.switchToFollowedSites() + RootViewCoordinator.sharedPresenter.switchToFollowedSites() } func showList(named listName: String, forUser user: String) { @@ -53,7 +53,7 @@ class ReaderCoordinator: NSObject { return } - RootViewControllerCoordinator.sharedPresenter.switchToTopic(where: { $0 == topic }) + RootViewCoordinator.sharedPresenter.switchToTopic(where: { $0 == topic }) } func showTag(named tagName: String) { @@ -62,7 +62,7 @@ class ReaderCoordinator: NSObject { getTagTopic(tagSlug: slug) { result in guard let topic = try? result.get() else { return } - RootViewControllerCoordinator.sharedPresenter.navigateToReaderTag(topic) + RootViewCoordinator.sharedPresenter.navigateToReaderTag(topic) } } @@ -91,7 +91,7 @@ class ReaderCoordinator: NSObject { return } - RootViewControllerCoordinator.sharedPresenter.navigateToReaderSite(topic) + RootViewCoordinator.sharedPresenter.navigateToReaderSite(topic) } } @@ -134,7 +134,7 @@ class ReaderCoordinator: NSObject { } detailViewController.postLoadFailureBlock = postLoadFailureBlock - RootViewControllerCoordinator.sharedPresenter.navigateToReader(detailViewController) + RootViewCoordinator.sharedPresenter.navigateToReader(detailViewController) } } diff --git a/WordPress/Classes/ViewRelated/What's New/Dependency container/RootViewControllerCoordinator+WhatIsNew.swift b/WordPress/Classes/ViewRelated/What's New/Dependency container/RootViewCoordinator+WhatIsNew.swift similarity index 97% rename from WordPress/Classes/ViewRelated/What's New/Dependency container/RootViewControllerCoordinator+WhatIsNew.swift rename to WordPress/Classes/ViewRelated/What's New/Dependency container/RootViewCoordinator+WhatIsNew.swift index 25db3bd994dd..b610032bce8b 100644 --- a/WordPress/Classes/ViewRelated/What's New/Dependency container/RootViewControllerCoordinator+WhatIsNew.swift +++ b/WordPress/Classes/ViewRelated/What's New/Dependency container/RootViewCoordinator+WhatIsNew.swift @@ -1,6 +1,6 @@ /// dependency container for the What's New / Feature Announcements scene -extension RootViewControllerCoordinator { +extension RootViewCoordinator { @objc func presentWhatIsNew(on viewController: UIViewController) { diff --git a/WordPress/WordPress.xcodeproj/project.pbxproj b/WordPress/WordPress.xcodeproj/project.pbxproj index b8b613f378b0..76a87ca0204c 100644 --- a/WordPress/WordPress.xcodeproj/project.pbxproj +++ b/WordPress/WordPress.xcodeproj/project.pbxproj @@ -722,7 +722,7 @@ 3F662C4A24DC9FAC00CAEA95 /* WhatIsNewViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F662C4924DC9FAC00CAEA95 /* WhatIsNewViewController.swift */; }; 3F685B6A26D431FA001C6808 /* DomainSuggestionViewControllerWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FAF9CC426D03C7400268EA2 /* DomainSuggestionViewControllerWrapper.swift */; }; 3F6975FF242D941E001F1807 /* ReaderTabViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F6975FE242D941E001F1807 /* ReaderTabViewModel.swift */; }; - 3F6A7E92251BC1DC005B6A61 /* RootViewControllerCoordinator+WhatIsNew.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F6A7E91251BC1DC005B6A61 /* RootViewControllerCoordinator+WhatIsNew.swift */; }; + 3F6A7E92251BC1DC005B6A61 /* RootViewCoordinator+WhatIsNew.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F6A7E91251BC1DC005B6A61 /* RootViewCoordinator+WhatIsNew.swift */; }; 3F6AD0562502A91400080F3B /* AnnouncementsCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F6AD0552502A91400080F3B /* AnnouncementsCache.swift */; }; 3F6BC04B25B2474C007369D3 /* FeatureFlag.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1D690151F828FF000200E30 /* FeatureFlag.swift */; }; 3F6BC05C25B24773007369D3 /* FeatureFlagOverrideStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17A09B98238FE13B0022AE0D /* FeatureFlagOverrideStore.swift */; }; @@ -1558,8 +1558,8 @@ 8031F34B292FF46E00E8F95E /* ExtensionConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 800035C0292307E8007D2D26 /* ExtensionConfiguration.swift */; }; 8031F34C29302A2500E8F95E /* ExtensionConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 800035C229230A0B007D2D26 /* ExtensionConfiguration.swift */; }; 8031F34D29302C8100E8F95E /* ExtensionConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 800035C0292307E8007D2D26 /* ExtensionConfiguration.swift */; }; - 803BB9792959543D00B3F6D6 /* RootViewControllerCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803BB9782959543D00B3F6D6 /* RootViewControllerCoordinator.swift */; }; - 803BB97A2959543D00B3F6D6 /* RootViewControllerCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803BB9782959543D00B3F6D6 /* RootViewControllerCoordinator.swift */; }; + 803BB9792959543D00B3F6D6 /* RootViewCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803BB9782959543D00B3F6D6 /* RootViewCoordinator.swift */; }; + 803BB97A2959543D00B3F6D6 /* RootViewCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803BB9782959543D00B3F6D6 /* RootViewCoordinator.swift */; }; 803BB97C2959559500B3F6D6 /* RootViewPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803BB97B2959559500B3F6D6 /* RootViewPresenter.swift */; }; 803BB97D2959559500B3F6D6 /* RootViewPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803BB97B2959559500B3F6D6 /* RootViewPresenter.swift */; }; 803BB980295957CF00B3F6D6 /* WPTabBarController+RootViewPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803BB97F295957CF00B3F6D6 /* WPTabBarController+RootViewPresenter.swift */; }; @@ -4711,7 +4711,7 @@ FABB24732602FC2C00C8785C /* PostTagService.m in Sources */ = {isa = PBXBuildFile; fileRef = 082AB9D81C4EEEF4000CA523 /* PostTagService.m */; }; FABB24742602FC2C00C8785C /* ReaderTabViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F6975FE242D941E001F1807 /* ReaderTabViewModel.swift */; }; FABB24752602FC2C00C8785C /* ReaderSearchSuggestionService.swift in Sources */ = {isa = PBXBuildFile; fileRef = E62079E01CF7A61200F5CD46 /* ReaderSearchSuggestionService.swift */; }; - FABB24762602FC2C00C8785C /* RootViewControllerCoordinator+WhatIsNew.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F6A7E91251BC1DC005B6A61 /* RootViewControllerCoordinator+WhatIsNew.swift */; }; + FABB24762602FC2C00C8785C /* RootViewCoordinator+WhatIsNew.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F6A7E91251BC1DC005B6A61 /* RootViewCoordinator+WhatIsNew.swift */; }; FABB24772602FC2C00C8785C /* CachedAnimatedImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF8A04DF1D9BFE7400523BC4 /* CachedAnimatedImageView.swift */; }; FABB24782602FC2C00C8785C /* AccountToAccount20to21.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5A6CEA519FA800E009F07DE /* AccountToAccount20to21.swift */; }; FABB24792602FC2C00C8785C /* AutoUploadMessageProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = F16C35DB23F3F78E00C81331 /* AutoUploadMessageProvider.swift */; }; @@ -5276,8 +5276,8 @@ FEAC916F28001FC4005026E7 /* AvatarTrainView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEAC916D28001FC4005026E7 /* AvatarTrainView.swift */; }; FEC26030283FBA1A003D886A /* BloggingPromptCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEC2602F283FBA1A003D886A /* BloggingPromptCoordinator.swift */; }; FEC26031283FBA1A003D886A /* BloggingPromptCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEC2602F283FBA1A003D886A /* BloggingPromptCoordinator.swift */; }; - FEC26033283FC902003D886A /* RootViewControllerCoordinator+BloggingPrompt.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEC26032283FC902003D886A /* RootViewControllerCoordinator+BloggingPrompt.swift */; }; - FEC26034283FC902003D886A /* RootViewControllerCoordinator+BloggingPrompt.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEC26032283FC902003D886A /* RootViewControllerCoordinator+BloggingPrompt.swift */; }; + FEC26033283FC902003D886A /* RootViewCoordinator+BloggingPrompt.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEC26032283FC902003D886A /* RootViewCoordinator+BloggingPrompt.swift */; }; + FEC26034283FC902003D886A /* RootViewCoordinator+BloggingPrompt.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEC26032283FC902003D886A /* RootViewCoordinator+BloggingPrompt.swift */; }; FECA442F28350B7800D01F15 /* PromptRemindersScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = FECA442E28350B7800D01F15 /* PromptRemindersScheduler.swift */; }; FECA443028350B7800D01F15 /* PromptRemindersScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = FECA442E28350B7800D01F15 /* PromptRemindersScheduler.swift */; }; FECA44322836647100D01F15 /* PromptRemindersSchedulerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FECA44312836647100D01F15 /* PromptRemindersSchedulerTests.swift */; }; @@ -6135,7 +6135,7 @@ 3F63B93B258179D100F581BE /* StatsWidgetEntry.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatsWidgetEntry.swift; sourceTree = ""; }; 3F662C4924DC9FAC00CAEA95 /* WhatIsNewViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WhatIsNewViewController.swift; sourceTree = ""; }; 3F6975FE242D941E001F1807 /* ReaderTabViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReaderTabViewModel.swift; sourceTree = ""; }; - 3F6A7E91251BC1DC005B6A61 /* RootViewControllerCoordinator+WhatIsNew.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "RootViewControllerCoordinator+WhatIsNew.swift"; sourceTree = ""; }; + 3F6A7E91251BC1DC005B6A61 /* RootViewCoordinator+WhatIsNew.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "RootViewCoordinator+WhatIsNew.swift"; sourceTree = ""; }; 3F6AD0552502A91400080F3B /* AnnouncementsCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnnouncementsCache.swift; sourceTree = ""; }; 3F6DA04025646F96002AB88F /* HomeWidgetData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeWidgetData.swift; sourceTree = ""; }; 3F720C2028899DD900519938 /* JetpackBrandingVisibility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JetpackBrandingVisibility.swift; sourceTree = ""; }; @@ -6885,7 +6885,7 @@ 801D9519291AC0B00051993E /* JetpackOverlayFrequencyTracker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JetpackOverlayFrequencyTracker.swift; sourceTree = ""; }; 801D951C291ADB7E0051993E /* JetpackOverlayFrequencyTrackerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JetpackOverlayFrequencyTrackerTests.swift; sourceTree = ""; }; 80293CF6284450AD0083F946 /* WordPress-Swift.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "WordPress-Swift.h"; sourceTree = ""; }; - 803BB9782959543D00B3F6D6 /* RootViewControllerCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootViewControllerCoordinator.swift; sourceTree = ""; }; + 803BB9782959543D00B3F6D6 /* RootViewCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootViewCoordinator.swift; sourceTree = ""; }; 803BB97B2959559500B3F6D6 /* RootViewPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootViewPresenter.swift; sourceTree = ""; }; 803BB97F295957CF00B3F6D6 /* WPTabBarController+RootViewPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WPTabBarController+RootViewPresenter.swift"; sourceTree = ""; }; 803BB982295957F600B3F6D6 /* MySitesCoordinator+RootViewPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MySitesCoordinator+RootViewPresenter.swift"; sourceTree = ""; }; @@ -8867,7 +8867,7 @@ FEAC916D28001FC4005026E7 /* AvatarTrainView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AvatarTrainView.swift; sourceTree = ""; }; FEB7A8922718852A00A8CF85 /* WordPress 134.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "WordPress 134.xcdatamodel"; sourceTree = ""; }; FEC2602F283FBA1A003D886A /* BloggingPromptCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BloggingPromptCoordinator.swift; sourceTree = ""; }; - FEC26032283FC902003D886A /* RootViewControllerCoordinator+BloggingPrompt.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "RootViewControllerCoordinator+BloggingPrompt.swift"; sourceTree = ""; }; + FEC26032283FC902003D886A /* RootViewCoordinator+BloggingPrompt.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "RootViewCoordinator+BloggingPrompt.swift"; sourceTree = ""; }; FECA442E28350B7800D01F15 /* PromptRemindersScheduler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PromptRemindersScheduler.swift; sourceTree = ""; }; FECA44312836647100D01F15 /* PromptRemindersSchedulerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PromptRemindersSchedulerTests.swift; sourceTree = ""; }; FED65D78293511E4008071BF /* SharedDataIssueSolver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SharedDataIssueSolver.swift; sourceTree = ""; }; @@ -10828,7 +10828,7 @@ 3F6A7E90251BC1C4005B6A61 /* Dependency container */ = { isa = PBXGroup; children = ( - 3F6A7E91251BC1DC005B6A61 /* RootViewControllerCoordinator+WhatIsNew.swift */, + 3F6A7E91251BC1DC005B6A61 /* RootViewCoordinator+WhatIsNew.swift */, ); path = "Dependency container"; sourceTree = ""; @@ -12521,7 +12521,7 @@ 803BB97E295957A200B3F6D6 /* Root View */ = { isa = PBXGroup; children = ( - 803BB9782959543D00B3F6D6 /* RootViewControllerCoordinator.swift */, + 803BB9782959543D00B3F6D6 /* RootViewCoordinator.swift */, 803BB97B2959559500B3F6D6 /* RootViewPresenter.swift */, 803BB985295A873800B3F6D6 /* RootViewPresenter+MeNavigation.swift */, 803BB988295B80D300B3F6D6 /* RootViewPresenter+EditorNavigation.swift */, @@ -13650,7 +13650,7 @@ 98517E5828220411001FFD45 /* BloggingPromptTableViewCell.swift */, 98517E5B28220474001FFD45 /* BloggingPromptTableViewCell.xib */, FEC2602F283FBA1A003D886A /* BloggingPromptCoordinator.swift */, - FEC26032283FC902003D886A /* RootViewControllerCoordinator+BloggingPrompt.swift */, + FEC26032283FC902003D886A /* RootViewCoordinator+BloggingPrompt.swift */, ); path = "Blogging Prompts"; sourceTree = ""; @@ -21166,7 +21166,7 @@ 082AB9D91C4EEEF4000CA523 /* PostTagService.m in Sources */, 3F6975FF242D941E001F1807 /* ReaderTabViewModel.swift in Sources */, E62079E11CF7A61200F5CD46 /* ReaderSearchSuggestionService.swift in Sources */, - 3F6A7E92251BC1DC005B6A61 /* RootViewControllerCoordinator+WhatIsNew.swift in Sources */, + 3F6A7E92251BC1DC005B6A61 /* RootViewCoordinator+WhatIsNew.swift in Sources */, 3FAE0652287C8FC500F46508 /* JPScrollViewDelegate.swift in Sources */, FF8A04E01D9BFE7400523BC4 /* CachedAnimatedImageView.swift in Sources */, B5A6CEA619FA800E009F07DE /* AccountToAccount20to21.swift in Sources */, @@ -21182,7 +21182,7 @@ F10465142554260600655194 /* BindableTapGestureRecognizer.swift in Sources */, E62079DF1CF79FC200F5CD46 /* ReaderSearchSuggestion.swift in Sources */, E64ECA4D1CE62041000188A0 /* ReaderSearchViewController.swift in Sources */, - 803BB9792959543D00B3F6D6 /* RootViewControllerCoordinator.swift in Sources */, + 803BB9792959543D00B3F6D6 /* RootViewCoordinator.swift in Sources */, 98F537A722496CF300B334F9 /* SiteStatsTableHeaderView.swift in Sources */, E14977181C0DC0770057CD60 /* MediaSizeSliderCell.swift in Sources */, C7BB60162863609C00748FD9 /* QRLoginInternetConnectionChecker.swift in Sources */, @@ -21552,7 +21552,7 @@ E15632CC1EB9ECF40035A099 /* TableViewKeyboardObserver.swift in Sources */, E1A03F48174283E10085D192 /* BlogToJetpackAccount.m in Sources */, B522C4F81B3DA79B00E47B59 /* NotificationSettingsViewController.swift in Sources */, - FEC26033283FC902003D886A /* RootViewControllerCoordinator+BloggingPrompt.swift in Sources */, + FEC26033283FC902003D886A /* RootViewCoordinator+BloggingPrompt.swift in Sources */, 93E63369272AC532009DACF8 /* LoginEpilogueChooseSiteTableViewCell.swift in Sources */, 9A51DA1522E9E8C7005CC335 /* ChangeUsernameViewController.swift in Sources */, 5D6C4B121B604190005E3C43 /* RichTextView.swift in Sources */, @@ -22893,7 +22893,7 @@ FABB21762602FC2C00C8785C /* CameraHandler.swift in Sources */, FA73D7EA27987BA500DF24B3 /* SitePickerViewController+SiteIcon.swift in Sources */, FABB21772602FC2C00C8785C /* JetpackConnectionViewController.swift in Sources */, - 803BB97A2959543D00B3F6D6 /* RootViewControllerCoordinator.swift in Sources */, + 803BB97A2959543D00B3F6D6 /* RootViewCoordinator.swift in Sources */, FABB21782602FC2C00C8785C /* NotificationActionsService.swift in Sources */, FABB21792602FC2C00C8785C /* JetpackScanService.swift in Sources */, FABB217A2602FC2C00C8785C /* FilterSheetView.swift in Sources */, @@ -23864,7 +23864,7 @@ FADFBD27265F580500039C41 /* MultilineButton.swift in Sources */, C71AF534281064DE00F9E99E /* OnboardingQuestionsCoordinator.swift in Sources */, FABB24752602FC2C00C8785C /* ReaderSearchSuggestionService.swift in Sources */, - FABB24762602FC2C00C8785C /* RootViewControllerCoordinator+WhatIsNew.swift in Sources */, + FABB24762602FC2C00C8785C /* RootViewCoordinator+WhatIsNew.swift in Sources */, FABB24772602FC2C00C8785C /* CachedAnimatedImageView.swift in Sources */, FABB24782602FC2C00C8785C /* AccountToAccount20to21.swift in Sources */, FABB24792602FC2C00C8785C /* AutoUploadMessageProvider.swift in Sources */, @@ -24320,7 +24320,7 @@ 46F583B02624CE790010A723 /* BlockEditorSettingElement+CoreDataProperties.swift in Sources */, FABB25D22602FC2C00C8785C /* SiteSegmentsWizardContent.swift in Sources */, FABB25D32602FC2C00C8785C /* ReaderTopicToReaderDefaultTopic37to38.swift in Sources */, - FEC26034283FC902003D886A /* RootViewControllerCoordinator+BloggingPrompt.swift in Sources */, + FEC26034283FC902003D886A /* RootViewCoordinator+BloggingPrompt.swift in Sources */, FABB25D42602FC2C00C8785C /* UploadsManager.swift in Sources */, 9856A3E5261FD27A008D6354 /* UserProfileSectionHeader.swift in Sources */, FABB25D62602FC2C00C8785C /* ActivityListSectionHeaderView.swift in Sources */, diff --git a/WordPress/WordPressShareExtension/ShareNoticeNavigationCoordinator.swift b/WordPress/WordPressShareExtension/ShareNoticeNavigationCoordinator.swift index 51d1ed15c8c1..ed1ed9b94f76 100644 --- a/WordPress/WordPressShareExtension/ShareNoticeNavigationCoordinator.swift +++ b/WordPress/WordPressShareExtension/ShareNoticeNavigationCoordinator.swift @@ -19,13 +19,13 @@ class ShareNoticeNavigationCoordinator { let editor = EditPostViewController.init(post: post) editor.modalPresentationStyle = .fullScreen - RootViewControllerCoordinator.sharedPresenter.rootViewController.present(editor, animated: false) + RootViewCoordinator.sharedPresenter.rootViewController.present(editor, animated: false) } static func navigateToPostList(with userInfo: NSDictionary) { fetchPost(from: userInfo, onSuccess: { post in if let post = post { - RootViewControllerCoordinator.sharedPresenter.showPosts(for: post.blog) + RootViewCoordinator.sharedPresenter.showPosts(for: post.blog) } }, onFailure: { DDLogError("Could not fetch post from share notification.") @@ -35,7 +35,7 @@ class ShareNoticeNavigationCoordinator { static func navigateToBlogDetails(with userInfo: NSDictionary) { fetchBlog(from: userInfo, onSuccess: { blog in if let blog = blog { - RootViewControllerCoordinator.sharedPresenter.showBlogDetails(for: blog) + RootViewCoordinator.sharedPresenter.showBlogDetails(for: blog) } }, onFailure: { DDLogError("Could not fetch blog from share notification.") From d3f07f3c0c74965cfc5fff0321dce90fe1d7a3e0 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Wed, 28 Dec 2022 03:31:13 +0200 Subject: [PATCH 36/47] Add: release note --- RELEASE-NOTES.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index ae0fe15a630c..3cb118ead490 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -1,3 +1,7 @@ +21.5 +----- +* [***] [internal] A significant refactor to the app’s architecture was made to allow for the new simplified UI. Regression testing on the app’s main flows is needed. [#19817] + 21.4 ----- * [*] Fixed an issue where publishing Posts and Pages could fail under certain conditions. [#19717] From fb960a3a0d8fb5d5390ee2911d8eb9425d1c8a45 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Thu, 29 Dec 2022 16:30:02 +0200 Subject: [PATCH 37/47] Update: make `RootViewPresenter.mySitesCoordinator` optional --- .../System/3DTouch/WP3DTouchShortcutHandler.swift | 2 +- .../System/MySitesCoordinator+RootViewPresenter.swift | 2 +- .../System/RootViewPresenter+EditorNavigation.swift | 4 ++-- WordPress/Classes/System/RootViewPresenter.swift | 2 +- .../System/WPTabBarController+RootViewPresenter.swift | 10 +++++----- .../Utility/InteractiveNotificationsManager.swift | 4 ++-- .../BlogDetailsViewController+SectionHelpers.swift | 2 +- .../MySiteViewController+OnboardingPrompt.swift | 2 +- .../StatsRevampV2IntroductionPresenter.swift | 2 +- .../Classes/ViewRelated/System/WPTabBarController.h | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/WordPress/Classes/System/3DTouch/WP3DTouchShortcutHandler.swift b/WordPress/Classes/System/3DTouch/WP3DTouchShortcutHandler.swift index 2127f862ee8c..da540db2d6ab 100644 --- a/WordPress/Classes/System/3DTouch/WP3DTouchShortcutHandler.swift +++ b/WordPress/Classes/System/3DTouch/WP3DTouchShortcutHandler.swift @@ -43,7 +43,7 @@ open class WP3DTouchShortcutHandler: NSObject { WPAnalytics.track(.shortcutStats) clearCurrentViewController() if let mainBlog = Blog.lastUsedOrFirst(in: ContextManager.sharedInstance().mainContext) { - rootViewPresenter.mySitesCoordinator.showStats(for: mainBlog) + rootViewPresenter.mySitesCoordinator?.showStats(for: mainBlog) } return true case ShortcutIdentifier.Notifications.type: diff --git a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift index 7532cfe9e05a..716f98f55ef1 100644 --- a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift +++ b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift @@ -82,7 +82,7 @@ extension MySitesCoordinator: RootViewPresenter { // MARK: My Site - var mySitesCoordinator: MySitesCoordinator! { + var mySitesCoordinator: MySitesCoordinator? { return self } diff --git a/WordPress/Classes/System/RootViewPresenter+EditorNavigation.swift b/WordPress/Classes/System/RootViewPresenter+EditorNavigation.swift index 3e0e52a0a5f7..342744521d5b 100644 --- a/WordPress/Classes/System/RootViewPresenter+EditorNavigation.swift +++ b/WordPress/Classes/System/RootViewPresenter+EditorNavigation.swift @@ -17,7 +17,7 @@ extension RootViewPresenter { let context = ContextManager.shared.mainContext // Ignore taps on the post tab and instead show the modal. if Blog.count(in: context) == 0 { - mySitesCoordinator.showAddNewSite() + mySitesCoordinator?.showAddNewSite() } else { showPostTab(animated: true, toMedia: false, completion: afterDismiss) } @@ -26,7 +26,7 @@ extension RootViewPresenter { func showPostTab(for blog: Blog) { let context = ContextManager.shared.mainContext if Blog.count(in: context) == 0 { - mySitesCoordinator.showAddNewSite() + mySitesCoordinator?.showAddNewSite() } else { showPostTab(animated: true, toMedia: false, blog: blog) } diff --git a/WordPress/Classes/System/RootViewPresenter.swift b/WordPress/Classes/System/RootViewPresenter.swift index e2c7a7ca8d49..55e93892dfb7 100644 --- a/WordPress/Classes/System/RootViewPresenter.swift +++ b/WordPress/Classes/System/RootViewPresenter.swift @@ -30,7 +30,7 @@ protocol RootViewPresenter: AnyObject { // MARK: My Site - var mySitesCoordinator: MySitesCoordinator! { get } + var mySitesCoordinator: MySitesCoordinator? { get } func showMySitesTab() func showPages(for blog: Blog) func showPosts(for blog: Blog) diff --git a/WordPress/Classes/System/WPTabBarController+RootViewPresenter.swift b/WordPress/Classes/System/WPTabBarController+RootViewPresenter.swift index ef1371a88c47..41e84b57fda2 100644 --- a/WordPress/Classes/System/WPTabBarController+RootViewPresenter.swift +++ b/WordPress/Classes/System/WPTabBarController+RootViewPresenter.swift @@ -15,7 +15,7 @@ extension WPTabBarController: RootViewPresenter { } func showBlogDetails(for blog: Blog) { - mySitesCoordinator.showBlogDetails(for: blog) + mySitesCoordinator?.showBlogDetails(for: blog) } func getMeScenePresenter() -> ScenePresenter { @@ -26,20 +26,20 @@ extension WPTabBarController: RootViewPresenter { guard selectedIndex == WPTab.mySites.rawValue else { return nil } - return mySitesCoordinator.currentBlog + return mySitesCoordinator?.currentBlog } // MARK: My Site func showPages(for blog: Blog) { - mySitesCoordinator.showPages(for: blog) + mySitesCoordinator?.showPages(for: blog) } func showPosts(for blog: Blog) { - mySitesCoordinator.showPosts(for: blog) + mySitesCoordinator?.showPosts(for: blog) } func showMedia(for blog: Blog) { - mySitesCoordinator.showMedia(for: blog) + mySitesCoordinator?.showMedia(for: blog) } } diff --git a/WordPress/Classes/Utility/InteractiveNotificationsManager.swift b/WordPress/Classes/Utility/InteractiveNotificationsManager.swift index e350320ee656..6c9d89d77e91 100644 --- a/WordPress/Classes/Utility/InteractiveNotificationsManager.swift +++ b/WordPress/Classes/Utility/InteractiveNotificationsManager.swift @@ -210,7 +210,7 @@ final class InteractiveNotificationsManager: NSObject { if identifier == UNNotificationDefaultActionIdentifier { let targetBlog: Blog? = blog(from: threadId) - RootViewCoordinator.sharedPresenter.mySitesCoordinator.showCreateSheet(for: targetBlog) + RootViewCoordinator.sharedPresenter.mySitesCoordinator?.showCreateSheet(for: targetBlog) } case .weeklyRoundup: let targetBlog = blog(from: userInfo) @@ -226,7 +226,7 @@ final class InteractiveNotificationsManager: NSObject { let targetDate = date(from: userInfo) - RootViewCoordinator.sharedPresenter.mySitesCoordinator.showStats( + RootViewCoordinator.sharedPresenter.mySitesCoordinator?.showStats( for: targetBlog, timePeriod: .weeks, date: targetDate) diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController+SectionHelpers.swift b/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController+SectionHelpers.swift index 92a5fc9ff657..a9f83fedba6a 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController+SectionHelpers.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController+SectionHelpers.swift @@ -33,7 +33,7 @@ extension BlogDetailsSubsection { extension BlogDetailsViewController { - @objc class func mySitesCoordinator() -> MySitesCoordinator { + @objc class func mySitesCoordinator() -> MySitesCoordinator? { RootViewCoordinator.sharedPresenter.mySitesCoordinator } diff --git a/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController+OnboardingPrompt.swift b/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController+OnboardingPrompt.swift index 8d1ffaef503e..bee25bc1a455 100644 --- a/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController+OnboardingPrompt.swift +++ b/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController+OnboardingPrompt.swift @@ -17,7 +17,7 @@ extension MySiteViewController { case .stats: // Show the stats view for the current blog if let blog = blog { - RootViewCoordinator.sharedPresenter.mySitesCoordinator.showStats(for: blog, timePeriod: .insights) + RootViewCoordinator.sharedPresenter.mySitesCoordinator?.showStats(for: blog, timePeriod: .insights) } case .writing: // Open the editor diff --git a/WordPress/Classes/ViewRelated/Feature Introduction/Stats Revamp v2/StatsRevampV2IntroductionPresenter.swift b/WordPress/Classes/ViewRelated/Feature Introduction/Stats Revamp v2/StatsRevampV2IntroductionPresenter.swift index 45fc6ba0cf73..1e25fb2878f8 100644 --- a/WordPress/Classes/ViewRelated/Feature Introduction/Stats Revamp v2/StatsRevampV2IntroductionPresenter.swift +++ b/WordPress/Classes/ViewRelated/Feature Introduction/Stats Revamp v2/StatsRevampV2IntroductionPresenter.swift @@ -44,7 +44,7 @@ class StatsRevampV2IntroductionPresenter: NSObject { return } - RootViewCoordinator.sharedPresenter.mySitesCoordinator.showStats(for: blog, timePeriod: .insights) + RootViewCoordinator.sharedPresenter.mySitesCoordinator?.showStats(for: blog, timePeriod: .insights) } // "Remind Me" prompt diff --git a/WordPress/Classes/ViewRelated/System/WPTabBarController.h b/WordPress/Classes/ViewRelated/System/WPTabBarController.h index d035fa345587..19e850b76ebf 100644 --- a/WordPress/Classes/ViewRelated/System/WPTabBarController.h +++ b/WordPress/Classes/ViewRelated/System/WPTabBarController.h @@ -23,7 +23,7 @@ extern NSNotificationName const WPTabBarHeightChangedNotification; @property (nonatomic, strong, readonly) NotificationsViewController *notificationsViewController; @property (nonatomic, strong, readonly) UINavigationController *readerNavigationController; -@property (nonatomic, strong, readonly) MySitesCoordinator *mySitesCoordinator; +@property (nonatomic, strong, readonly, nullable) MySitesCoordinator *mySitesCoordinator; @property (nonatomic, strong, readonly) ReaderCoordinator *readerCoordinator; @property (nonatomic, strong) id meScenePresenter; @property (nonatomic, strong, readonly) ReaderTabViewModel *readerTabViewModel; From f03e6c240341e14b357c14414fb8de8cf0f6781a Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Thu, 29 Dec 2022 16:33:19 +0200 Subject: [PATCH 38/47] Update: Make `WPTabBarController.mySitesCoordinator` nullable --- WordPress/Classes/ViewRelated/System/WPTabBarController.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/Classes/ViewRelated/System/WPTabBarController.m b/WordPress/Classes/ViewRelated/System/WPTabBarController.m index 7c6e4bb07a94..7e420ec5b941 100644 --- a/WordPress/Classes/ViewRelated/System/WPTabBarController.m +++ b/WordPress/Classes/ViewRelated/System/WPTabBarController.m @@ -56,7 +56,7 @@ @interface WPTabBarController () Date: Thu, 29 Dec 2022 16:38:47 +0200 Subject: [PATCH 39/47] Update: Add readerCoordinator to RootViewPresenter --- .../Classes/System/MySitesCoordinator+RootViewPresenter.swift | 4 ++++ WordPress/Classes/System/RootViewPresenter.swift | 1 + WordPress/Classes/Utility/Universal Links/Routes+Reader.swift | 3 +-- WordPress/Classes/ViewRelated/System/WPTabBarController.h | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift index 716f98f55ef1..d930cc83847b 100644 --- a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift +++ b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift @@ -28,6 +28,10 @@ extension MySitesCoordinator: RootViewPresenter { return nil } + var readerCoordinator: ReaderCoordinator? { + return nil + } + func showReaderTab() { fallbackBehavior() } diff --git a/WordPress/Classes/System/RootViewPresenter.swift b/WordPress/Classes/System/RootViewPresenter.swift index 55e93892dfb7..55211afd72cf 100644 --- a/WordPress/Classes/System/RootViewPresenter.swift +++ b/WordPress/Classes/System/RootViewPresenter.swift @@ -14,6 +14,7 @@ protocol RootViewPresenter: AnyObject { // MARK: Reader var readerTabViewController: ReaderTabViewController? { get } + var readerCoordinator: ReaderCoordinator? { get } func showReaderTab() func showReaderTab(forPost: NSNumber!, onBlog: NSNumber!) func switchToDiscover() diff --git a/WordPress/Classes/Utility/Universal Links/Routes+Reader.swift b/WordPress/Classes/Utility/Universal Links/Routes+Reader.swift index 3d37dacab930..fe3dda9b6eab 100644 --- a/WordPress/Classes/Utility/Universal Links/Routes+Reader.swift +++ b/WordPress/Classes/Utility/Universal Links/Routes+Reader.swift @@ -62,8 +62,7 @@ extension ReaderRoute: Route { extension ReaderRoute: NavigationAction { func perform(_ values: [String: String], source: UIViewController? = nil, router: LinkRouter) { - guard let tabBarController = RootViewCoordinator.sharedPresenter.rootViewController as? WPTabBarController, - let coordinator = tabBarController.readerCoordinator else { + guard let coordinator = RootViewCoordinator.sharedPresenter.readerCoordinator else { return } diff --git a/WordPress/Classes/ViewRelated/System/WPTabBarController.h b/WordPress/Classes/ViewRelated/System/WPTabBarController.h index 19e850b76ebf..4e67b3c9b6d4 100644 --- a/WordPress/Classes/ViewRelated/System/WPTabBarController.h +++ b/WordPress/Classes/ViewRelated/System/WPTabBarController.h @@ -24,7 +24,7 @@ extern NSNotificationName const WPTabBarHeightChangedNotification; @property (nonatomic, strong, readonly) NotificationsViewController *notificationsViewController; @property (nonatomic, strong, readonly) UINavigationController *readerNavigationController; @property (nonatomic, strong, readonly, nullable) MySitesCoordinator *mySitesCoordinator; -@property (nonatomic, strong, readonly) ReaderCoordinator *readerCoordinator; +@property (nonatomic, strong, readonly, nullable) ReaderCoordinator *readerCoordinator; @property (nonatomic, strong) id meScenePresenter; @property (nonatomic, strong, readonly) ReaderTabViewModel *readerTabViewModel; From 9b95aa5bb01290a9ebe39532ed52bfc27962c3a0 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Thu, 29 Dec 2022 16:49:36 +0200 Subject: [PATCH 40/47] Update: Specify nullability identifiers for `WPTabBarController` --- .../System/MySitesCoordinator+RootViewPresenter.swift | 6 +++--- WordPress/Classes/System/RootViewPresenter.swift | 6 +++--- .../WPTabBarController+ReaderTabNavigation.swift | 4 ++-- WordPress/Classes/ViewRelated/System/WPTabBarController.h | 8 ++++++-- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift index d930cc83847b..8a50e72c1af0 100644 --- a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift +++ b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift @@ -14,7 +14,7 @@ extension MySitesCoordinator: RootViewPresenter { meScenePresenter } - func currentlySelectedScreen() -> String! { + func currentlySelectedScreen() -> String { return "Blog List" } @@ -80,7 +80,7 @@ extension MySitesCoordinator: RootViewPresenter { fallbackBehavior() } - func showReaderTab(forPost: NSNumber!, onBlog: NSNumber!) { + func showReaderTab(forPost: NSNumber, onBlog: NSNumber) { fallbackBehavior() } @@ -105,7 +105,7 @@ extension MySitesCoordinator: RootViewPresenter { fallbackBehavior() } - func showNotificationsTabForNote(withID notificationID: String!) { + func showNotificationsTabForNote(withID notificationID: String) { fallbackBehavior() } diff --git a/WordPress/Classes/System/RootViewPresenter.swift b/WordPress/Classes/System/RootViewPresenter.swift index 55211afd72cf..2231ddab81eb 100644 --- a/WordPress/Classes/System/RootViewPresenter.swift +++ b/WordPress/Classes/System/RootViewPresenter.swift @@ -8,7 +8,7 @@ protocol RootViewPresenter: AnyObject { var currentViewController: UIViewController? { get } func showBlogDetails(for blog: Blog) func getMeScenePresenter() -> ScenePresenter - func currentlySelectedScreen() -> String! + func currentlySelectedScreen() -> String func currentlyVisibleBlog() -> Blog? // MARK: Reader @@ -16,7 +16,7 @@ protocol RootViewPresenter: AnyObject { var readerTabViewController: ReaderTabViewController? { get } var readerCoordinator: ReaderCoordinator? { get } func showReaderTab() - func showReaderTab(forPost: NSNumber!, onBlog: NSNumber!) + func showReaderTab(forPost: NSNumber, onBlog: NSNumber) func switchToDiscover() func switchToSavedPosts() func resetReaderDiscoverNudgeFlow() @@ -40,7 +40,7 @@ protocol RootViewPresenter: AnyObject { // MARK: Notifications func showNotificationsTab() - func showNotificationsTabForNote(withID notificationID: String!) + func showNotificationsTabForNote(withID notificationID: String) func switchNotificationsTabToNotificationSettings() func popNotificationsTabToRoot() diff --git a/WordPress/Classes/ViewRelated/Reader/Tab Navigation/WPTabBarController+ReaderTabNavigation.swift b/WordPress/Classes/ViewRelated/Reader/Tab Navigation/WPTabBarController+ReaderTabNavigation.swift index 1f18fb510b4e..63ee8a865294 100644 --- a/WordPress/Classes/ViewRelated/Reader/Tab Navigation/WPTabBarController+ReaderTabNavigation.swift +++ b/WordPress/Classes/ViewRelated/Reader/Tab Navigation/WPTabBarController+ReaderTabNavigation.swift @@ -78,11 +78,11 @@ extension WPTabBarController { func navigateToReader(_ pushControlller: UIViewController? = nil) { showReaderTab() - readerNavigationController.popToRootViewController(animated: false) + readerNavigationController?.popToRootViewController(animated: false) guard let controller = pushControlller else { return } - readerNavigationController.pushViewController(controller, animated: true) + readerNavigationController?.pushViewController(controller, animated: true) } func resetReaderDiscoverNudgeFlow() { diff --git a/WordPress/Classes/ViewRelated/System/WPTabBarController.h b/WordPress/Classes/ViewRelated/System/WPTabBarController.h index 4e67b3c9b6d4..f55d5dc02f5f 100644 --- a/WordPress/Classes/ViewRelated/System/WPTabBarController.h +++ b/WordPress/Classes/ViewRelated/System/WPTabBarController.h @@ -1,5 +1,7 @@ #import +NS_ASSUME_NONNULL_BEGIN + extern NSString * const WPNewPostURLParamContentKey; extern NSString * const WPNewPostURLParamTagsKey; extern NSString * const WPTabBarCurrentlySelectedScreenSites; @@ -21,8 +23,8 @@ extern NSNotificationName const WPTabBarHeightChangedNotification; @interface WPTabBarController : UITabBarController -@property (nonatomic, strong, readonly) NotificationsViewController *notificationsViewController; -@property (nonatomic, strong, readonly) UINavigationController *readerNavigationController; +@property (nonatomic, strong, readonly, nullable) NotificationsViewController *notificationsViewController; +@property (nonatomic, strong, readonly, nullable) UINavigationController *readerNavigationController; @property (nonatomic, strong, readonly, nullable) MySitesCoordinator *mySitesCoordinator; @property (nonatomic, strong, readonly, nullable) ReaderCoordinator *readerCoordinator; @property (nonatomic, strong) id meScenePresenter; @@ -44,3 +46,5 @@ extern NSNotificationName const WPTabBarHeightChangedNotification; - (void)updateNotificationBadgeVisibility; @end + +NS_ASSUME_NONNULL_END From d8978105f0e302436aa4afe7ffea5f4123c76ebf Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Thu, 29 Dec 2022 16:53:21 +0200 Subject: [PATCH 41/47] Update: Add `readerNavigationController` to RootViewPresenter --- .../Classes/System/MySitesCoordinator+RootViewPresenter.swift | 4 ++++ WordPress/Classes/System/RootViewPresenter.swift | 1 + .../Reader/Detail/ReaderDetailViewController.swift | 4 ++-- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift index 8a50e72c1af0..2a39d1cd3e2b 100644 --- a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift +++ b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift @@ -32,6 +32,10 @@ extension MySitesCoordinator: RootViewPresenter { return nil } + var readerNavigationController: UINavigationController? { + return nil + } + func showReaderTab() { fallbackBehavior() } diff --git a/WordPress/Classes/System/RootViewPresenter.swift b/WordPress/Classes/System/RootViewPresenter.swift index 2231ddab81eb..0228f1acb2a9 100644 --- a/WordPress/Classes/System/RootViewPresenter.swift +++ b/WordPress/Classes/System/RootViewPresenter.swift @@ -15,6 +15,7 @@ protocol RootViewPresenter: AnyObject { var readerTabViewController: ReaderTabViewController? { get } var readerCoordinator: ReaderCoordinator? { get } + var readerNavigationController: UINavigationController? { get } func showReaderTab() func showReaderTab(forPost: NSNumber, onBlog: NSNumber) func switchToDiscover() diff --git a/WordPress/Classes/ViewRelated/Reader/Detail/ReaderDetailViewController.swift b/WordPress/Classes/ViewRelated/Reader/Detail/ReaderDetailViewController.swift index 06490adb2f0b..bfbd7915a133 100644 --- a/WordPress/Classes/ViewRelated/Reader/Detail/ReaderDetailViewController.swift +++ b/WordPress/Classes/ViewRelated/Reader/Detail/ReaderDetailViewController.swift @@ -144,10 +144,10 @@ class ReaderDetailViewController: UIViewController, ReaderDetailView { /// allowing Reader Detail to use a blue navbar. var useCompatibilityMode: Bool { // Use compatibility mode if not presented within the Reader - guard let tabBarController = RootViewCoordinator.sharedPresenter.rootViewController as? WPTabBarController else { + guard let readerNavigationController = RootViewCoordinator.sharedPresenter.readerNavigationController else { return false } - return tabBarController.readerNavigationController.viewControllers.contains(self) == false + return readerNavigationController.viewControllers.contains(self) == false } /// Used to disable ineffective buttons when a Related post fails to load. From f3f2794f217e75a2c479eb98b7e77ccca5276c60 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Thu, 29 Dec 2022 16:56:00 +0200 Subject: [PATCH 42/47] Update: Add `notificationsViewController` to RootViewPresenter --- .../System/MySitesCoordinator+RootViewPresenter.swift | 4 ++++ WordPress/Classes/System/RootViewPresenter.swift | 1 + .../Controllers/NotificationsViewController.swift | 5 +---- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift index 2a39d1cd3e2b..dce4953a461c 100644 --- a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift +++ b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift @@ -101,6 +101,10 @@ extension MySitesCoordinator: RootViewPresenter { // MARK: Notifications + var notificationsViewController: NotificationsViewController? { + return nil + } + func showNotificationsTab() { fallbackBehavior() } diff --git a/WordPress/Classes/System/RootViewPresenter.swift b/WordPress/Classes/System/RootViewPresenter.swift index 0228f1acb2a9..e794a1d56c75 100644 --- a/WordPress/Classes/System/RootViewPresenter.swift +++ b/WordPress/Classes/System/RootViewPresenter.swift @@ -40,6 +40,7 @@ protocol RootViewPresenter: AnyObject { // MARK: Notifications + var notificationsViewController: NotificationsViewController? { get } func showNotificationsTab() func showNotificationsTabForNote(withID notificationID: String) func switchNotificationsTabToNotificationSettings() diff --git a/WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationsViewController.swift b/WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationsViewController.swift index 8156868d01ad..b4dee86ee525 100644 --- a/WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationsViewController.swift +++ b/WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationsViewController.swift @@ -297,10 +297,7 @@ class NotificationsViewController: UIViewController, UIViewControllerRestoration static func viewController(withRestorationIdentifierPath identifierComponents: [String], coder: NSCoder) -> UIViewController? { - guard let tabBarController = RootViewCoordinator.sharedPresenter.rootViewController as? WPTabBarController else { - return nil - } - return tabBarController.notificationsViewController + return RootViewCoordinator.sharedPresenter.notificationsViewController } override func encodeRestorableState(with coder: NSCoder) { From e619798f281ec0481b75fe5d1801c02d71f72018 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Thu, 29 Dec 2022 17:03:22 +0200 Subject: [PATCH 43/47] Update: Use `RootViewPresenter.readerTabVC` instead of accessing the tab bar --- .../Stats/Insights/SiteStatsInsightsTableViewController.swift | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsInsightsTableViewController.swift b/WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsInsightsTableViewController.swift index 943373f55361..0554d2cc21f4 100644 --- a/WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsInsightsTableViewController.swift +++ b/WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsInsightsTableViewController.swift @@ -519,9 +519,7 @@ extension SiteStatsInsightsTableViewController: SiteStatsInsightsDelegate { self.navigationController?.popToRootViewController(animated: false) RootViewCoordinator.sharedPresenter.showReaderTab() - if let tabBarController = RootViewCoordinator.sharedPresenter.rootViewController as? WPTabBarController, - let nc = tabBarController.selectedViewController as? UINavigationController, - let vc = nc.topViewController as? ReaderTabViewController { + if let vc = RootViewCoordinator.sharedPresenter.readerTabViewController { vc.presentDiscoverTab() } } From c17f29e324079c82b23da1b0f1fc28c100fd41fc Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Thu, 29 Dec 2022 17:06:23 +0200 Subject: [PATCH 44/47] Update: call `fallbackBehavior()` when accessing unsupported variables --- .../Classes/System/MySitesCoordinator+RootViewPresenter.swift | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift index dce4953a461c..f22cd3e031e2 100644 --- a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift +++ b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift @@ -25,14 +25,17 @@ extension MySitesCoordinator: RootViewPresenter { // MARK: Reader var readerTabViewController: ReaderTabViewController? { + fallbackBehavior() return nil } var readerCoordinator: ReaderCoordinator? { + fallbackBehavior() return nil } var readerNavigationController: UINavigationController? { + fallbackBehavior() return nil } @@ -102,6 +105,7 @@ extension MySitesCoordinator: RootViewPresenter { // MARK: Notifications var notificationsViewController: NotificationsViewController? { + fallbackBehavior() return nil } From 9d7ec3c6cd86a88b62b42e6da039be08aae427a7 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Thu, 29 Dec 2022 18:26:29 +0200 Subject: [PATCH 45/47] Update: remove `shouldRemoveJetpackFeatures()` and depend on `jetpackFeaturesEnabled()` only --- WordPress/Classes/System/RootViewCoordinator.swift | 8 ++++---- .../BlogDetailsViewController+SectionHelpers.swift | 2 +- .../Blog/My Site/MySiteViewController.swift | 2 +- .../JetpackFeaturesRemovalCoordinator.swift | 14 ++++---------- 4 files changed, 10 insertions(+), 16 deletions(-) diff --git a/WordPress/Classes/System/RootViewCoordinator.swift b/WordPress/Classes/System/RootViewCoordinator.swift index 4f8529e9e0c5..93edc73bd465 100644 --- a/WordPress/Classes/System/RootViewCoordinator.swift +++ b/WordPress/Classes/System/RootViewCoordinator.swift @@ -26,12 +26,12 @@ class RootViewCoordinator { // MARK: Initializer init() { - if JetpackFeaturesRemovalCoordinator.shouldRemoveJetpackFeatures() { - let meScenePresenter = MeScenePresenter() - self.rootViewPresenter = MySitesCoordinator(meScenePresenter: meScenePresenter, onBecomeActiveTab: {}) + if JetpackFeaturesRemovalCoordinator.jetpackFeaturesEnabled() { + self.rootViewPresenter = WPTabBarController() } else { - self.rootViewPresenter = WPTabBarController() + let meScenePresenter = MeScenePresenter() + self.rootViewPresenter = MySitesCoordinator(meScenePresenter: meScenePresenter, onBecomeActiveTab: {}) } updatePromptsIfNeeded() } diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController+SectionHelpers.swift b/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController+SectionHelpers.swift index a9f83fedba6a..2a27026dd0f0 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController+SectionHelpers.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController+SectionHelpers.swift @@ -46,7 +46,7 @@ extension BlogDetailsViewController { } @objc func defaultSubsection() -> BlogDetailsSubsection { - if JetpackFeaturesRemovalCoordinator.shouldRemoveJetpackFeatures() { + if !JetpackFeaturesRemovalCoordinator.jetpackFeaturesEnabled() { return .posts } if shouldShowDashboard() { diff --git a/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift b/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift index 389cd83dc0ac..adc26288e2c7 100644 --- a/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift +++ b/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift @@ -283,7 +283,7 @@ class MySiteViewController: UIViewController, NoResultsViewHost { private func updateSegmentedControl(for blog: Blog, switchTabsIfNeeded: Bool = false) { // The segmented control should be hidden if the blog is not a WP.com/Atomic/Jetpack site, or if the device doesn't have a horizontally compact view let hideSegmentedControl = - JetpackFeaturesRemovalCoordinator.shouldRemoveJetpackFeatures() || + !JetpackFeaturesRemovalCoordinator.jetpackFeaturesEnabled() || !blog.isAccessibleThroughWPCom() || !splitViewControllerIsHorizontallyCompact diff --git a/WordPress/Classes/ViewRelated/Jetpack/Branding/Coordinator/JetpackFeaturesRemovalCoordinator.swift b/WordPress/Classes/ViewRelated/Jetpack/Branding/Coordinator/JetpackFeaturesRemovalCoordinator.swift index 4fbcd8f8a370..e08cb14fe73a 100644 --- a/WordPress/Classes/ViewRelated/Jetpack/Branding/Coordinator/JetpackFeaturesRemovalCoordinator.swift +++ b/WordPress/Classes/ViewRelated/Jetpack/Branding/Coordinator/JetpackFeaturesRemovalCoordinator.swift @@ -107,22 +107,16 @@ class JetpackFeaturesRemovalCoordinator { return formatter.date(from: dateString) } - /// Used to determine if the Jetpack features should be removed based on the removal phase. - static func shouldRemoveJetpackFeatures() -> Bool { + /// Used to determine if the Jetpack features are enabled based on the removal phase. + static func jetpackFeaturesEnabled() -> Bool { switch generalPhase() { case .four, .newUsers: - return true - default: return false + default: + return true } } - /// Inverse of `shouldRemoveJetpackFeatures`. - /// Added to enhance verbosity in some areas of the code. - static func jetpackFeaturesEnabled() -> Bool { - !shouldRemoveJetpackFeatures() - } - /// Used to display feature-specific or feature-collection overlays. /// - Parameters: /// - source: The source that triggers the display of the overlay. From aea050105bc1819f61596f46a0f45b664c271a41 Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Sun, 1 Jan 2023 18:58:31 +0200 Subject: [PATCH 46/47] Fix: Replace deprecated `shouldRemoveJetpackFeatures` to fix build errors --- .../Gutenberg/GutenbergViewController+MoreActions.swift | 2 +- .../Classes/ViewRelated/Gutenberg/GutenbergViewController.swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController+MoreActions.swift b/WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController+MoreActions.swift index 1331500e7699..232b734f5717 100644 --- a/WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController+MoreActions.swift +++ b/WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController+MoreActions.swift @@ -68,7 +68,7 @@ extension GutenbergViewController { ActionDispatcher.dispatch(NoticeAction.unlock) } - let helpTitle = JetpackFeaturesRemovalCoordinator.shouldRemoveJetpackFeatures() ? MoreSheetAlert.editorHelpTitle : MoreSheetAlert.editorHelpAndSupportTitle + let helpTitle = JetpackFeaturesRemovalCoordinator.jetpackFeaturesEnabled() ? MoreSheetAlert.editorHelpAndSupportTitle : MoreSheetAlert.editorHelpTitle alert.addDefaultActionWithTitle(helpTitle) { [weak self] _ in self?.showEditorHelp() ActionDispatcher.dispatch(NoticeAction.unlock) diff --git a/WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController.swift b/WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController.swift index 868101400fb4..bbc4403c69b1 100644 --- a/WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController.swift +++ b/WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController.swift @@ -1193,7 +1193,7 @@ extension GutenbergViewController: GutenbergBridgeDataSource { let isWPComSite = post.blog.isHostedAtWPcom || post.blog.isAtomic() // Disable Jetpack-powered editor features in WordPress app based on Features Removal coordination - if JetpackFeaturesRemovalCoordinator.shouldRemoveJetpackFeatures() { + if !JetpackFeaturesRemovalCoordinator.jetpackFeaturesEnabled() { return [ .mentions: false, .xposts: false, From 1af613bc6594f9fd0b845188dd597a727ec6c73c Mon Sep 17 00:00:00 2001 From: Hassaan El-Garem Date: Sun, 1 Jan 2023 20:07:31 +0200 Subject: [PATCH 47/47] Update: make `mySitesCoordinator` non-optional --- .../System/3DTouch/WP3DTouchShortcutHandler.swift | 2 +- .../System/MySitesCoordinator+RootViewPresenter.swift | 2 +- .../System/RootViewPresenter+EditorNavigation.swift | 4 ++-- WordPress/Classes/System/RootViewPresenter.swift | 2 +- .../System/WPTabBarController+RootViewPresenter.swift | 10 +++++----- .../Utility/InteractiveNotificationsManager.swift | 4 ++-- .../Utility/Universal Links/Routes+MySites.swift | 4 +--- .../Classes/Utility/Universal Links/Routes+Start.swift | 5 ++--- .../Classes/Utility/Universal Links/Routes+Stats.swift | 4 +--- .../BlogDetailsViewController+SectionHelpers.swift | 2 +- .../MySiteViewController+OnboardingPrompt.swift | 2 +- .../StatsRevampV2IntroductionPresenter.swift | 2 +- .../Classes/ViewRelated/System/WPTabBarController.h | 2 +- 13 files changed, 20 insertions(+), 25 deletions(-) diff --git a/WordPress/Classes/System/3DTouch/WP3DTouchShortcutHandler.swift b/WordPress/Classes/System/3DTouch/WP3DTouchShortcutHandler.swift index da540db2d6ab..2127f862ee8c 100644 --- a/WordPress/Classes/System/3DTouch/WP3DTouchShortcutHandler.swift +++ b/WordPress/Classes/System/3DTouch/WP3DTouchShortcutHandler.swift @@ -43,7 +43,7 @@ open class WP3DTouchShortcutHandler: NSObject { WPAnalytics.track(.shortcutStats) clearCurrentViewController() if let mainBlog = Blog.lastUsedOrFirst(in: ContextManager.sharedInstance().mainContext) { - rootViewPresenter.mySitesCoordinator?.showStats(for: mainBlog) + rootViewPresenter.mySitesCoordinator.showStats(for: mainBlog) } return true case ShortcutIdentifier.Notifications.type: diff --git a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift index f22cd3e031e2..3703d41d14de 100644 --- a/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift +++ b/WordPress/Classes/System/MySitesCoordinator+RootViewPresenter.swift @@ -93,7 +93,7 @@ extension MySitesCoordinator: RootViewPresenter { // MARK: My Site - var mySitesCoordinator: MySitesCoordinator? { + var mySitesCoordinator: MySitesCoordinator { return self } diff --git a/WordPress/Classes/System/RootViewPresenter+EditorNavigation.swift b/WordPress/Classes/System/RootViewPresenter+EditorNavigation.swift index 342744521d5b..3e0e52a0a5f7 100644 --- a/WordPress/Classes/System/RootViewPresenter+EditorNavigation.swift +++ b/WordPress/Classes/System/RootViewPresenter+EditorNavigation.swift @@ -17,7 +17,7 @@ extension RootViewPresenter { let context = ContextManager.shared.mainContext // Ignore taps on the post tab and instead show the modal. if Blog.count(in: context) == 0 { - mySitesCoordinator?.showAddNewSite() + mySitesCoordinator.showAddNewSite() } else { showPostTab(animated: true, toMedia: false, completion: afterDismiss) } @@ -26,7 +26,7 @@ extension RootViewPresenter { func showPostTab(for blog: Blog) { let context = ContextManager.shared.mainContext if Blog.count(in: context) == 0 { - mySitesCoordinator?.showAddNewSite() + mySitesCoordinator.showAddNewSite() } else { showPostTab(animated: true, toMedia: false, blog: blog) } diff --git a/WordPress/Classes/System/RootViewPresenter.swift b/WordPress/Classes/System/RootViewPresenter.swift index e794a1d56c75..1214ebbfd513 100644 --- a/WordPress/Classes/System/RootViewPresenter.swift +++ b/WordPress/Classes/System/RootViewPresenter.swift @@ -32,7 +32,7 @@ protocol RootViewPresenter: AnyObject { // MARK: My Site - var mySitesCoordinator: MySitesCoordinator? { get } + var mySitesCoordinator: MySitesCoordinator { get } func showMySitesTab() func showPages(for blog: Blog) func showPosts(for blog: Blog) diff --git a/WordPress/Classes/System/WPTabBarController+RootViewPresenter.swift b/WordPress/Classes/System/WPTabBarController+RootViewPresenter.swift index 41e84b57fda2..ef1371a88c47 100644 --- a/WordPress/Classes/System/WPTabBarController+RootViewPresenter.swift +++ b/WordPress/Classes/System/WPTabBarController+RootViewPresenter.swift @@ -15,7 +15,7 @@ extension WPTabBarController: RootViewPresenter { } func showBlogDetails(for blog: Blog) { - mySitesCoordinator?.showBlogDetails(for: blog) + mySitesCoordinator.showBlogDetails(for: blog) } func getMeScenePresenter() -> ScenePresenter { @@ -26,20 +26,20 @@ extension WPTabBarController: RootViewPresenter { guard selectedIndex == WPTab.mySites.rawValue else { return nil } - return mySitesCoordinator?.currentBlog + return mySitesCoordinator.currentBlog } // MARK: My Site func showPages(for blog: Blog) { - mySitesCoordinator?.showPages(for: blog) + mySitesCoordinator.showPages(for: blog) } func showPosts(for blog: Blog) { - mySitesCoordinator?.showPosts(for: blog) + mySitesCoordinator.showPosts(for: blog) } func showMedia(for blog: Blog) { - mySitesCoordinator?.showMedia(for: blog) + mySitesCoordinator.showMedia(for: blog) } } diff --git a/WordPress/Classes/Utility/InteractiveNotificationsManager.swift b/WordPress/Classes/Utility/InteractiveNotificationsManager.swift index 6c9d89d77e91..e350320ee656 100644 --- a/WordPress/Classes/Utility/InteractiveNotificationsManager.swift +++ b/WordPress/Classes/Utility/InteractiveNotificationsManager.swift @@ -210,7 +210,7 @@ final class InteractiveNotificationsManager: NSObject { if identifier == UNNotificationDefaultActionIdentifier { let targetBlog: Blog? = blog(from: threadId) - RootViewCoordinator.sharedPresenter.mySitesCoordinator?.showCreateSheet(for: targetBlog) + RootViewCoordinator.sharedPresenter.mySitesCoordinator.showCreateSheet(for: targetBlog) } case .weeklyRoundup: let targetBlog = blog(from: userInfo) @@ -226,7 +226,7 @@ final class InteractiveNotificationsManager: NSObject { let targetDate = date(from: userInfo) - RootViewCoordinator.sharedPresenter.mySitesCoordinator?.showStats( + RootViewCoordinator.sharedPresenter.mySitesCoordinator.showStats( for: targetBlog, timePeriod: .weeks, date: targetDate) diff --git a/WordPress/Classes/Utility/Universal Links/Routes+MySites.swift b/WordPress/Classes/Utility/Universal Links/Routes+MySites.swift index 19efe1bb9255..cb5b035eee9f 100644 --- a/WordPress/Classes/Utility/Universal Links/Routes+MySites.swift +++ b/WordPress/Classes/Utility/Universal Links/Routes+MySites.swift @@ -44,9 +44,7 @@ extension MySitesRoute: Route { extension MySitesRoute: NavigationAction { func perform(_ values: [String: String], source: UIViewController? = nil, router: LinkRouter) { - guard let coordinator = RootViewCoordinator.sharedPresenter.mySitesCoordinator else { - return - } + let coordinator = RootViewCoordinator.sharedPresenter.mySitesCoordinator guard let blog = blog(from: values) else { WPAppAnalytics.track(.deepLinkFailed, withProperties: ["route": path]) diff --git a/WordPress/Classes/Utility/Universal Links/Routes+Start.swift b/WordPress/Classes/Utility/Universal Links/Routes+Start.swift index 565cc66917be..38f6d76938f7 100644 --- a/WordPress/Classes/Utility/Universal Links/Routes+Start.swift +++ b/WordPress/Classes/Utility/Universal Links/Routes+Start.swift @@ -10,11 +10,10 @@ struct StartRoute: Route, NavigationAction { } func perform(_ values: [String: String], source: UIViewController?, router: LinkRouter) { - guard AccountHelper.isDotcomAvailable(), - let coordinator = RootViewCoordinator.sharedPresenter.mySitesCoordinator else { + guard AccountHelper.isDotcomAvailable() else { return } - coordinator.showSiteCreation() + RootViewCoordinator.sharedPresenter.mySitesCoordinator.showSiteCreation() } } diff --git a/WordPress/Classes/Utility/Universal Links/Routes+Stats.swift b/WordPress/Classes/Utility/Universal Links/Routes+Stats.swift index 3e0ef3f0f400..723182bb4259 100644 --- a/WordPress/Classes/Utility/Universal Links/Routes+Stats.swift +++ b/WordPress/Classes/Utility/Universal Links/Routes+Stats.swift @@ -67,9 +67,7 @@ extension StatsRoute: Route { extension StatsRoute: NavigationAction { func perform(_ values: [String: String], source: UIViewController? = nil, router: LinkRouter) { - guard let coordinator = RootViewCoordinator.sharedPresenter.mySitesCoordinator else { - return - } + let coordinator = RootViewCoordinator.sharedPresenter.mySitesCoordinator switch self { case .root: diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController+SectionHelpers.swift b/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController+SectionHelpers.swift index 2a27026dd0f0..a2cf3cd70e37 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController+SectionHelpers.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController+SectionHelpers.swift @@ -33,7 +33,7 @@ extension BlogDetailsSubsection { extension BlogDetailsViewController { - @objc class func mySitesCoordinator() -> MySitesCoordinator? { + @objc class func mySitesCoordinator() -> MySitesCoordinator { RootViewCoordinator.sharedPresenter.mySitesCoordinator } diff --git a/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController+OnboardingPrompt.swift b/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController+OnboardingPrompt.swift index bee25bc1a455..8d1ffaef503e 100644 --- a/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController+OnboardingPrompt.swift +++ b/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController+OnboardingPrompt.swift @@ -17,7 +17,7 @@ extension MySiteViewController { case .stats: // Show the stats view for the current blog if let blog = blog { - RootViewCoordinator.sharedPresenter.mySitesCoordinator?.showStats(for: blog, timePeriod: .insights) + RootViewCoordinator.sharedPresenter.mySitesCoordinator.showStats(for: blog, timePeriod: .insights) } case .writing: // Open the editor diff --git a/WordPress/Classes/ViewRelated/Feature Introduction/Stats Revamp v2/StatsRevampV2IntroductionPresenter.swift b/WordPress/Classes/ViewRelated/Feature Introduction/Stats Revamp v2/StatsRevampV2IntroductionPresenter.swift index 1e25fb2878f8..45fc6ba0cf73 100644 --- a/WordPress/Classes/ViewRelated/Feature Introduction/Stats Revamp v2/StatsRevampV2IntroductionPresenter.swift +++ b/WordPress/Classes/ViewRelated/Feature Introduction/Stats Revamp v2/StatsRevampV2IntroductionPresenter.swift @@ -44,7 +44,7 @@ class StatsRevampV2IntroductionPresenter: NSObject { return } - RootViewCoordinator.sharedPresenter.mySitesCoordinator?.showStats(for: blog, timePeriod: .insights) + RootViewCoordinator.sharedPresenter.mySitesCoordinator.showStats(for: blog, timePeriod: .insights) } // "Remind Me" prompt diff --git a/WordPress/Classes/ViewRelated/System/WPTabBarController.h b/WordPress/Classes/ViewRelated/System/WPTabBarController.h index f55d5dc02f5f..02c08d28d50c 100644 --- a/WordPress/Classes/ViewRelated/System/WPTabBarController.h +++ b/WordPress/Classes/ViewRelated/System/WPTabBarController.h @@ -25,7 +25,7 @@ extern NSNotificationName const WPTabBarHeightChangedNotification; @property (nonatomic, strong, readonly, nullable) NotificationsViewController *notificationsViewController; @property (nonatomic, strong, readonly, nullable) UINavigationController *readerNavigationController; -@property (nonatomic, strong, readonly, nullable) MySitesCoordinator *mySitesCoordinator; +@property (nonatomic, strong, readonly, nonnull) MySitesCoordinator *mySitesCoordinator; @property (nonatomic, strong, readonly, nullable) ReaderCoordinator *readerCoordinator; @property (nonatomic, strong) id meScenePresenter; @property (nonatomic, strong, readonly) ReaderTabViewModel *readerTabViewModel;