From 990a82d9254eaf18f4ae86a53d2835f9a836a975 Mon Sep 17 00:00:00 2001 From: Stuart Breckenridge Date: Fri, 13 Jun 2025 14:54:13 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=92=84=20Moves=20refresh=20label=20to=20n?= =?UTF-8?q?avigation=20bar=20subtitle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Removes Refresh Progress view code and xib. This applies to iOS only. --- iOS/MainFeed/MainFeedViewController.swift | 49 ++++++++++++++---- iOS/MainFeed/RefreshProgressView.xib | 61 ----------------------- 2 files changed, 38 insertions(+), 72 deletions(-) delete mode 100644 iOS/MainFeed/RefreshProgressView.xib diff --git a/iOS/MainFeed/MainFeedViewController.swift b/iOS/MainFeed/MainFeedViewController.swift index 9cf824558..429a56158 100644 --- a/iOS/MainFeed/MainFeedViewController.swift +++ b/iOS/MainFeed/MainFeedViewController.swift @@ -77,6 +77,7 @@ class MainFeedViewController: UITableViewController, UndoableCommandRunner { NotificationCenter.default.addObserver(self, selector: #selector(contentSizeCategoryDidChange), name: UIContentSizeCategory.didChangeNotification, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(willEnterForeground(_:)), name: UIApplication.willEnterForegroundNotification, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(displayNameDidChange(_:)), name: .DisplayNameDidChange, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(progressDidChange(_:)), name: .combinedRefreshProgressDidChange, object: nil) registerForTraitChanges([UITraitPreferredContentSizeCategory.self], target: self, action: #selector(preferredContentSizeCategoryDidChange)) @@ -95,7 +96,6 @@ class MainFeedViewController: UITableViewController, UndoableCommandRunner { resetEstimatedRowHeight() refreshControl = UIRefreshControl() refreshControl!.addTarget(self, action: #selector(refreshAccounts(_:)), for: .valueChanged) - configureToolbar() } // MARK: Notifications @@ -185,6 +185,10 @@ class MainFeedViewController: UITableViewController, UndoableCommandRunner { updateUI() } + @objc func progressDidChange(_ note: Notification) { + updateNavigationBarSubtitle() + } + // MARK: Table View override func numberOfSections(in tableView: UITableView) -> Int { @@ -666,6 +670,7 @@ class MainFeedViewController: UITableViewController, UndoableCommandRunner { addNewItemButton?.isEnabled = !AccountManager.shared.activeAccounts.isEmpty configureContextMenu() + updateNavigationBarSubtitle() } @objc @@ -699,6 +704,38 @@ class MainFeedViewController: UITableViewController, UndoableCommandRunner { } } + func updateNavigationBarSubtitle() { + let progress = AccountManager.shared.combinedRefreshProgress + + if progress.isComplete { + if let accountLastArticleFetchEndTime = AccountManager.shared.lastArticleFetchEndTime { + if Date() > accountLastArticleFetchEndTime.addingTimeInterval(60) { + let relativeDateTimeFormatter = RelativeDateTimeFormatter() + relativeDateTimeFormatter.dateTimeStyle = .named + let refreshed = relativeDateTimeFormatter.localizedString(for: accountLastArticleFetchEndTime, relativeTo: Date()) + let localizedRefreshText = NSLocalizedString("Updated %@", comment: "Updated") + let refreshText = NSString.localizedStringWithFormat(localizedRefreshText as NSString, refreshed) as String + navigationController?.navigationBar.topItem?.subtitle = refreshText + } else { + navigationController?.navigationBar.topItem?.subtitle = NSLocalizedString("Updated Just Now", comment: "Updated Just Now") + } + } else { + navigationController?.navigationBar.topItem?.subtitle = "" + } + + } else { + navigationController?.navigationBar.topItem?.subtitle = NSLocalizedString("Updating...", comment: "Updating...") + } + + scheduleNavigationBarSubtitleUpdate() + } + + func scheduleNavigationBarSubtitleUpdate() { + DispatchQueue.main.asyncAfter(deadline: .now() + 60) { [weak self] in + self?.updateNavigationBarSubtitle() + } + } + func focus() { becomeFirstResponder() } @@ -780,16 +817,6 @@ extension MainFeedViewController: MainFeedTableViewCellDelegate { private extension MainFeedViewController { - func configureToolbar() { - guard let refreshProgressView = Bundle.main.loadNibNamed("RefreshProgressView", owner: self, options: nil)?[0] as? RefreshProgressView else { - return - } - - self.refreshProgressView = refreshProgressView - let refreshProgressItemButton = UIBarButtonItem(customView: refreshProgressView) - toolbarItems?.insert(refreshProgressItemButton, at: 2) - } - func setFilterButtonToActive() { filterButton?.image = AppAssets.filterActiveImage filterButton?.accLabelText = NSLocalizedString("Selected - Filter Read Feeds", comment: "Selected - Filter Read Feeds") diff --git a/iOS/MainFeed/RefreshProgressView.xib b/iOS/MainFeed/RefreshProgressView.xib deleted file mode 100644 index bab0971af..000000000 --- a/iOS/MainFeed/RefreshProgressView.xib +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -