Skip to content

Commit 93018f2

Browse files
FM-1491: Fix view mode not being remembered
1 parent 76d5bd2 commit 93018f2

File tree

7 files changed

+29
-12
lines changed

7 files changed

+29
-12
lines changed

Modules/Presentation/Features/Search/Sources/Search/UI/SearchResultsView.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ struct SearchResultsViewPreviews: PreviewProvider {
185185
chipTapped: { _, _ in }
186186
),
187187
config: .example,
188+
layout: .list,
188189
keyboardVisibilityHandler: MockKeyboardVisibilityHandler()
189190

190191
)

Modules/Presentation/Features/Search/Sources/Search/UI/SearchResultsViewModel.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public class SearchResultsViewModel: ObservableObject {
1212
// this will need to be to exposed outside when parent will need to know exactly what is selected
1313
@Published var selected: Set<ResultId> = []
1414

15-
@Published public var layout: PageLayout = .list
15+
@Published public var layout: PageLayout
1616

1717
@Published var chipsItems: [ChipViewModel] = []
1818
@Published var presentedChipsPickerViewModel: ChipViewModel?
@@ -72,6 +72,7 @@ public class SearchResultsViewModel: ObservableObject {
7272
resultsProvider: any SearchResultsProviding,
7373
bridge: SearchBridge,
7474
config: SearchConfig,
75+
layout: PageLayout,
7576
showLoadingPlaceholderDelay: Double = 1,
7677
searchInputDebounceDelay: Double = 0.5,
7778
keyboardVisibilityHandler: any KeyboardVisibilityHandling
@@ -82,7 +83,7 @@ public class SearchResultsViewModel: ObservableObject {
8283
self.showLoadingPlaceholderDelay = showLoadingPlaceholderDelay
8384
self.searchInputDebounceDelay = searchInputDebounceDelay
8485
self.keyboardVisibilityHandler = keyboardVisibilityHandler
85-
86+
self.layout = layout
8687
self.bridge.queryChanged = { [weak self] query in
8788
let _self = self
8889

Modules/Presentation/Features/Search/Tests/SearchTests/SearchResultsViewModelTests.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ final class SearchResultsViewModelTests: XCTestCase {
5555
resultsProvider: resultsProvider,
5656
bridge: bridge,
5757
config: config,
58+
layout: .list,
5859
showLoadingPlaceholderDelay: 0.1,
5960
keyboardVisibilityHandler: MockKeyboardVisibilityHandler()
6061
)

SearchDemo/SearchDemoApp.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ struct ContentView: View {
4141
}
4242
),
4343
config: .testConfig,
44+
layout: .list,
4445
keyboardVisibilityHandler: KeyboardVisibilityHandler(notificationCenter: .default)
4546
)
4647
var body: some View {

iMEGA/Home/Scenes/HomeScreenFactory.swift

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,15 @@ final class HomeScreenFactory: NSObject {
2121
private var megaStore: MEGAStore {
2222
MEGAStore.shareInstance()
2323
}
24+
25+
private var newViewModeStore: some ViewModeStore {
26+
ViewModeStore(
27+
preferenceRepo: PreferenceRepository(userDefaults: .standard),
28+
megaStore: megaStore,
29+
sdk: sdk,
30+
notificationCenter: notificationCenter
31+
)
32+
}
2433

2534
func createHomeScreen(
2635
from tabBarController: MainTabBarController,
@@ -97,12 +106,8 @@ final class HomeScreenFactory: NSObject {
97106

98107
navigationController.tabBarItem = UITabBarItem(title: nil, image: Asset.Images.TabBarIcons.home.image, selectedImage: nil)
99108

100-
homeViewController.viewModeStore = ViewModeStore(
101-
preferenceRepo: PreferenceRepository(userDefaults: .standard),
102-
megaStore: megaStore,
103-
sdk: sdk,
104-
notificationCenter: notificationCenter
105-
)
109+
let viewModeStore = newViewModeStore
110+
homeViewController.viewModeStore = viewModeStore
106111

107112
let bridge = SearchResultsBridge()
108113
homeViewController.searchResultsBridge = bridge
@@ -112,6 +117,7 @@ final class HomeScreenFactory: NSObject {
112117
bridge: bridge,
113118
newHomeSearchResultsEnabled: newHomeSearchResultsEnabled,
114119
tracker: tracker,
120+
viewModeStore: viewModeStore,
115121
enableItemMultiSelection: enableItemMultiSelection
116122
)
117123

@@ -151,6 +157,7 @@ final class HomeScreenFactory: NSObject {
151157
bridge: SearchResultsBridge,
152158
newHomeSearchResultsEnabled: Bool,
153159
tracker: some AnalyticsTracking,
160+
viewModeStore: some ViewModeStoring,
154161
enableItemMultiSelection: Bool
155162
) -> UIViewController {
156163

@@ -159,6 +166,7 @@ final class HomeScreenFactory: NSObject {
159166
with: navigationController,
160167
bridge: bridge,
161168
tracker: tracker,
169+
viewModeStore: viewModeStore,
162170
enableItemMultiSelection: enableItemMultiSelection
163171
)
164172
} else {
@@ -187,6 +195,7 @@ final class HomeScreenFactory: NSObject {
187195
with navigationController: UINavigationController,
188196
bridge: SearchResultsBridge,
189197
tracker: some AnalyticsTracking,
198+
viewModeStore: some ViewModeStoring,
190199
enableItemMultiSelection: Bool
191200
) -> UIViewController {
192201

@@ -267,6 +276,7 @@ final class HomeScreenFactory: NSObject {
267276
enableItemMultiSelection: enableItemMultiSelection
268277
)
269278
),
279+
layout: viewModeStore.viewMode(for: .init(customLocation: CustomHomeSearch)).pageLayout ?? .list,
270280
keyboardVisibilityHandler: KeyboardVisibilityHandler(notificationCenter: notificationCenter)
271281

272282
)

iMEGA/My Account/Login/MainTabBarController+Additions.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ extension MainTabBarController {
6363
isNewHomeSearchEnabled: Bool
6464
) async {
6565
guard let nav = defaultViewControllers[2] as? MEGANavigationController,
66-
let homeVC = nav.viewControllers.first as? HomeViewController
66+
let homeVC = nav.viewControllers.first as? HomeViewController,
67+
let viewModeStore = homeVC.viewModeStore
6768
else {
6869
return
6970
}
@@ -73,6 +74,7 @@ extension MainTabBarController {
7374
bridge: homeVC.searchResultsBridge,
7475
newHomeSearchResultsEnabled: isNewHomeSearchEnabled,
7576
tracker: DIContainer.tracker,
77+
viewModeStore: viewModeStore,
7678
enableItemMultiSelection: false // not enabled in the home search results
7779
)
7880
homeVC.searchResultViewController = searchResultVC

iMEGA/Utils/CoreData/ManagedObjects/Appearance/MEGAStore+OfflineAppearancePreference.swift

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ extension MEGAStore {
1313
offlineAppearancePreference.sortType = NSNumber(value: sortType)
1414
}
1515

16-
MEGAStore.shareInstance().save(context)
16+
save(context)
1717
}
1818

1919
@objc func insertOrUpdateOfflineViewMode(path: String, viewMode: Int) {
@@ -27,7 +27,7 @@ extension MEGAStore {
2727
offlineAppearancePreference.viewMode = NSNumber(value: viewMode)
2828
}
2929

30-
MEGAStore.shareInstance().save(context)
30+
save(context)
3131
}
3232

3333
@objc func fetchOfflineAppearancePreference(path: String) -> OfflineAppearancePreference? {
@@ -76,7 +76,7 @@ extension MEGAStore {
7676
MEGALogDebug("Deleted OfflineAppearancePreference \(offlineAppearancePreference)")
7777
context.delete(offlineAppearancePreference)
7878

79-
MEGAStore.shareInstance().save(context)
79+
save(context)
8080
}
8181
}
8282

@@ -88,5 +88,6 @@ extension MEGAStore {
8888
MEGALogDebug("Delete OfflineAppearancePreference \(offlineAppearancePreference)")
8989
context.delete(offlineAppearancePreference)
9090
}
91+
save(context)
9192
}
9293
}

0 commit comments

Comments
 (0)