Make state restoration work on both the iPad and the iPhone

This commit is contained in:
Maurice Parker 2021-09-13 02:22:15 -05:00
parent cccfc69d43
commit f44308c0c5
2 changed files with 19 additions and 5 deletions

View File

@ -59,6 +59,14 @@ class ArticleViewController: UIViewController {
} }
} }
var restoreScrollPosition: (isShowingExtractedArticle: Bool, articleWindowScrollY: Int)? {
didSet {
if let rsp = restoreScrollPosition {
currentWebViewController?.setScrollPosition(isShowingExtractedArticle: rsp.isShowingExtractedArticle, articleWindowScrollY: rsp.articleWindowScrollY)
}
}
}
var currentState: State? { var currentState: State? {
guard let controller = currentWebViewController else { return nil} guard let controller = currentWebViewController else { return nil}
return State(extractedArticle: controller.extractedArticle, return State(extractedArticle: controller.extractedArticle,
@ -125,6 +133,10 @@ class ArticleViewController: UIViewController {
controller = createWebViewController(article, updateView: true) controller = createWebViewController(article, updateView: true)
} }
if let rsp = restoreScrollPosition {
controller.setScrollPosition(isShowingExtractedArticle: rsp.isShowingExtractedArticle, articleWindowScrollY: rsp.articleWindowScrollY)
}
articleExtractorButton.buttonState = controller.articleExtractorButtonState articleExtractorButton.buttonState = controller.articleExtractorButtonState
self.pageViewController.setViewControllers([controller], direction: .forward, animated: false, completion: nil) self.pageViewController.setViewControllers([controller], direction: .forward, animated: false, completion: nil)

View File

@ -461,8 +461,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner, UnreadCountProvider {
if let (feedIndexPath, articleID, isShowingExtractedArticle, articleWindowScrollY) = deferredFeedAndArticleSelect { if let (feedIndexPath, articleID, isShowingExtractedArticle, articleWindowScrollY) = deferredFeedAndArticleSelect {
selectFeed(indexPath: feedIndexPath) { selectFeed(indexPath: feedIndexPath) {
self.selectArticleInCurrentFeed(articleID) self.selectArticleInCurrentFeed(articleID, isShowingExtractedArticle: isShowingExtractedArticle, articleWindowScrollY: articleWindowScrollY)
self.articleViewController?.setScrollPosition(isShowingExtractedArticle: isShowingExtractedArticle, articleWindowScrollY: articleWindowScrollY)
} }
} }
} }
@ -836,7 +835,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner, UnreadCountProvider {
} }
} }
func selectArticle(_ article: Article?, animations: Animations = []) { func selectArticle(_ article: Article?, animations: Animations = [], isShowingExtractedArticle: Bool? = nil, articleWindowScrollY: Int? = nil) {
guard article != currentArticle else { return } guard article != currentArticle else { return }
currentArticle = article currentArticle = article
@ -866,6 +865,9 @@ class SceneCoordinator: NSObject, UndoableCommandRunner, UnreadCountProvider {
masterTimelineViewController?.updateArticleSelection(animations: animations) masterTimelineViewController?.updateArticleSelection(animations: animations)
currentArticleViewController.article = article currentArticleViewController.article = article
if let isShowingExtractedArticle = isShowingExtractedArticle, let articleWindowScrollY = articleWindowScrollY {
currentArticleViewController.restoreScrollPosition = (isShowingExtractedArticle, articleWindowScrollY)
}
} }
func beginSearching() { func beginSearching() {
@ -1284,9 +1286,9 @@ class SceneCoordinator: NSObject, UndoableCommandRunner, UnreadCountProvider {
rootSplitViewController.preferredDisplayMode = rootSplitViewController.displayMode == .allVisible ? .primaryHidden : .allVisible rootSplitViewController.preferredDisplayMode = rootSplitViewController.displayMode == .allVisible ? .primaryHidden : .allVisible
} }
func selectArticleInCurrentFeed(_ articleID: String) { func selectArticleInCurrentFeed(_ articleID: String, isShowingExtractedArticle: Bool? = nil, articleWindowScrollY: Int? = nil) {
if let article = self.articles.first(where: { $0.articleID == articleID }) { if let article = self.articles.first(where: { $0.articleID == articleID }) {
self.selectArticle(article) self.selectArticle(article, isShowingExtractedArticle: isShowingExtractedArticle, articleWindowScrollY: articleWindowScrollY)
} }
} }