diff --git a/iOS/AppDefaults.swift b/iOS/AppDefaults.swift index c7a01f33a..17ffbeb1a 100644 --- a/iOS/AppDefaults.swift +++ b/iOS/AppDefaults.swift @@ -46,6 +46,7 @@ final class AppDefaults { static let firstRunDate = "firstRunDate" static let timelineGroupByFeed = "timelineGroupByFeed" static let refreshClearsReadArticles = "refreshClearsReadArticles" + static let markArticlesAsReadOnScroll = "markArticlesAsReadOnScroll" static let timelineNumberOfLines = "timelineNumberOfLines" static let timelineIconDimension = "timelineIconSize" static let timelineSortDirection = "timelineSortDirection" @@ -159,6 +160,15 @@ final class AppDefaults { } } + var markArticlesAsReadOnScroll: Bool { + get { + return AppDefaults.bool(for: Key.markArticlesAsReadOnScroll) + } + set { + AppDefaults.setBool(for: Key.markArticlesAsReadOnScroll, newValue) + } + } + var timelineSortDirection: ComparisonResult { get { return AppDefaults.sortDirection(for: Key.timelineSortDirection) @@ -236,6 +246,7 @@ final class AppDefaults { let defaults: [String : Any] = [Key.userInterfaceColorPalette: UserInterfaceColorPalette.automatic.rawValue, Key.timelineGroupByFeed: false, Key.refreshClearsReadArticles: false, + Key.markArticlesAsReadOnScroll: false, Key.timelineNumberOfLines: 2, Key.timelineIconDimension: IconSize.medium.rawValue, Key.timelineSortDirection: ComparisonResult.orderedDescending.rawValue, diff --git a/iOS/MasterTimeline/MasterTimelineViewController.swift b/iOS/MasterTimeline/MasterTimelineViewController.swift index 73b39ee99..024504980 100644 --- a/iOS/MasterTimeline/MasterTimelineViewController.swift +++ b/iOS/MasterTimeline/MasterTimelineViewController.swift @@ -516,7 +516,11 @@ class MasterTimelineViewController: UITableViewController, UndoableCommandRunner @objc func scrollPositionDidChange() { coordinator.timelineMiddleIndexPath = tableView.middleVisibleRow() - + + if !AppDefaults.shared.markArticlesAsReadOnScroll { + return + } + guard let firstVisibleRowIndexPath = tableView.indexPathsForVisibleRows?[0] else { return } guard let firstVisibleArticle = dataSource.itemIdentifier(for: firstVisibleRowIndexPath) else { diff --git a/iOS/Settings/Settings.storyboard b/iOS/Settings/Settings.storyboard index 9cb9246b5..e77cb6ce0 100644 --- a/iOS/Settings/Settings.storyboard +++ b/iOS/Settings/Settings.storyboard @@ -237,6 +237,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -617,6 +650,7 @@ + diff --git a/iOS/Settings/SettingsViewController.swift b/iOS/Settings/SettingsViewController.swift index 23811c861..0d39bbe15 100644 --- a/iOS/Settings/SettingsViewController.swift +++ b/iOS/Settings/SettingsViewController.swift @@ -19,6 +19,7 @@ class SettingsViewController: UITableViewController { @IBOutlet weak var timelineSortOrderSwitch: UISwitch! @IBOutlet weak var groupByFeedSwitch: UISwitch! @IBOutlet weak var refreshClearsReadArticlesSwitch: UISwitch! + @IBOutlet weak var markArticlesAsReadOnScrollSwitch: UISwitch! @IBOutlet weak var articleThemeDetailLabel: UILabel! @IBOutlet weak var confirmMarkAllAsReadSwitch: UISwitch! @IBOutlet weak var showFullscreenArticlesSwitch: UISwitch! @@ -66,6 +67,13 @@ class SettingsViewController: UITableViewController { } else { refreshClearsReadArticlesSwitch.isOn = false } + + + if AppDefaults.shared.markArticlesAsReadOnScroll { + markArticlesAsReadOnScrollSwitch.isOn = true + } else { + markArticlesAsReadOnScrollSwitch.isOn = false + } articleThemeDetailLabel.text = ArticleThemesManager.shared.currentTheme.name @@ -326,6 +334,14 @@ class SettingsViewController: UITableViewController { } } + @IBAction func switchMarkArticlesAsReadOnScroll(_ sender: Any) { + if markArticlesAsReadOnScrollSwitch.isOn { + AppDefaults.shared.markArticlesAsReadOnScroll = true + } else { + AppDefaults.shared.markArticlesAsReadOnScroll = false + } + } + @IBAction func switchConfirmMarkAllAsRead(_ sender: Any) { if confirmMarkAllAsReadSwitch.isOn { AppDefaults.shared.confirmMarkAllAsRead = true