From cad563c7d0a0701330f5731c9063debd4ed86b12 Mon Sep 17 00:00:00 2001 From: OrlaM Date: Mon, 14 Nov 2022 17:20:21 -0500 Subject: [PATCH] Bugfix FXIOS-5123 [v107.1] Fix jump back in crash (#12369) * Fix jump back in crash * Fix tests # Conflicts: # Tests/ClientTests/Frontend/Home/JumpBackIn/JumpBackInViewModelTests.swift --- .../Home/JumpBackIn/JumpBackInViewModel.swift | 14 ++++---------- .../JumpBackIn/JumpBackInViewModelTests.swift | 19 +++++++++++++++++-- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/Client/Frontend/Home/JumpBackIn/JumpBackInViewModel.swift b/Client/Frontend/Home/JumpBackIn/JumpBackInViewModel.swift index a6ec5d399da2..bede40eceb77 100644 --- a/Client/Frontend/Home/JumpBackIn/JumpBackInViewModel.swift +++ b/Client/Frontend/Home/JumpBackIn/JumpBackInViewModel.swift @@ -156,7 +156,7 @@ class JumpBackInViewModel: FeatureFlaggable { // MARK: - Private: Prepare UI data private extension JumpBackInViewModel { - func refreshData(maxItemsToDisplay: JumpBackInDisplayGroupCount) { + private func refreshData(maxItemsToDisplay: JumpBackInDisplayGroupCount) { jumpBackInList = createJumpBackInList( from: recentTabs, withMaxTabsCount: maxItemsToDisplay.tabsCount, @@ -394,11 +394,9 @@ extension JumpBackInViewModel: HomepageViewModelProtocol { func refreshData(for traitCollection: UITraitCollection, isPortrait: Bool = UIWindow.isPortrait, device: UIUserInterfaceIdiom = UIDevice.current.userInterfaceIdiom) { - getLatestData() updateSectionLayout(for: traitCollection, isPortrait: isPortrait, device: device) - let maxItemsToDisplay = sectionLayout.maxItemsToDisplay( hasAccount: jumpBackInDataAdaptor.hasSyncedTabFeatureEnabled, device: device @@ -406,12 +404,6 @@ extension JumpBackInViewModel: HomepageViewModelProtocol { refreshData(maxItemsToDisplay: maxItemsToDisplay) } - private func getLatestData() { - recentTabs = jumpBackInDataAdaptor.getRecentTabData() - recentGroups = jumpBackInDataAdaptor.getGroupsData() - recentSyncedTab = jumpBackInDataAdaptor.getSyncedTabData() - } - func updatePrivacyConcernedSection(isPrivate: Bool) { self.isPrivate = isPrivate } @@ -484,7 +476,9 @@ extension JumpBackInViewModel: HomepageSectionHandler { extension JumpBackInViewModel: JumpBackInDelegate { func didLoadNewData() { ensureMainThread { - self.getLatestData() + self.recentTabs = self.jumpBackInDataAdaptor.getRecentTabData() + self.recentGroups = self.jumpBackInDataAdaptor.getGroupsData() + self.recentSyncedTab = self.jumpBackInDataAdaptor.getSyncedTabData() guard self.isEnabled else { return } self.delegate?.reloadView() } diff --git a/Tests/ClientTests/Frontend/Home/JumpBackIn/JumpBackInViewModelTests.swift b/Tests/ClientTests/Frontend/Home/JumpBackIn/JumpBackInViewModelTests.swift index f73e36a1e685..fe779093a015 100644 --- a/Tests/ClientTests/Frontend/Home/JumpBackIn/JumpBackInViewModelTests.swift +++ b/Tests/ClientTests/Frontend/Home/JumpBackIn/JumpBackInViewModelTests.swift @@ -169,6 +169,7 @@ class JumpBackInViewModelTests: XCTestCase { trait.overridenHorizontalSizeClass = .compact trait.overridenVerticalSizeClass = .regular + subject.didLoadNewData() subject.refreshData(for: trait, isPortrait: true, device: .phone) let maxItems = subject.sectionLayout.maxItemsToDisplay(hasAccount: false, device: .phone) @@ -186,6 +187,7 @@ class JumpBackInViewModelTests: XCTestCase { let trait = MockTraitCollection() trait.overridenHorizontalSizeClass = .compact trait.overridenVerticalSizeClass = .regular + subject.didLoadNewData() subject.refreshData(for: trait, isPortrait: true, device: .phone) let maxItems = subject.sectionLayout.maxItemsToDisplay(hasAccount: true, device: .phone) @@ -206,7 +208,7 @@ class JumpBackInViewModelTests: XCTestCase { let trait = MockTraitCollection() trait.overridenHorizontalSizeClass = .compact trait.overridenVerticalSizeClass = .regular - + subject.didLoadNewData() subject.refreshData(for: trait, isPortrait: true, device: .phone) let maxItems = subject.sectionLayout.maxItemsToDisplay(hasAccount: true, device: .phone) @@ -226,7 +228,8 @@ class JumpBackInViewModelTests: XCTestCase { let trait = MockTraitCollection() trait.overridenHorizontalSizeClass = .regular trait.overridenVerticalSizeClass = .compact - subject.refreshData(for: trait, isPortrait: false, device: .phone) + subject.didLoadNewData() + subject.refreshData(for: trait, isPortrait: true, device: .phone) let maxItems = subject.sectionLayout.maxItemsToDisplay(hasAccount: true, device: .phone) @@ -245,6 +248,7 @@ class JumpBackInViewModelTests: XCTestCase { let trait = MockTraitCollection() trait.overridenHorizontalSizeClass = .regular trait.overridenVerticalSizeClass = .compact + subject.didLoadNewData() subject.refreshData(for: trait, isPortrait: false, device: .phone) let maxItems = subject.sectionLayout.maxItemsToDisplay(hasAccount: true, device: .phone) @@ -284,6 +288,7 @@ class JumpBackInViewModelTests: XCTestCase { trait.overridenHorizontalSizeClass = .regular trait.overridenVerticalSizeClass = .regular + subject.didLoadNewData() subject.refreshData(for: trait, isPortrait: false, device: .pad) let maxItems = subject.sectionLayout.maxItemsToDisplay(hasAccount: true, device: .pad) @@ -320,6 +325,7 @@ class JumpBackInViewModelTests: XCTestCase { let trait = MockTraitCollection() trait.overridenHorizontalSizeClass = .regular trait.overridenVerticalSizeClass = .regular + subject.didLoadNewData() subject.refreshData(for: trait, isPortrait: false, device: .pad) let maxItems = subject.sectionLayout.maxItemsToDisplay(hasAccount: true, device: .pad) @@ -335,6 +341,7 @@ class JumpBackInViewModelTests: XCTestCase { let tab2 = createTab(profile: mockProfile, urlString: "www.firefox1.com") let tab3 = createTab(profile: mockProfile, urlString: "www.firefox1.com") adaptor.recentTabs = [tab1, tab2, tab3] + subject.didLoadNewData() // Start in portrait let portraitTrait = MockTraitCollection() @@ -379,6 +386,7 @@ class JumpBackInViewModelTests: XCTestCase { func testRefreshData_noData() { let subject = createSubject() + subject.didLoadNewData() subject.refreshData(for: MockTraitCollection()) XCTAssertEqual(subject.jumpBackInList.tabs.count, 0) @@ -389,6 +397,7 @@ class JumpBackInViewModelTests: XCTestCase { let subject = createSubject() let tab1 = createTab(profile: mockProfile, urlString: "www.firefox1.com") adaptor.recentTabs = [tab1] + subject.didLoadNewData() subject.refreshData(for: MockTraitCollection()) XCTAssertEqual(subject.jumpBackInList.tabs.count, 1) @@ -398,6 +407,7 @@ class JumpBackInViewModelTests: XCTestCase { func testRefreshData_syncedTab() { let subject = createSubject() adaptor.syncedTab = JumpBackInSyncedTab(client: remoteClient, tab: remoteTab) + subject.didLoadNewData() subject.refreshData(for: MockTraitCollection()) XCTAssertEqual(subject.jumpBackInList.tabs.count, 0) @@ -417,6 +427,7 @@ class JumpBackInViewModelTests: XCTestCase { let trait = MockTraitCollection() trait.overridenHorizontalSizeClass = .compact trait.overridenVerticalSizeClass = .regular + subject.didLoadNewData() subject.refreshData(for: trait, isPortrait: true, device: .phone) XCTAssertEqual(subject.sectionLayout, .compactJumpBackIn) @@ -436,6 +447,7 @@ class JumpBackInViewModelTests: XCTestCase { let trait = MockTraitCollection() trait.overridenHorizontalSizeClass = .compact trait.overridenVerticalSizeClass = .regular + subject.didLoadNewData() subject.refreshData(for: trait, isPortrait: true, device: .phone) XCTAssertEqual(subject.sectionLayout, .compactJumpBackIn) @@ -456,6 +468,7 @@ class JumpBackInViewModelTests: XCTestCase { let trait = MockTraitCollection() trait.overridenHorizontalSizeClass = .compact trait.overridenVerticalSizeClass = .regular + subject.didLoadNewData() subject.refreshData(for: trait, isPortrait: true, device: .phone) let jumpBackIn = subject.jumpBackInList @@ -480,6 +493,7 @@ class JumpBackInViewModelTests: XCTestCase { let trait = MockTraitCollection() trait.overridenHorizontalSizeClass = .regular trait.overridenVerticalSizeClass = .compact + subject.didLoadNewData() subject.refreshData(for: trait, isPortrait: false, device: .phone) let jumpBackIn = subject.jumpBackInList @@ -505,6 +519,7 @@ class JumpBackInViewModelTests: XCTestCase { let trait = MockTraitCollection() trait.overridenHorizontalSizeClass = .regular trait.overridenVerticalSizeClass = .compact + subject.didLoadNewData() subject.refreshData(for: trait, isPortrait: false, device: .phone) let jumpBackIn = subject.jumpBackInList