Add a setting to hide unread messages badges. (#2412)

* Add a setting to hide grey unread messages badges.

* Move room badge logic to be built in the view model instead of in the view.

* Move setting into DeveloperOptions.
This commit is contained in:
Doug
2024-02-07 13:00:35 +00:00
committed by GitHub
parent b075ddb047
commit d0c835a9bf
12 changed files with 85 additions and 75 deletions
@@ -90,6 +90,10 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
.weakAssign(to: \.state.markAsUnreadEnabled, on: self)
.store(in: &cancellables)
appSettings.$hideUnreadMessagesBadge
.sink { [weak self] _ in self?.updateRooms() }
.store(in: &cancellables)
let isSearchFieldFocused = context.$viewState.map(\.bindings.isSearchFieldFocused)
let searchQuery = context.$viewState.map(\.bindings.searchQuery)
isSearchFieldFocused
@@ -339,11 +343,11 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
switch summary {
case .empty:
rooms.append(HomeScreenRoom.placeholder())
case .invalidated(let details):
let room = buildRoom(with: details, invalidated: true)
rooms.append(room)
case .filled(let details):
let room = buildRoom(with: details, invalidated: false)
let room = HomeScreenRoom(details: details, invalidated: false, hideUnreadMessagesBadge: appSettings.hideUnreadMessagesBadge)
rooms.append(room)
case .invalidated(let details):
let room = HomeScreenRoom(details: details, invalidated: true, hideUnreadMessagesBadge: appSettings.hideUnreadMessagesBadge)
rooms.append(room)
}
}
@@ -353,23 +357,6 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
MXLog.verbose("Finished updating rooms")
}
private func buildRoom(with details: RoomSummaryDetails, invalidated: Bool) -> HomeScreenRoom {
let identifier = invalidated ? "invalidated-" + details.id : details.id
return HomeScreenRoom(id: identifier,
roomId: details.id,
name: details.name,
isMarkedUnread: details.isMarkedUnread,
hasUnreadMessages: details.unreadMessagesCount > 0,
hasUnreadMentions: details.unreadMentionsCount > 0,
hasUnreadNotifications: details.unreadNotificationsCount > 0,
hasOngoingCall: details.hasOngoingCall,
timestamp: details.lastMessageFormattedTimestamp,
lastMessage: details.lastMessage,
avatarURL: details.avatarURL,
notificationMode: details.notificationMode)
}
private func updateVisibleRange(_ range: Range<Int>) {
guard !range.isEmpty else {
return