From 3d67dfa63e6b5b90b1380ff6b38eba699db39510 Mon Sep 17 00:00:00 2001 From: Stuart Breckenridge Date: Sat, 18 Jan 2025 15:11:08 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=F0=9F=A9=B9=20Fixes=20incorrect=20refresh?= =?UTF-8?q?=20control=20visibility?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Makes `TimelineViewController` a `UISplitViewControllerDelegate`. When the display mode is such that the feeds, timeline and article are visible, the timeline refresh control is hidden. When the display mode is such that the timeline and article are visible, the timeline refresh control is visible. --- iOS/MainTimeline/TimelineViewController.swift | 40 ++++++++++++++++++- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/iOS/MainTimeline/TimelineViewController.swift b/iOS/MainTimeline/TimelineViewController.swift index 0c3cfe041..9576f4258 100644 --- a/iOS/MainTimeline/TimelineViewController.swift +++ b/iOS/MainTimeline/TimelineViewController.swift @@ -59,7 +59,10 @@ class TimelineViewController: UITableViewController, UndoableCommandRunner { NotificationCenter.default.addObserver(self, selector: #selector(contentSizeCategoryDidChange), name: UIContentSizeCategory.didChangeNotification, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(displayNameDidChange), name: .DisplayNameDidChange, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(willEnterForeground(_:)), name: UIApplication.willEnterForegroundNotification, object: nil) - + + // Split View Controller Delegate + splitViewController?.delegate = self + // Initialize Programmatic Buttons filterButton = UIBarButtonItem(image: AppAssets.filterInactiveImage, style: .plain, target: self, action: #selector(toggleFilter(_:))) firstUnreadButton = UIBarButtonItem(image: AppAssets.nextUnreadArticleImage, style: .plain, target: self, action: #selector(firstUnread(_:))) @@ -598,11 +601,44 @@ extension TimelineViewController: UISearchBarDelegate { } } +extension TimelineViewController: UISplitViewControllerDelegate { + + func splitViewController(_ svc: UISplitViewController, willChangeTo displayMode: UISplitViewController.DisplayMode) { + switch displayMode { + case .automatic: + return + case .secondaryOnly: + return + case .oneBesideSecondary: + // Timeline + Article - show the refresh control on the timeline + self.toolbarItems?[2].customView?.alpha = 1.0 + case .oneOverSecondary: + return + case .twoBesideSecondary: + return + case .twoOverSecondary: + return + case .twoDisplaceSecondary: + // Sidebar + Timeline + Article - hide the refresh control on the timeline + self.toolbarItems?[2].customView?.alpha = 0.0 + case .primaryHidden: + return + case .allVisible: + return + case .primaryOverlay: + return + @unknown default: + return + } + } + +} + // MARK: Private private extension TimelineViewController { - func configureToolbar() { + func configureToolbar() { guard !(splitViewController?.isCollapsed ?? true) else { return } From b5c592abd6ef16027c1af62af478a49bbd997cd9 Mon Sep 17 00:00:00 2001 From: Stuart Breckenridge Date: Sun, 19 Jan 2025 07:45:20 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Moves=20timeline=20fix?= =?UTF-8?q?=20to=20scene=20coordinator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- iOS/MainTimeline/TimelineViewController.swift | 36 ------------------- iOS/SceneCoordinator.swift | 29 +++++++++++++++ 2 files changed, 29 insertions(+), 36 deletions(-) diff --git a/iOS/MainTimeline/TimelineViewController.swift b/iOS/MainTimeline/TimelineViewController.swift index 9576f4258..33ef6c09b 100644 --- a/iOS/MainTimeline/TimelineViewController.swift +++ b/iOS/MainTimeline/TimelineViewController.swift @@ -60,9 +60,6 @@ class TimelineViewController: UITableViewController, UndoableCommandRunner { NotificationCenter.default.addObserver(self, selector: #selector(displayNameDidChange), name: .DisplayNameDidChange, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(willEnterForeground(_:)), name: UIApplication.willEnterForegroundNotification, object: nil) - // Split View Controller Delegate - splitViewController?.delegate = self - // Initialize Programmatic Buttons filterButton = UIBarButtonItem(image: AppAssets.filterInactiveImage, style: .plain, target: self, action: #selector(toggleFilter(_:))) firstUnreadButton = UIBarButtonItem(image: AppAssets.nextUnreadArticleImage, style: .plain, target: self, action: #selector(firstUnread(_:))) @@ -601,39 +598,6 @@ extension TimelineViewController: UISearchBarDelegate { } } -extension TimelineViewController: UISplitViewControllerDelegate { - - func splitViewController(_ svc: UISplitViewController, willChangeTo displayMode: UISplitViewController.DisplayMode) { - switch displayMode { - case .automatic: - return - case .secondaryOnly: - return - case .oneBesideSecondary: - // Timeline + Article - show the refresh control on the timeline - self.toolbarItems?[2].customView?.alpha = 1.0 - case .oneOverSecondary: - return - case .twoBesideSecondary: - return - case .twoOverSecondary: - return - case .twoDisplaceSecondary: - // Sidebar + Timeline + Article - hide the refresh control on the timeline - self.toolbarItems?[2].customView?.alpha = 0.0 - case .primaryHidden: - return - case .allVisible: - return - case .primaryOverlay: - return - @unknown default: - return - } - } - -} - // MARK: Private private extension TimelineViewController { diff --git a/iOS/SceneCoordinator.swift b/iOS/SceneCoordinator.swift index e89dc71e1..790355d05 100644 --- a/iOS/SceneCoordinator.swift +++ b/iOS/SceneCoordinator.swift @@ -1310,6 +1310,35 @@ extension SceneCoordinator: UISplitViewControllerDelegate { } } + func splitViewController(_ svc: UISplitViewController, willChangeTo displayMode: UISplitViewController.DisplayMode) { + switch displayMode { + case .automatic: + return + case .secondaryOnly: + return + case .oneBesideSecondary: + // Timeline + Article - show the refresh control on the timeline + mainTimelineViewController?.toolbarItems?[2].customView?.alpha = 1.0 + case .oneOverSecondary: + return + case .twoBesideSecondary: + return + case .twoOverSecondary: + return + case .twoDisplaceSecondary: + // Sidebar + Timeline + Article - hide the refresh control on the timeline + mainTimelineViewController?.toolbarItems?[2].customView?.alpha = 0.0 + case .primaryHidden: + return + case .allVisible: + return + case .primaryOverlay: + return + @unknown default: + return + } + } + } // MARK: UINavigationControllerDelegate