From 9e705816cd6083e1dafb4b479d5ac1f7429222b1 Mon Sep 17 00:00:00 2001 From: kean Date: Tue, 7 Jan 2025 13:37:12 -0500 Subject: [PATCH 1/6] Remove unused makeCreateButtonAnnouncementAlertController --- .../Utility/Analytics/WPAnalyticsEvent.swift | 3 - ...wController+CreateButtonAnnouncement.swift | 62 ------------------ .../Contents.json | 12 ---- .../wp-illustration-ia-announcement.pdf | Bin 13735 -> 0 bytes 4 files changed, 77 deletions(-) delete mode 100644 WordPress/Classes/ViewRelated/System/Floating Create Button/FancyAlertViewController+CreateButtonAnnouncement.swift delete mode 100644 WordPress/Resources/AppImages.xcassets/Illustrations/wp-illustration-ia-announcement.imageset/Contents.json delete mode 100644 WordPress/Resources/AppImages.xcassets/Illustrations/wp-illustration-ia-announcement.imageset/wp-illustration-ia-announcement.pdf diff --git a/WordPress/Classes/Utility/Analytics/WPAnalyticsEvent.swift b/WordPress/Classes/Utility/Analytics/WPAnalyticsEvent.swift index 5fece8a12885..379dfc2654d0 100644 --- a/WordPress/Classes/Utility/Analytics/WPAnalyticsEvent.swift +++ b/WordPress/Classes/Utility/Analytics/WPAnalyticsEvent.swift @@ -5,7 +5,6 @@ import Foundation case createSheetShown case createSheetActionTapped - case createAnnouncementModalShown // Media Editor case mediaEditorShown @@ -625,8 +624,6 @@ import Foundation return "create_sheet_shown" case .createSheetActionTapped: return "create_sheet_action_tapped" - case .createAnnouncementModalShown: - return "create_announcement_modal_shown" // Media Editor case .mediaEditorShown: return "media_editor_shown" diff --git a/WordPress/Classes/ViewRelated/System/Floating Create Button/FancyAlertViewController+CreateButtonAnnouncement.swift b/WordPress/Classes/ViewRelated/System/Floating Create Button/FancyAlertViewController+CreateButtonAnnouncement.swift deleted file mode 100644 index 361ebdebc599..000000000000 --- a/WordPress/Classes/ViewRelated/System/Floating Create Button/FancyAlertViewController+CreateButtonAnnouncement.swift +++ /dev/null @@ -1,62 +0,0 @@ -import WordPressUI - -extension FancyAlertViewController { - private struct Strings { - static let titleText = NSLocalizedString("Streamlined navigation", comment: "Title of alert announcing new Create Button feature.") - static let bodyText = NSLocalizedString("Now there are fewer and better-organized tabs, posting shortcuts, and more, so you can find what you need fast.", comment: "Body text of alert announcing new Create Button feature.") - static let okayButtonText = NSLocalizedString("Got it!", comment: "Okay button title shown in alert announcing new Create Button feature.") - static let readMoreButtonText = NSLocalizedString("Learn more", comment: "Read more button title shown in alert announcing new Create Button feature.") - } - - private struct Analytics { - static let locationKey = "location" - static let alertKey = "alert" - } - - /// Create the fancy alert controller for the notification primer - /// - /// - Parameter approveAction: block to call when approve is tapped - /// - Returns: FancyAlertViewController of the primer - @objc static func makeCreateButtonAnnouncementAlertController(readMoreAction: @escaping ((_ controller: FancyAlertViewController) -> Void)) -> FancyAlertViewController { - - let okayButton = ButtonConfig(Strings.okayButtonText) { controller, _ in - controller.dismiss(animated: true) - } - - let readMoreButton = ButtonConfig(Strings.readMoreButtonText) { controller, _ in - readMoreAction(controller) - } - - let image = UIImage(named: "wp-illustration-ia-announcement") - - let config = FancyAlertViewController.Config(titleText: Strings.titleText, - bodyText: Strings.bodyText, - headerImage: image, - dividerPosition: .bottom, - defaultButton: readMoreButton, - cancelButton: okayButton, - appearAction: { - WPAnalytics.track(WPAnalyticsEvent.createAnnouncementModalShown, properties: [Analytics.locationKey: Analytics.alertKey]) - }, - dismissAction: {}) - - let controller = FancyAlertViewController.controllerWithConfiguration(configuration: config) - return controller - } -} - -@objc -extension UserDefaults { - private enum Keys: String { - case createButtonAlertWasDisplayed = "CreateButtonAlertWasDisplayed" - } - - var createButtonAlertWasDisplayed: Bool { - get { - return bool(forKey: Keys.createButtonAlertWasDisplayed.rawValue) - } - set { - set(newValue, forKey: Keys.createButtonAlertWasDisplayed.rawValue) - } - } -} diff --git a/WordPress/Resources/AppImages.xcassets/Illustrations/wp-illustration-ia-announcement.imageset/Contents.json b/WordPress/Resources/AppImages.xcassets/Illustrations/wp-illustration-ia-announcement.imageset/Contents.json deleted file mode 100644 index 45756b8638b6..000000000000 --- a/WordPress/Resources/AppImages.xcassets/Illustrations/wp-illustration-ia-announcement.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "wp-illustration-ia-announcement.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/WordPress/Resources/AppImages.xcassets/Illustrations/wp-illustration-ia-announcement.imageset/wp-illustration-ia-announcement.pdf b/WordPress/Resources/AppImages.xcassets/Illustrations/wp-illustration-ia-announcement.imageset/wp-illustration-ia-announcement.pdf deleted file mode 100644 index 24964d3bdb3de4aa04f16763c3c0fc316717eac1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13735 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 I Date: Tue, 7 Jan 2025 17:25:54 -0500 Subject: [PATCH 2/6] Add scroll-to-top button to Reader --- .../Reader/Cards/ReaderPostCell.swift | 2 +- .../Reader/Cards/ReaderStreamBaseCell.swift | 2 +- .../ReaderStreamViewController.swift | 14 ++++++-- .../Reader/ReaderButtonScrollToTop.swift | 33 +++++++++++++++++++ 4 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 WordPress/Classes/ViewRelated/Reader/ReaderButtonScrollToTop.swift diff --git a/WordPress/Classes/ViewRelated/Reader/Cards/ReaderPostCell.swift b/WordPress/Classes/ViewRelated/Reader/Cards/ReaderPostCell.swift index 27922ffe48ee..811b48aab76a 100644 --- a/WordPress/Classes/ViewRelated/Reader/Cards/ReaderPostCell.swift +++ b/WordPress/Classes/ViewRelated/Reader/Cards/ReaderPostCell.swift @@ -168,7 +168,7 @@ private final class ReaderPostCellView: UIView { avatarView.widthAnchor.constraint(equalToConstant: ReaderPostCell.avatarSize), avatarView.heightAnchor.constraint(equalToConstant: ReaderPostCell.avatarSize), avatarView.centerYAnchor.constraint(equalTo: timeLabel.centerYAnchor), - avatarView.trailingAnchor.constraint(equalTo: headerView.leadingAnchor, constant: -8), + avatarView.trailingAnchor.constraint(equalTo: headerView.leadingAnchor, constant: -9), headerView.topAnchor.constraint(equalTo: topAnchor, constant: 6), headerView.leadingAnchor.constraint(equalTo: leadingAnchor, constant: insets.left), diff --git a/WordPress/Classes/ViewRelated/Reader/Cards/ReaderStreamBaseCell.swift b/WordPress/Classes/ViewRelated/Reader/Cards/ReaderStreamBaseCell.swift index 931aa1a20032..149264301cbd 100644 --- a/WordPress/Classes/ViewRelated/Reader/Cards/ReaderStreamBaseCell.swift +++ b/WordPress/Classes/ViewRelated/Reader/Cards/ReaderStreamBaseCell.swift @@ -1,7 +1,7 @@ import UIKit class ReaderStreamBaseCell: UITableViewCell { - static let insets = UIEdgeInsets(top: 0, left: 44, bottom: 0, right: 16) + static let insets = UIEdgeInsets(top: 0, left: 46, bottom: 0, right: 16) var isCompact: Bool = true { didSet { diff --git a/WordPress/Classes/ViewRelated/Reader/Controllers/ReaderStreamViewController.swift b/WordPress/Classes/ViewRelated/Reader/Controllers/ReaderStreamViewController.swift index 3d0ebcca28e1..c914ab4c9adc 100644 --- a/WordPress/Classes/ViewRelated/Reader/Controllers/ReaderStreamViewController.swift +++ b/WordPress/Classes/ViewRelated/Reader/Controllers/ReaderStreamViewController.swift @@ -65,13 +65,16 @@ import AutomatticTracks return refreshControl }() + private lazy var buttonScrollToTop = ReaderButtonScrollToTop.make { [weak self] in + self?.tableView.scrollToTop(animated: true) + } + let titleView = ReaderNavigationCustomTitleView() private let loadMoreThreashold = 5 private let refreshInterval = 300 private var cleanupAndRefreshAfterScrolling = false private let recentlyBlockedSitePostObjectIDs = NSMutableArray() - private let heightForFooterView = CGFloat(44) private let estimatedHeightsCache = NSCache() private var isFeed = false private var syncIsFillingGap = false @@ -303,6 +306,7 @@ import AutomatticTracks setupTableView() setupFooterView() setupContentHandler() + setupButtonScrollToTop() observeNetworkStatus() @@ -493,9 +497,14 @@ import AutomatticTracks content.initializeContent(tableView: tableView, delegate: self) } + private func setupButtonScrollToTop() { + view.addSubview(buttonScrollToTop) + buttonScrollToTop.pinEdges([.leading, .bottom], to: view.safeAreaLayoutGuide, insets: UIEdgeInsets(horizontal: 8, vertical: 16)) + } + private func setupFooterView() { var frame = footerView.frame - frame.size.height = heightForFooterView + frame.size.height = 44 footerView.frame = frame tableView.tableFooterView = footerView footerView.isHidden = true @@ -1661,6 +1670,7 @@ extension ReaderStreamViewController: UITableViewDelegate, JPScrollViewDelegate layoutEmptyStateView() processJetpackBannerVisibility(scrollView) titleView.updateAlpha(in: scrollView) + buttonScrollToTop.setButtonHidden(scrollView.contentOffset.y < 100, animated: true) } } diff --git a/WordPress/Classes/ViewRelated/Reader/ReaderButtonScrollToTop.swift b/WordPress/Classes/ViewRelated/Reader/ReaderButtonScrollToTop.swift new file mode 100644 index 000000000000..328228e37fca --- /dev/null +++ b/WordPress/Classes/ViewRelated/Reader/ReaderButtonScrollToTop.swift @@ -0,0 +1,33 @@ +import UIKit + +final class ReaderButtonScrollToTop: UIButton { + private var isButtonHidden = false + + static func make(closure: @escaping () -> Void) -> ReaderButtonScrollToTop { + var configuration = UIButton.Configuration.bordered() + configuration.image = UIImage(systemName: "arrow.up")? + .withConfiguration(UIImage.SymbolConfiguration(pointSize: 12, weight: .regular)) + configuration.cornerStyle = .capsule + configuration.baseBackgroundColor = .secondarySystemBackground + configuration.baseForegroundColor = .label + configuration.contentInsets = .init(top: 10, leading: 10, bottom: 10, trailing: 10) + + return ReaderButtonScrollToTop(configuration: configuration, primaryAction: .init { _ in + closure() + }) + } + + func setButtonHidden(_ isHidden: Bool, animated: Bool) { + guard isButtonHidden != isHidden else { return } + isButtonHidden = isHidden + + UIView.animate(withDuration: animated ? 0.33 : 0.0) { + self.alpha = isHidden ? 0 : 1 + self.isUserInteractionEnabled = !isHidden + } + } + + override func point(inside point: CGPoint, with event: UIEvent?) -> Bool { + bounds.insetBy(dx: -8, dy: -10).contains(point) + } +} From 321c8d2cc858c964a6ae123022b0ff31681c1da7 Mon Sep 17 00:00:00 2001 From: kean Date: Tue, 7 Jan 2025 17:28:38 -0500 Subject: [PATCH 3/6] Cleanup --- .../Reader/Controllers/ReaderStreamViewController.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/Classes/ViewRelated/Reader/Controllers/ReaderStreamViewController.swift b/WordPress/Classes/ViewRelated/Reader/Controllers/ReaderStreamViewController.swift index c914ab4c9adc..0aa00fa06590 100644 --- a/WordPress/Classes/ViewRelated/Reader/Controllers/ReaderStreamViewController.swift +++ b/WordPress/Classes/ViewRelated/Reader/Controllers/ReaderStreamViewController.swift @@ -1670,7 +1670,7 @@ extension ReaderStreamViewController: UITableViewDelegate, JPScrollViewDelegate layoutEmptyStateView() processJetpackBannerVisibility(scrollView) titleView.updateAlpha(in: scrollView) - buttonScrollToTop.setButtonHidden(scrollView.contentOffset.y < 100, animated: true) + buttonScrollToTop.setButtonHidden(scrollView.contentOffset.y < bounds.height / 3, animated: true) } } From 8e0026c72b9cd6c7646b55db4b1fcbbc236d3474 Mon Sep 17 00:00:00 2001 From: kean Date: Tue, 7 Jan 2025 17:35:20 -0500 Subject: [PATCH 4/6] Update design for iPad --- .../Reader/Controllers/ReaderStreamViewController.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/Classes/ViewRelated/Reader/Controllers/ReaderStreamViewController.swift b/WordPress/Classes/ViewRelated/Reader/Controllers/ReaderStreamViewController.swift index 0aa00fa06590..28cdbc295e50 100644 --- a/WordPress/Classes/ViewRelated/Reader/Controllers/ReaderStreamViewController.swift +++ b/WordPress/Classes/ViewRelated/Reader/Controllers/ReaderStreamViewController.swift @@ -499,7 +499,7 @@ import AutomatticTracks private func setupButtonScrollToTop() { view.addSubview(buttonScrollToTop) - buttonScrollToTop.pinEdges([.leading, .bottom], to: view.safeAreaLayoutGuide, insets: UIEdgeInsets(horizontal: 8, vertical: 16)) + buttonScrollToTop.pinEdges([.leading, .bottom], to: view.safeAreaLayoutGuide, insets: isCompact ? UIEdgeInsets(horizontal: 8, vertical: 16) : UIEdgeInsets(.all, 20)) } private func setupFooterView() { From 6ead7b3d3fba8767d2ff92977d9cce1cb608871f Mon Sep 17 00:00:00 2001 From: kean Date: Tue, 7 Jan 2025 17:37:30 -0500 Subject: [PATCH 5/6] Add analytics --- WordPress/Classes/Utility/Analytics/WPAnalyticsEvent.swift | 3 +++ .../Reader/Controllers/ReaderStreamViewController.swift | 2 +- .../Classes/ViewRelated/Reader/ReaderButtonScrollToTop.swift | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/WordPress/Classes/Utility/Analytics/WPAnalyticsEvent.swift b/WordPress/Classes/Utility/Analytics/WPAnalyticsEvent.swift index 379dfc2654d0..0e1f26a7c723 100644 --- a/WordPress/Classes/Utility/Analytics/WPAnalyticsEvent.swift +++ b/WordPress/Classes/Utility/Analytics/WPAnalyticsEvent.swift @@ -116,6 +116,7 @@ import Foundation case readerCommentTextCopied case readerPostContextMenuButtonTapped case readerAddSiteToFavoritesTapped + case readerButtonScrollToTopTapped // Stats - Empty Stats nudges case statsPublicizeNudgeShown @@ -816,6 +817,8 @@ import Foundation return "reader_post_context_menu_button_tapped" case .readerAddSiteToFavoritesTapped: return "reader_add_site_to_favorites_tapped" + case .readerButtonScrollToTopTapped: + return "reader_button_scroll_to_top_tapped" // Stats - Empty Stats nudges case .statsPublicizeNudgeShown: diff --git a/WordPress/Classes/ViewRelated/Reader/Controllers/ReaderStreamViewController.swift b/WordPress/Classes/ViewRelated/Reader/Controllers/ReaderStreamViewController.swift index 28cdbc295e50..295854a3c0c1 100644 --- a/WordPress/Classes/ViewRelated/Reader/Controllers/ReaderStreamViewController.swift +++ b/WordPress/Classes/ViewRelated/Reader/Controllers/ReaderStreamViewController.swift @@ -1670,7 +1670,7 @@ extension ReaderStreamViewController: UITableViewDelegate, JPScrollViewDelegate layoutEmptyStateView() processJetpackBannerVisibility(scrollView) titleView.updateAlpha(in: scrollView) - buttonScrollToTop.setButtonHidden(scrollView.contentOffset.y < bounds.height / 3, animated: true) + buttonScrollToTop.setButtonHidden(scrollView.contentOffset.y < view.bounds.height / 3, animated: true) } } diff --git a/WordPress/Classes/ViewRelated/Reader/ReaderButtonScrollToTop.swift b/WordPress/Classes/ViewRelated/Reader/ReaderButtonScrollToTop.swift index 328228e37fca..3ad73d91e0b7 100644 --- a/WordPress/Classes/ViewRelated/Reader/ReaderButtonScrollToTop.swift +++ b/WordPress/Classes/ViewRelated/Reader/ReaderButtonScrollToTop.swift @@ -14,6 +14,7 @@ final class ReaderButtonScrollToTop: UIButton { return ReaderButtonScrollToTop(configuration: configuration, primaryAction: .init { _ in closure() + WPAnalytics.track(.readerButtonScrollToTopTapped) }) } From 2069c49bb0a79df981c753431297ecf2236d2e84 Mon Sep 17 00:00:00 2001 From: kean Date: Tue, 7 Jan 2025 17:38:11 -0500 Subject: [PATCH 6/6] Update releaes notes --- RELEASE-NOTES.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index a682de3d6fad..6b176a366550 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -19,6 +19,8 @@ * [*] Show selected filter in the Discover navigation bar [#23956] * [*] Enable fast deceleration for filters on the Discover tab [#23954] * [*] Disable universal links support for QR code login. You can only scan the codes using the app now. [#23953] +* [*] Add scroll-to-top button to Reader streams [#23957] + 25.6 -----