From 115405f1f0763780290e4b86106318bea10e5cc3 Mon Sep 17 00:00:00 2001 From: Michele Volpato Date: Mon, 2 Mar 2020 22:25:57 +0100 Subject: [PATCH 1/2] Fix progress bar width, add contraints to progress label --- iOS/MasterFeed/RefreshProgressView.swift | 36 +++++++++++------------- iOS/MasterFeed/RefreshProgressView.xib | 19 +++++++------ 2 files changed, 28 insertions(+), 27 deletions(-) diff --git a/iOS/MasterFeed/RefreshProgressView.swift b/iOS/MasterFeed/RefreshProgressView.swift index 6a627e10a..2d1ddc7ab 100644 --- a/iOS/MasterFeed/RefreshProgressView.swift +++ b/iOS/MasterFeed/RefreshProgressView.swift @@ -13,12 +13,11 @@ class RefreshProgressView: UIView { @IBOutlet weak var progressView: UIProgressView! @IBOutlet weak var label: UILabel! - private lazy var progressWidthConstraint = progressView.widthAnchor.constraint(equalToConstant: 100.0) override func awakeFromNib() { NotificationCenter.default.addObserver(self, selector: #selector(progressDidChange(_:)), name: .AccountRefreshProgressDidChange, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(contentSizeCategoryDidChange(_:)), name: UIContentSizeCategory.didChangeNotification, object: nil) - + if !AccountManager.shared.combinedRefreshProgress.isComplete { progressChanged() } else { @@ -27,11 +26,11 @@ class RefreshProgressView: UIView { scheduleUpdateRefreshLabel() } - + override func didMoveToSuperview() { progressChanged() } - + func updateRefreshLabel() { if let accountLastArticleFetchEndTime = AccountManager.shared.lastArticleFetchEndTime { @@ -51,19 +50,19 @@ class RefreshProgressView: UIView { } else { label.text = "" } - + } @objc func progressDidChange(_ note: Notification) { progressChanged() } - + @objc func contentSizeCategoryDidChange(_ note: Notification) { // This hack is probably necessary because custom views in the toolbar don't get // notifications that the content size changed. label.font = UIFont.preferredFont(forTextStyle: .footnote) } - + deinit { NotificationCenter.default.removeObserver(self) } @@ -73,12 +72,12 @@ class RefreshProgressView: UIView { // MARK: Private private extension RefreshProgressView { - + func progressChanged() { // Layout may crash if not in the view hierarchy. // https://github.com/Ranchero-Software/NetNewsWire/issues/1764 let isInViewHierarchy = self.superview != nil - + let progress = AccountManager.shared.combinedRefreshProgress if progress.isComplete { @@ -86,23 +85,22 @@ private extension RefreshProgressView { progressView.setProgress(1, animated: true) } DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { - self.updateRefreshLabel() - self.label.isHidden = false - self.progressView.isHidden = true - self.progressWidthConstraint.isActive = false - if isInViewHierarchy { - self.progressView.setProgress(0, animated: true) + // Check that there are no pending downloads. + if (AccountManager.shared.combinedRefreshProgress.isComplete) { + self.updateRefreshLabel() + self.label.isHidden = false + self.progressView.isHidden = true + if self.superview != nil { + self.progressView.setProgress(0, animated: true) + } } } } else { label.isHidden = true progressView.isHidden = false - progressWidthConstraint.isActive = true if isInViewHierarchy { - progressView.setNeedsLayout() - progressView.layoutIfNeeded() let percent = Float(progress.numberCompleted) / Float(progress.numberOfTasks) - + // Don't let the progress bar go backwards unless we need to go back more than 25% if percent > progressView.progress || progressView.progress - percent > 0.25 { progressView.setProgress(percent, animated: true) diff --git a/iOS/MasterFeed/RefreshProgressView.xib b/iOS/MasterFeed/RefreshProgressView.xib index 5e958f675..9c72af6c1 100644 --- a/iOS/MasterFeed/RefreshProgressView.xib +++ b/iOS/MasterFeed/RefreshProgressView.xib @@ -1,8 +1,8 @@ - + - + @@ -14,13 +14,14 @@ - + + - - - + + + + From ee0f982e938317abfa79318e03531b59ec486323 Mon Sep 17 00:00:00 2001 From: Michele Volpato Date: Mon, 2 Mar 2020 22:33:59 +0100 Subject: [PATCH 2/2] Remove unneeded whitespaces --- iOS/MasterFeed/RefreshProgressView.swift | 32 ++++++++++++------------ 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/iOS/MasterFeed/RefreshProgressView.swift b/iOS/MasterFeed/RefreshProgressView.swift index 2d1ddc7ab..ab2e61a84 100644 --- a/iOS/MasterFeed/RefreshProgressView.swift +++ b/iOS/MasterFeed/RefreshProgressView.swift @@ -17,52 +17,52 @@ class RefreshProgressView: UIView { override func awakeFromNib() { NotificationCenter.default.addObserver(self, selector: #selector(progressDidChange(_:)), name: .AccountRefreshProgressDidChange, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(contentSizeCategoryDidChange(_:)), name: UIContentSizeCategory.didChangeNotification, object: nil) - + if !AccountManager.shared.combinedRefreshProgress.isComplete { progressChanged() } else { updateRefreshLabel() } - + scheduleUpdateRefreshLabel() } - + override func didMoveToSuperview() { progressChanged() } - + func updateRefreshLabel() { 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 label.text = refreshText - + } else { label.text = NSLocalizedString("Updated Just Now", comment: "Updated Just Now") } - + } else { label.text = "" } - + } - + @objc func progressDidChange(_ note: Notification) { progressChanged() } - + @objc func contentSizeCategoryDidChange(_ note: Notification) { // This hack is probably necessary because custom views in the toolbar don't get // notifications that the content size changed. label.font = UIFont.preferredFont(forTextStyle: .footnote) } - + deinit { NotificationCenter.default.removeObserver(self) } @@ -72,14 +72,14 @@ class RefreshProgressView: UIView { // MARK: Private private extension RefreshProgressView { - + func progressChanged() { // Layout may crash if not in the view hierarchy. // https://github.com/Ranchero-Software/NetNewsWire/issues/1764 let isInViewHierarchy = self.superview != nil - + let progress = AccountManager.shared.combinedRefreshProgress - + if progress.isComplete { if isInViewHierarchy { progressView.setProgress(1, animated: true) @@ -100,7 +100,7 @@ private extension RefreshProgressView { progressView.isHidden = false if isInViewHierarchy { let percent = Float(progress.numberCompleted) / Float(progress.numberOfTasks) - + // Don't let the progress bar go backwards unless we need to go back more than 25% if percent > progressView.progress || progressView.progress - percent > 0.25 { progressView.setProgress(percent, animated: true)