Skip to content

Commit 1170109

Browse files
committed
Add a feature flag and use the SDK filters.
1 parent 8acc901 commit 1170109

File tree

11 files changed

+40
-26
lines changed

11 files changed

+40
-26
lines changed

ElementX/Resources/Localizations/en.lproj/Localizable.strings

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1075,6 +1075,7 @@
10751075
"screen_roomlist_filter_favourites_empty_state_title" = "You don’t have favourite chats yet";
10761076
"screen_roomlist_filter_invites_empty_state_title" = "You don't have any pending invites.";
10771077
"screen_roomlist_filter_low_priority" = "Low Priority";
1078+
"screen_roomlist_filter_low_priority_empty_state_title" = "You don’t have any low priority chats yet";
10781079
"screen_roomlist_filter_mixed_empty_state_subtitle" = "You can deselect filters in order to see your other chats";
10791080
"screen_roomlist_filter_mixed_empty_state_title" = "You don’t have chats for this selection";
10801081
"screen_roomlist_filter_people_empty_state_title" = "You don’t have any DMs yet";

ElementX/Sources/Application/Settings/AppSettings.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ final class AppSettings {
5555
// Feature flags
5656
case publicSearchEnabled
5757
case fuzzyRoomListSearchEnabled
58+
case lowPriorityFilterEnabled
5859
case enableOnlySignedDeviceIsolationMode
5960
case enableKeyShareOnInvite
6061
case knockingEnabled
@@ -345,6 +346,9 @@ final class AppSettings {
345346
@UserPreference(key: UserDefaultsKeys.fuzzyRoomListSearchEnabled, defaultValue: false, storageType: .userDefaults(store))
346347
var fuzzyRoomListSearchEnabled
347348

349+
@UserPreference(key: UserDefaultsKeys.lowPriorityFilterEnabled, defaultValue: false, storageType: .userDefaults(store))
350+
var lowPriorityFilterEnabled
351+
348352
@UserPreference(key: UserDefaultsKeys.knockingEnabled, defaultValue: false, storageType: .userDefaults(store))
349353
var knockingEnabled
350354

ElementX/Sources/Generated/Strings.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2581,6 +2581,8 @@ internal enum L10n {
25812581
internal static var screenRoomlistFilterInvitesEmptyStateTitle: String { return L10n.tr("Localizable", "screen_roomlist_filter_invites_empty_state_title") }
25822582
/// Low Priority
25832583
internal static var screenRoomlistFilterLowPriority: String { return L10n.tr("Localizable", "screen_roomlist_filter_low_priority") }
2584+
/// You don’t have any low priority chats yet
2585+
internal static var screenRoomlistFilterLowPriorityEmptyStateTitle: String { return L10n.tr("Localizable", "screen_roomlist_filter_low_priority_empty_state_title") }
25842586
/// You can deselect filters in order to see your other chats
25852587
internal static var screenRoomlistFilterMixedEmptyStateSubtitle: String { return L10n.tr("Localizable", "screen_roomlist_filter_mixed_empty_state_subtitle") }
25862588
/// You don’t have chats for this selection

ElementX/Sources/Screens/HomeScreen/HomeScreenModels.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ struct HomeScreenViewState: BindableState {
113113
return rooms
114114
}
115115

116-
var bindings = HomeScreenViewStateBindings()
116+
var bindings: HomeScreenViewStateBindings
117117

118118
var placeholderRooms: [HomeScreenRoom] {
119119
(1...10).map { _ in
@@ -136,7 +136,7 @@ struct HomeScreenViewState: BindableState {
136136
}
137137

138138
struct HomeScreenViewStateBindings {
139-
var filtersState = RoomListFiltersState()
139+
var filtersState: RoomListFiltersState
140140
var searchQuery = ""
141141
var isSearchFieldFocused = false
142142

ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
4040

4141
roomSummaryProvider = userSession.clientProxy.roomSummaryProvider
4242

43-
super.init(initialViewState: .init(userID: userSession.clientProxy.userID),
43+
super.init(initialViewState: .init(userID: userSession.clientProxy.userID,
44+
bindings: .init(filtersState: .init(appSettings: appSettings))),
4445
mediaProvider: userSession.mediaProvider)
4546

4647
userSession.clientProxy.userAvatarURLPublisher

ElementX/Sources/Screens/HomeScreen/View/Filters/RoomListFilterModels.swift

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,24 +74,28 @@ enum RoomListFilter: Int, CaseIterable, Identifiable {
7474
case .invites:
7575
return .invite
7676
case .lowPriority:
77-
// TODO: Replace with actual SDK filter when available
78-
// This will need to be updated to .all(filters: [.lowPriority, .joined]) when SDK support is ready
79-
// Note: The main logic for NonLowPriority vs LowPriority filtering is handled in setFilter method
80-
return .all(filters: [.joined])
77+
// Note: When not activated, the setFilter method automatically applies the .nonLowPriority filter.
78+
return .all(filters: [.lowPriority, .joined])
8179
}
8280
}
8381
}
8482

8583
struct RoomListFiltersState {
8684
private(set) var activeFilters: OrderedSet<RoomListFilter>
85+
private let appSettings: AppSettings
8786

88-
init(activeFilters: OrderedSet<RoomListFilter> = []) {
87+
init(activeFilters: OrderedSet<RoomListFilter> = [], appSettings: AppSettings) {
8988
self.activeFilters = .init(activeFilters)
89+
self.appSettings = appSettings
9090
}
9191

9292
var availableFilters: [RoomListFilter] {
9393
var availableFilters = OrderedSet(RoomListFilter.availableFilters)
9494

95+
if !appSettings.lowPriorityFilterEnabled {
96+
availableFilters.remove(.lowPriority)
97+
}
98+
9599
for filter in activeFilters {
96100
availableFilters.remove(filter)
97101
filter.incompatibleFilters.forEach { availableFilters.remove($0) }

ElementX/Sources/Screens/HomeScreen/View/Filters/RoomListFiltersEmptyStateView.swift

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ struct RoomListFiltersEmptyStateView: View {
2323
return L10n.screenRoomlistFilterFavouritesEmptyStateTitle
2424
case .invites:
2525
return L10n.screenRoomlistFilterInvitesEmptyStateTitle
26+
case .lowPriority:
27+
return L10n.screenRoomlistFilterLowPriorityEmptyStateTitle
2628
}
2729
}
2830
return L10n.screenRoomlistFilterMixedEmptyStateTitle
@@ -55,9 +57,11 @@ struct RoomListFiltersEmptyStateView_Previews: PreviewProvider, TestablePreview
5557
static var previews: some View {
5658
VStack(spacing: 24) {
5759
ForEach(RoomListFilter.allCases) { filter in
58-
RoomListFiltersEmptyStateView(state: .init(activeFilters: [filter]))
60+
RoomListFiltersEmptyStateView(state: .init(activeFilters: [filter],
61+
appSettings: ServiceLocator.shared.settings))
5962
}
60-
RoomListFiltersEmptyStateView(state: .init(activeFilters: [.people, .favourites]))
63+
RoomListFiltersEmptyStateView(state: .init(activeFilters: [.people, .favourites],
64+
appSettings: ServiceLocator.shared.settings))
6165
}
6266
.padding(.bottom)
6367
.previewLayout(.sizeThatFits)

ElementX/Sources/Screens/HomeScreen/View/Filters/RoomListFiltersView.swift

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,12 @@ struct RoomListFiltersView: View {
8787

8888
struct RoomListFiltersView_Previews: PreviewProvider, TestablePreview {
8989
static var previews: some View {
90-
RoomListFiltersView(state: .constant(.init()))
91-
RoomListFiltersView(state: .constant(.init(activeFilters: [.rooms, .favourites])))
92-
RoomListFiltersView(state: .constant(.init(activeFilters: [.lowPriority])))
93-
RoomListFiltersView(state: .constant(.init(activeFilters: [.unreads, .lowPriority])))
90+
RoomListFiltersView(state: .constant(.init(appSettings: ServiceLocator.shared.settings)))
91+
RoomListFiltersView(state: .constant(.init(activeFilters: [.rooms, .favourites],
92+
appSettings: ServiceLocator.shared.settings)))
93+
RoomListFiltersView(state: .constant(.init(activeFilters: [.lowPriority],
94+
appSettings: ServiceLocator.shared.settings)))
95+
RoomListFiltersView(state: .constant(.init(activeFilters: [.unreads, .lowPriority],
96+
appSettings: ServiceLocator.shared.settings)))
9497
}
9598
}

ElementX/Sources/Screens/Settings/DeveloperOptionsScreen/DeveloperOptionsScreenModels.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ protocol DeveloperOptionsProtocol: AnyObject {
5050

5151
var publicSearchEnabled: Bool { get set }
5252
var fuzzyRoomListSearchEnabled: Bool { get set }
53+
var lowPriorityFilterEnabled: Bool { get set }
5354
var knockingEnabled: Bool { get set }
5455
}
5556

ElementX/Sources/Screens/Settings/DeveloperOptionsScreen/View/DeveloperOptionsScreen.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ struct DeveloperOptionsScreen: View {
5050
Toggle(isOn: $context.fuzzyRoomListSearchEnabled) {
5151
Text("Fuzzy searching")
5252
}
53+
54+
Toggle(isOn: $context.lowPriorityFilterEnabled) {
55+
Text("Low priority filter")
56+
}
5357
}
5458

5559
Section("Timeline") {

0 commit comments

Comments
 (0)