diff --git a/WordPress/Classes/Utility/ContentCoordinator.swift b/WordPress/Classes/Utility/ContentCoordinator.swift index 26d978ac3f0a..4774d79f3b2c 100644 --- a/WordPress/Classes/Utility/ContentCoordinator.swift +++ b/WordPress/Classes/Utility/ContentCoordinator.swift @@ -89,7 +89,7 @@ struct DefaultContentCoordinator: ContentCoordinator { func displayBackupWithSiteID(_ siteID: NSNumber?) throws { guard let siteID = siteID, let blog = Blog.lookup(withID: siteID, in: mainContext), - let backupListViewController = BackupListViewController(blog: blog) + let backupListViewController = BackupListViewController.withJPBannerForBlog(blog) else { throw DisplayError.missingParameter } diff --git a/WordPress/Classes/ViewRelated/Activity/Backup/BackupListViewController+JetpackBannerViewController.swift b/WordPress/Classes/ViewRelated/Activity/Backup/BackupListViewController+JetpackBannerViewController.swift new file mode 100644 index 000000000000..901e6aa54140 --- /dev/null +++ b/WordPress/Classes/ViewRelated/Activity/Backup/BackupListViewController+JetpackBannerViewController.swift @@ -0,0 +1,18 @@ +import Foundation + +@objc +extension BackupListViewController { + static func withJPBannerForBlog(_ blog: Blog) -> UIViewController? { + guard let backupListVC = BackupListViewController(blog: blog) else { + return nil + } + return JetpackBannerWrapperViewController(childVC: backupListVC, analyticsId: .backup) + } +} + +extension BackupListViewController: JPScrollViewDelegate { + override func scrollViewDidScroll(_ scrollView: UIScrollView) { + super.scrollViewDidScroll(scrollView) + processJetpackBannerVisibility(scrollView) + } +} diff --git a/WordPress/Classes/ViewRelated/Activity/Backup/BackupListViewController.swift b/WordPress/Classes/ViewRelated/Activity/Backup/BackupListViewController.swift index 9f545075a0a3..c1604dbec57c 100644 --- a/WordPress/Classes/ViewRelated/Activity/Backup/BackupListViewController.swift +++ b/WordPress/Classes/ViewRelated/Activity/Backup/BackupListViewController.swift @@ -1,6 +1,10 @@ import Foundation +import Combine class BackupListViewController: BaseActivityListViewController { + /// Needed for JPScrollViewDelegate conformance. + let scrollViewTranslationPublisher = PassthroughSubject() + override init(site: JetpackSiteRef, store: ActivityStore, isFreeWPCom: Bool = false) { store.onlyRestorableItems = true diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController.m b/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController.m index af64ff803822..853f434d19a9 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController.m +++ b/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController.m @@ -1600,7 +1600,7 @@ - (void)showScan - (void)showBackup { - BackupListViewController *controller = [[BackupListViewController alloc] initWithBlog:self.blog]; + UIViewController *controller = [BackupListViewController withJPBannerForBlog:self.blog]; controller.navigationItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeNever; [self.presentationDelegate presentBlogDetailsViewController:controller]; } diff --git a/WordPress/Classes/ViewRelated/Jetpack/Branding/JetpackBrandingAnalyticsHelper.swift b/WordPress/Classes/ViewRelated/Jetpack/Branding/JetpackBrandingAnalyticsHelper.swift index 3567760ffea6..02d47f9743ff 100644 --- a/WordPress/Classes/ViewRelated/Jetpack/Branding/JetpackBrandingAnalyticsHelper.swift +++ b/WordPress/Classes/ViewRelated/Jetpack/Branding/JetpackBrandingAnalyticsHelper.swift @@ -23,6 +23,7 @@ struct JetpackBrandingAnalyticsHelper { enum JetpackBannerScreen: String { case activityLog = "activity_log" + case backup case notifications case reader case readerSearch = "reader_search" diff --git a/WordPress/WordPress.xcodeproj/project.pbxproj b/WordPress/WordPress.xcodeproj/project.pbxproj index de28877bfd40..ad6b0d68f546 100644 --- a/WordPress/WordPress.xcodeproj/project.pbxproj +++ b/WordPress/WordPress.xcodeproj/project.pbxproj @@ -2615,6 +2615,8 @@ C395FB262821FE7B00AE7C11 /* RemoteSiteDesign+Thumbnail.swift in Sources */ = {isa = PBXBuildFile; fileRef = C395FB252821FE7B00AE7C11 /* RemoteSiteDesign+Thumbnail.swift */; }; C395FB272822148400AE7C11 /* RemoteSiteDesign+Thumbnail.swift in Sources */ = {isa = PBXBuildFile; fileRef = C395FB252821FE7B00AE7C11 /* RemoteSiteDesign+Thumbnail.swift */; }; C396C80B280F2401006FE7AC /* SiteDesignTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C396C80A280F2401006FE7AC /* SiteDesignTests.swift */; }; + C39ABBAE294BE84000F6F278 /* BackupListViewController+JetpackBannerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C39ABBAD294BE84000F6F278 /* BackupListViewController+JetpackBannerViewController.swift */; }; + C39ABBAF294BE84000F6F278 /* BackupListViewController+JetpackBannerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C39ABBAD294BE84000F6F278 /* BackupListViewController+JetpackBannerViewController.swift */; }; C3AB4879292F114A001F7AF8 /* UIApplication+AppAvailability.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3AB4878292F114A001F7AF8 /* UIApplication+AppAvailability.swift */; }; C3C21EB928385EC8002296E2 /* RemoteSiteDesigns.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3C21EB828385EC8002296E2 /* RemoteSiteDesigns.swift */; }; C3C21EBA28385EC8002296E2 /* RemoteSiteDesigns.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3C21EB828385EC8002296E2 /* RemoteSiteDesigns.swift */; }; @@ -7742,6 +7744,7 @@ C395FB222821FE4400AE7C11 /* SiteDesignSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SiteDesignSection.swift; sourceTree = ""; }; C395FB252821FE7B00AE7C11 /* RemoteSiteDesign+Thumbnail.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "RemoteSiteDesign+Thumbnail.swift"; sourceTree = ""; }; C396C80A280F2401006FE7AC /* SiteDesignTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SiteDesignTests.swift; sourceTree = ""; }; + C39ABBAD294BE84000F6F278 /* BackupListViewController+JetpackBannerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BackupListViewController+JetpackBannerViewController.swift"; sourceTree = ""; }; C3AB4878292F114A001F7AF8 /* UIApplication+AppAvailability.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIApplication+AppAvailability.swift"; sourceTree = ""; }; C3ABE791263099F7009BD402 /* WordPress 121.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "WordPress 121.xcdatamodel"; sourceTree = ""; }; C3C21EB828385EC8002296E2 /* RemoteSiteDesigns.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteSiteDesigns.swift; sourceTree = ""; }; @@ -12951,6 +12954,7 @@ isa = PBXGroup; children = ( 8B36256525A60CCA00D7CCE3 /* BackupListViewController.swift */, + C39ABBAD294BE84000F6F278 /* BackupListViewController+JetpackBannerViewController.swift */, ); path = Backup; sourceTree = ""; @@ -21598,6 +21602,7 @@ 08A4E129289D202F001D9EC7 /* UserPersistentStore.swift in Sources */, E1D95EB817A28F5E00A3E9F3 /* WPActivityDefaults.m in Sources */, 436D56302117410C00CEAA33 /* RegisterDomainDetailsViewModel+CellIndex.swift in Sources */, + C39ABBAE294BE84000F6F278 /* BackupListViewController+JetpackBannerViewController.swift in Sources */, 1714F8D020E6DA8900226DCB /* RouteMatcher.swift in Sources */, 591A428F1A6DC6F2003807A6 /* WPGUIConstants.m in Sources */, 3FD272E024CF8F270021F0C8 /* UIColor+Notice.swift in Sources */, @@ -24081,6 +24086,7 @@ FABB253A2602FC2C00C8785C /* WordPressAppDelegate.swift in Sources */, 098B8577275E9765004D299F /* AppLocalizedString.swift in Sources */, FABB253B2602FC2C00C8785C /* MediaService.m in Sources */, + C39ABBAF294BE84000F6F278 /* BackupListViewController+JetpackBannerViewController.swift in Sources */, FEA6517C281C491C002EA086 /* BloggingPromptsService.swift in Sources */, FABB253C2602FC2C00C8785C /* FormattableContentAction.swift in Sources */, 3F3DD0B326FD176800F5F121 /* PresentationCard.swift in Sources */,