Skip to content

Commit f95fa40

Browse files
authored
Bugfix FXIOS-15857 [Newsfeed Categories] Fix search results disappearance after rotation (#33931)
1 parent 41e24f4 commit f95fa40

3 files changed

Lines changed: 59 additions & 0 deletions

File tree

firefox-ios/Client/Frontend/Browser/BrowserViewController/Views/BrowserViewController.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1629,6 +1629,9 @@ class BrowserViewController: UIViewController,
16291629
: [topBlurView, bottomBlurView, topTouchArea, statusBarOverlay, header,
16301630
bottomContentStackView, bottomContainer, overKeyboardContainer]
16311631
frontViews.filter { $0.superview === view }.forEach(view.bringSubviewToFront)
1632+
if let searchView = searchController?.view, searchView.superview === view {
1633+
view.bringSubviewToFront(searchView)
1634+
}
16321635
}
16331636

16341637
guard let homepageViewController = contentContainer.contentController as? HomepageViewController else { return }

firefox-ios/firefox-ios-tests/Tests/ClientTests/BrowserViewController/Constraints/BrowserViewControllerConstraintTests.swift

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,26 @@ final class BrowserViewControllerConstraintTests: BrowserViewControllerConstrain
225225
XCTAssertNotNil(subject.bottomContentStackView.superview)
226226
}
227227

228+
func test_updateContentContainerTopConstraint_keepsSearchControllerAboveHomepage() throws {
229+
setupNimbusHomepagePinnedHeaderTesting(isEnabled: true)
230+
let subject = createSubject()
231+
let searchController = createSearchController()
232+
let homepage = MockHomepageContentViewController()
233+
234+
subject.searchController = searchController
235+
subject.view.addSubview(searchController.view)
236+
defer {
237+
searchController.view.removeFromSuperview()
238+
subject.searchController = nil
239+
}
240+
subject.contentContainer.update(content: homepage)
241+
subject.updateContentContainerTopConstraint()
242+
243+
let searchIndex = try XCTUnwrap(subject.view.subviews.firstIndex(of: searchController.view))
244+
let contentIndex = try XCTUnwrap(subject.view.subviews.firstIndex(of: subject.contentContainer))
245+
XCTAssertGreaterThan(searchIndex, contentIndex)
246+
}
247+
228248
func test_readerModeBar_hasConstraintsWhenPresent() {
229249
let subject = createSubject()
230250

@@ -280,6 +300,28 @@ final class BrowserViewControllerConstraintTests: BrowserViewControllerConstrain
280300
return relevantConstraints.count
281301
}
282302

303+
private func createSearchController() -> SearchViewController {
304+
let searchEnginesManager = SearchEnginesManager(
305+
prefs: profile.prefs,
306+
files: profile.files,
307+
engineProvider: MockSearchEngineProvider()
308+
)
309+
let searchViewModel = SearchViewModel(
310+
isPrivate: false,
311+
isBottomSearchBar: false,
312+
profile: profile,
313+
model: searchEnginesManager,
314+
tabManager: tabManager,
315+
trendingSearchClient: MockTrendingSearchClient(),
316+
recentSearchProvider: MockRecentSearchProvider()
317+
)
318+
return SearchViewController(
319+
profile: profile,
320+
viewModel: searchViewModel,
321+
tabManager: tabManager
322+
)
323+
}
324+
283325
/// Check if two sibling views are connected by a constraint
284326
/// Example: overKeyboard.bottom connects to bottomContainer.top
285327
private func hasConstraintBetween(firstView: UIView,
@@ -301,3 +343,7 @@ final class BrowserViewControllerConstraintTests: BrowserViewControllerConstrain
301343
}
302344
}
303345
}
346+
347+
private final class MockHomepageContentViewController: UIViewController, ContentContainable {
348+
var contentType: ContentType { .homepage }
349+
}

firefox-ios/firefox-ios-tests/Tests/ClientTests/BrowserViewController/Constraints/BrowserViewControllerConstraintTestsBase.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ class BrowserViewControllerConstraintTestsBase: XCTestCase {
1616
tabManager = MockTabManager()
1717
DependencyHelperMock().bootstrapDependencies(injectedTabManager: tabManager)
1818
profile = MockProfile()
19+
setupNimbusHomepagePinnedHeaderTesting(isEnabled: false)
1920
}
2021

2122
override func tearDown() async throws {
@@ -52,6 +53,15 @@ class BrowserViewControllerConstraintTestsBase: XCTestCase {
5253
}
5354
}
5455

56+
func setupNimbusHomepagePinnedHeaderTesting(isEnabled: Bool) {
57+
FxNimbus.shared.features.homepageRedesignFeature.with { _, _ in
58+
return HomepageRedesignFeature(
59+
categoriesEnabled: isEnabled,
60+
pinnedHeaderEnabled: isEnabled
61+
)
62+
}
63+
}
64+
5565
func selectTabWithFindInPage() {
5666
let tab = Tab(profile: MockProfile(), windowUUID: .XCTestDefaultUUID)
5767
tab.isFindInPageMode = false

0 commit comments

Comments
 (0)