diff --git a/ElementX.xcodeproj/project.pbxproj b/ElementX.xcodeproj/project.pbxproj index b0a0ac0b5..573e62ac3 100644 --- a/ElementX.xcodeproj/project.pbxproj +++ b/ElementX.xcodeproj/project.pbxproj @@ -6650,7 +6650,7 @@ repositoryURL = "https://github.com/matrix-org/matrix-rust-components-swift"; requirement = { kind = exactVersion; - version = 1.1.29; + version = 1.1.30; }; }; 821C67C9A7F8CC3FD41B28B4 /* XCRemoteSwiftPackageReference "emojibase-bindings" */ = { diff --git a/ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 0b32fddb7..b3106dd86 100644 --- a/ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -130,8 +130,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/matrix-org/matrix-rust-components-swift", "state" : { - "revision" : "82a58f61f5d01d90b364a3aad28597fd703cea71", - "version" : "1.1.29" + "revision" : "9b63f21292be70ca13c57ccbd89cd9478daa8cdc", + "version" : "1.1.30" } }, { diff --git a/ElementX/Sources/Screens/HomeScreen/HomeScreenModels.swift b/ElementX/Sources/Screens/HomeScreen/HomeScreenModels.swift index fd67d8bb6..b6c8322ff 100644 --- a/ElementX/Sources/Screens/HomeScreen/HomeScreenModels.swift +++ b/ElementX/Sources/Screens/HomeScreen/HomeScreenModels.swift @@ -128,6 +128,8 @@ struct HomeScreenRoom: Identifiable, Equatable { var hasUnreads = false + var hasMentions = false + var hasOngoingCall = false var timestamp: String? @@ -145,6 +147,7 @@ struct HomeScreenRoom: Identifiable, Equatable { roomId: nil, name: "Placeholder room name", hasUnreads: false, + hasMentions: false, timestamp: "Now", lastMessage: placeholderLastMessage, isPlaceholder: true) diff --git a/ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift b/ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift index b73c5cf80..815f28928 100644 --- a/ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift +++ b/ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift @@ -300,17 +300,16 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol private func buildRoom(with details: RoomSummaryDetails, invalidated: Bool) -> HomeScreenRoom { let identifier = invalidated ? "invalidated-" + details.id : details.id - let notificationMode = details.notificationMode == .allMessages ? nil : details.notificationMode - return HomeScreenRoom(id: identifier, roomId: details.id, name: details.name, - hasUnreads: details.unreadNotificationCount > 0, + hasUnreads: details.unreadMessagesCount > 0, + hasMentions: details.unreadMentionsCount > 0, hasOngoingCall: details.hasOngoingCall, timestamp: details.lastMessageFormattedTimestamp, lastMessage: details.lastMessage, avatarURL: details.avatarURL, - notificationMode: notificationMode) + notificationMode: details.notificationMode) } private func updateVisibleRange(_ range: Range) { diff --git a/ElementX/Sources/Screens/HomeScreen/View/HomeScreenRoomCell.swift b/ElementX/Sources/Screens/HomeScreen/View/HomeScreenRoomCell.swift index 3d4e8b951..9def8d4e9 100644 --- a/ElementX/Sources/Screens/HomeScreen/View/HomeScreenRoomCell.swift +++ b/ElementX/Sources/Screens/HomeScreen/View/HomeScreenRoomCell.swift @@ -95,8 +95,8 @@ struct HomeScreenRoomCell: View { if let timestamp = room.timestamp { Text(timestamp) - .font(room.hasUnreads ? .compound.bodySMSemibold : .compound.bodySM) - .foregroundColor(room.hasUnreads ? .compound.textActionAccent : .compound.textSecondary) + .font(isHighlighted ? .compound.bodySMSemibold : .compound.bodySM) + .foregroundColor(isHighlighted ? .compound.textActionAccent : .compound.textSecondary) } } } @@ -119,33 +119,48 @@ struct HomeScreenRoomCell: View { HStack(spacing: 8) { if room.hasOngoingCall { CompoundIcon(\.videoCallSolid, size: .xSmall, relativeTo: .compound.bodySM) - .foregroundColor(room.hasUnreads ? .compound.iconAccentTertiary : .compound.iconQuaternary) + .foregroundColor(isHighlighted ? .compound.iconAccentTertiary : .compound.iconQuaternary) + } + + if room.notificationMode == .mute { + CompoundIcon(\.notificationsSolidOff, size: .custom(15), relativeTo: .compound.bodyMD) + .accessibilityLabel(L10n.a11yNotificationsMuted) + .foregroundColor(.compound.iconQuaternary) } - notificationModeIcon - .foregroundColor(room.hasUnreads ? .compound.iconAccentTertiary : .compound.iconQuaternary) + if room.hasMentions, room.notificationMode != .mute { + mentionIcon + .foregroundColor(.compound.iconAccentTertiary) + } - if room.hasUnreads { + if hasNewContent { Circle() .frame(width: 12, height: 12) - .foregroundColor(.compound.iconAccentTertiary) + .foregroundColor(isHighlighted ? .compound.iconAccentTertiary : .compound.iconQuaternary) } } } } - @ViewBuilder - private var notificationModeIcon: some View { - switch room.notificationMode { - case .none, .allMessages: - EmptyView() - case .mentionsAndKeywordsOnly: - CompoundIcon(\.mention, size: .custom(15), relativeTo: .compound.bodyMD) - .accessibilityLabel(L10n.a11yNotificationsMentionsOnly) - case .mute: - CompoundIcon(\.notificationsSolidOff, size: .custom(15), relativeTo: .compound.bodyMD) - .accessibilityLabel(L10n.a11yNotificationsMuted) + private var hasNewContent: Bool { + room.hasUnreads || room.hasMentions + } + + private var isHighlighted: Bool { + guard !room.isPlaceholder else { + return false } + return (isNotificationModeUnrestricted && hasNewContent) || + (room.notificationMode == .mentionsAndKeywordsOnly && room.hasMentions) + } + + private var isNotificationModeUnrestricted: Bool { + room.notificationMode == nil || room.notificationMode == .allMessages + } + + private var mentionIcon: some View { + CompoundIcon(\.mention, size: .custom(15), relativeTo: .compound.bodyMD) + .accessibilityLabel(L10n.a11yNotificationsMentionsOnly) } @ViewBuilder @@ -178,41 +193,67 @@ private extension View { } struct HomeScreenRoomCell_Previews: PreviewProvider, TestablePreview { - static var previews: some View { - let summaryProvider = MockRoomSummaryProvider(state: .loaded(.mockRooms)) - - let userSession = MockUserSession(clientProxy: MockClientProxy(userID: "John Doe", roomSummaryProvider: summaryProvider), + static let summaryProviderGeneric = MockRoomSummaryProvider(state: .loaded(.mockRooms)) + static let viewModelGeneric = { + let userSession = MockUserSession(clientProxy: MockClientProxy(userID: "John Doe", roomSummaryProvider: summaryProviderGeneric), mediaProvider: MockMediaProvider(), voiceMessageMediaManager: VoiceMessageMediaManagerMock()) - let viewModel = HomeScreenViewModel(userSession: userSession, - selectedRoomPublisher: CurrentValueSubject(nil).asCurrentValuePublisher(), - appSettings: ServiceLocator.shared.settings, - userIndicatorController: ServiceLocator.shared.userIndicatorController) - - let rooms: [HomeScreenRoom] = summaryProvider.roomListPublisher.value.compactMap { summary -> HomeScreenRoom? in - switch summary { - case .empty: - return nil - case .invalidated(let details), .filled(let details): - return HomeScreenRoom(id: UUID().uuidString, - roomId: details.id, - name: details.name, - hasUnreads: details.unreadNotificationCount > 0, - hasOngoingCall: details.hasOngoingCall, - timestamp: Date(timeIntervalSinceReferenceDate: 0).formattedMinimal(), - lastMessage: details.lastMessage, - notificationMode: details.notificationMode) - } - } + return HomeScreenViewModel(userSession: userSession, + selectedRoomPublisher: CurrentValueSubject(nil).asCurrentValuePublisher(), + appSettings: ServiceLocator.shared.settings, + userIndicatorController: ServiceLocator.shared.userIndicatorController) + }() + + static let summaryProviderForNotificationsState = MockRoomSummaryProvider(state: .loaded(.mockRoomsWithNotificationsState)) + static let viewModelForNotificationsState = { + let userSession = MockUserSession(clientProxy: MockClientProxy(userID: "John Doe", roomSummaryProvider: summaryProviderForNotificationsState), + mediaProvider: MockMediaProvider(), + voiceMessageMediaManager: VoiceMessageMediaManagerMock()) - return VStack(spacing: 0) { - ForEach(rooms) { room in - HomeScreenRoomCell(room: room, context: viewModel.context, isSelected: false) - } - - HomeScreenRoomCell(room: .placeholder(), context: viewModel.context, isSelected: false) - .redacted(reason: .placeholder) + return HomeScreenViewModel(userSession: userSession, + selectedRoomPublisher: CurrentValueSubject(nil).asCurrentValuePublisher(), + appSettings: ServiceLocator.shared.settings, + userIndicatorController: ServiceLocator.shared.userIndicatorController) + }() + + static func mockRoom(summary: RoomSummary) -> HomeScreenRoom? { + switch summary { + case .empty: + return nil + case .invalidated(let details), .filled(let details): + return HomeScreenRoom(id: UUID().uuidString, + roomId: details.id, + name: details.name, + hasUnreads: details.unreadMessagesCount > 0, hasMentions: details.unreadMentionsCount > 0, + hasOngoingCall: details.hasOngoingCall, + timestamp: Date(timeIntervalSinceReferenceDate: 0).formattedMinimal(), + lastMessage: details.lastMessage, + notificationMode: details.notificationMode) } } + + static var previews: some View { + let genericRooms: [HomeScreenRoom] = summaryProviderGeneric.roomListPublisher.value.compactMap(mockRoom) + + let notificationsStateRooms: [HomeScreenRoom] = summaryProviderForNotificationsState.roomListPublisher.value.compactMap(mockRoom) + + VStack(spacing: 0) { + ForEach(genericRooms) { room in + HomeScreenRoomCell(room: room, context: viewModelGeneric.context, isSelected: false) + } + + HomeScreenRoomCell(room: .placeholder(), context: viewModelGeneric.context, isSelected: false) + .redacted(reason: .placeholder) + } + .previewDisplayName("Generic") + + VStack(spacing: 0) { + ForEach(notificationsStateRooms) { room in + HomeScreenRoomCell(room: room, context: viewModelForNotificationsState.context, isSelected: false) + } + } + .previewLayout(.sizeThatFits) + .previewDisplayName("Notifications State") + } } diff --git a/ElementX/Sources/Screens/InvitesScreen/View/InvitesScreenCell.swift b/ElementX/Sources/Screens/InvitesScreen/View/InvitesScreenCell.swift index 0f83e1c38..2ad199159 100644 --- a/ElementX/Sources/Screens/InvitesScreen/View/InvitesScreenCell.swift +++ b/ElementX/Sources/Screens/InvitesScreen/View/InvitesScreenCell.swift @@ -186,7 +186,8 @@ private extension InvitesScreenRoomDetails { avatarURL: nil, lastMessage: nil, lastMessageFormattedTimestamp: nil, - unreadNotificationCount: 0, + unreadMessagesCount: 0, + unreadMentionsCount: 0, notificationMode: nil, canonicalAlias: "#footest:somewhere.org", inviter: inviter, @@ -206,7 +207,8 @@ private extension InvitesScreenRoomDetails { avatarURL: avatarURL, lastMessage: nil, lastMessageFormattedTimestamp: nil, - unreadNotificationCount: 0, + unreadMessagesCount: 0, + unreadMentionsCount: 0, notificationMode: nil, canonicalAlias: alias, inviter: inviter, diff --git a/ElementX/Sources/Services/NotificationSettings/RoomNotificationModeProxy.swift b/ElementX/Sources/Services/NotificationSettings/RoomNotificationModeProxy.swift index d70c94844..158705858 100644 --- a/ElementX/Sources/Services/NotificationSettings/RoomNotificationModeProxy.swift +++ b/ElementX/Sources/Services/NotificationSettings/RoomNotificationModeProxy.swift @@ -17,7 +17,7 @@ import Foundation import MatrixRustSDK -enum RoomNotificationModeProxy { +enum RoomNotificationModeProxy: String { case allMessages case mentionsAndKeywordsOnly case mute diff --git a/ElementX/Sources/Services/Room/RoomSummary/MockRoomSummaryProvider.swift b/ElementX/Sources/Services/Room/RoomSummary/MockRoomSummaryProvider.swift index a1e8f77ce..eb136c708 100644 --- a/ElementX/Sources/Services/Room/RoomSummary/MockRoomSummaryProvider.swift +++ b/ElementX/Sources/Services/Room/RoomSummary/MockRoomSummaryProvider.swift @@ -83,7 +83,8 @@ extension Array where Element == RoomSummary { avatarURL: nil, lastMessage: AttributedString("I do not wish to take the trouble to understand mysticism"), lastMessageFormattedTimestamp: "14:56", - unreadNotificationCount: 0, + unreadMessagesCount: 0, + unreadMentionsCount: 0, notificationMode: .allMessages, canonicalAlias: nil, inviter: nil, @@ -94,7 +95,8 @@ extension Array where Element == RoomSummary { avatarURL: URL.picturesDirectory, lastMessage: AttributedString("How do you see the Emperor then? You think he keeps office hours?"), lastMessageFormattedTimestamp: "2:56 PM", - unreadNotificationCount: 2, + unreadMessagesCount: 2, + unreadMentionsCount: 0, notificationMode: .mute, canonicalAlias: nil, inviter: nil, @@ -105,7 +107,8 @@ extension Array where Element == RoomSummary { avatarURL: nil, lastMessage: try? AttributedString(markdown: "He certainly seemed no *mental genius* to me"), lastMessageFormattedTimestamp: "Some time ago", - unreadNotificationCount: 3, + unreadMessagesCount: 3, + unreadMentionsCount: 0, notificationMode: .mentionsAndKeywordsOnly, canonicalAlias: nil, inviter: nil, @@ -116,7 +119,8 @@ extension Array where Element == RoomSummary { avatarURL: nil, lastMessage: AttributedString("There's an archaic measure of time that's called the month"), lastMessageFormattedTimestamp: "Just now", - unreadNotificationCount: 4, + unreadMessagesCount: 2, + unreadMentionsCount: 2, notificationMode: .allMessages, canonicalAlias: nil, inviter: nil, @@ -127,7 +131,8 @@ extension Array where Element == RoomSummary { avatarURL: nil, lastMessage: AttributedString("Clearly, if Earth is powerful enough to do that, it might also be capable of adjusting minds in order to force belief in its radioactivity"), lastMessageFormattedTimestamp: "1986", - unreadNotificationCount: 5, + unreadMessagesCount: 1, + unreadMentionsCount: 1, notificationMode: .allMessages, canonicalAlias: nil, inviter: nil, @@ -138,7 +143,8 @@ extension Array where Element == RoomSummary { avatarURL: nil, lastMessage: AttributedString("Are you groping for the word 'paranoia'?"), lastMessageFormattedTimestamp: "きょうはじゅういちがつじゅういちにちです", - unreadNotificationCount: 6, + unreadMessagesCount: 6, + unreadMentionsCount: 0, notificationMode: .mute, canonicalAlias: nil, inviter: nil, @@ -149,7 +155,8 @@ extension Array where Element == RoomSummary { avatarURL: nil, lastMessage: nil, lastMessageFormattedTimestamp: nil, - unreadNotificationCount: 0, + unreadMessagesCount: 0, + unreadMentionsCount: 0, notificationMode: nil, canonicalAlias: nil, inviter: nil, @@ -157,13 +164,65 @@ extension Array where Element == RoomSummary { .empty ] + static let mockRoomsWithNotificationsState: [Element] = [ + .filled(details: RoomSummaryDetails(id: "1", + settingsMode: .allMessages, + hasUnreadMessages: false, + hasUnreadMentions: false)), + .filled(details: RoomSummaryDetails(id: "2", + settingsMode: .allMessages, + hasUnreadMessages: true, + hasUnreadMentions: false)), + .filled(details: RoomSummaryDetails(id: "3", + settingsMode: .allMessages, + hasUnreadMessages: true, + hasUnreadMentions: true)), + .filled(details: RoomSummaryDetails(id: "4", + settingsMode: .allMessages, + hasUnreadMessages: false, + hasUnreadMentions: true)), + .filled(details: RoomSummaryDetails(id: "5", + settingsMode: .mentionsAndKeywordsOnly, + hasUnreadMessages: false, + hasUnreadMentions: false)), + .filled(details: RoomSummaryDetails(id: "6", + settingsMode: .mentionsAndKeywordsOnly, + hasUnreadMessages: true, + hasUnreadMentions: false)), + .filled(details: RoomSummaryDetails(id: "7", + settingsMode: .mentionsAndKeywordsOnly, + hasUnreadMessages: true, + hasUnreadMentions: true)), + .filled(details: RoomSummaryDetails(id: "8", + settingsMode: .mentionsAndKeywordsOnly, + hasUnreadMessages: false, + hasUnreadMentions: true)), + .filled(details: RoomSummaryDetails(id: "9", + settingsMode: .mute, + hasUnreadMessages: false, + hasUnreadMentions: false)), + .filled(details: RoomSummaryDetails(id: "10", + settingsMode: .mute, + hasUnreadMessages: true, + hasUnreadMentions: false)), + .filled(details: RoomSummaryDetails(id: "11", + settingsMode: .mute, + hasUnreadMessages: true, + hasUnreadMentions: true)), + .filled(details: RoomSummaryDetails(id: "12", + settingsMode: .mute, + hasUnreadMessages: false, + hasUnreadMentions: true)) + ] + static let mockInvites: [Element] = [ .filled(details: RoomSummaryDetails(id: "someAwesomeRoomId1", name: "First room", isDirect: false, avatarURL: URL.picturesDirectory, lastMessage: nil, lastMessageFormattedTimestamp: nil, - unreadNotificationCount: 0, + unreadMessagesCount: 0, + unreadMentionsCount: 0, notificationMode: nil, canonicalAlias: "#footest:somewhere.org", inviter: RoomMemberProxyMock.mockCharlie, @@ -174,7 +233,8 @@ extension Array where Element == RoomSummary { avatarURL: nil, lastMessage: nil, lastMessageFormattedTimestamp: nil, - unreadNotificationCount: 0, + unreadMessagesCount: 0, + unreadMentionsCount: 0, notificationMode: nil, canonicalAlias: nil, inviter: RoomMemberProxyMock.mockCharlie, diff --git a/ElementX/Sources/Services/Room/RoomSummary/RoomSummaryDetails.swift b/ElementX/Sources/Services/Room/RoomSummary/RoomSummaryDetails.swift index 380b232c7..7857677f1 100644 --- a/ElementX/Sources/Services/Room/RoomSummary/RoomSummaryDetails.swift +++ b/ElementX/Sources/Services/Room/RoomSummary/RoomSummaryDetails.swift @@ -24,7 +24,8 @@ struct RoomSummaryDetails { let avatarURL: URL? let lastMessage: AttributedString? let lastMessageFormattedTimestamp: String? - let unreadNotificationCount: UInt + let unreadMessagesCount: UInt + let unreadMentionsCount: UInt let notificationMode: RoomNotificationModeProxy? let canonicalAlias: String? let inviter: RoomMemberProxyProtocol? @@ -33,6 +34,24 @@ struct RoomSummaryDetails { extension RoomSummaryDetails: CustomStringConvertible { var description: String { - "id: \"\(id)\", isDirect: \"\(isDirect)\", unreadNotificationCount: \"\(unreadNotificationCount)\"" + "RoomSummaryDetails: - id: \(id) - isDirect: \(isDirect) - unreadMessagesCount: \(unreadMessagesCount) - unreadMentionsCount: \(unreadMentionsCount) - notificationMode: \(notificationMode?.rawValue ?? "nil")" + } +} + +extension RoomSummaryDetails { + init(id: String, settingsMode: RoomNotificationModeProxy, hasUnreadMessages: Bool, hasUnreadMentions: Bool) { + self.id = id + let string = "\(settingsMode) - hasUnreadMessages: \(hasUnreadMessages) - hasUnreadMentions: \(hasUnreadMentions)" + name = string + isDirect = true + avatarURL = nil + lastMessage = AttributedString(string) + lastMessageFormattedTimestamp = "Now" + unreadMessagesCount = hasUnreadMessages ? 1 : 0 + unreadMentionsCount = hasUnreadMentions ? 1 : 0 + notificationMode = settingsMode + canonicalAlias = nil + inviter = nil + hasOngoingCall = false } } diff --git a/ElementX/Sources/Services/Room/RoomSummary/RoomSummaryProvider.swift b/ElementX/Sources/Services/Room/RoomSummary/RoomSummaryProvider.swift index 5d169f159..98c156d1c 100644 --- a/ElementX/Sources/Services/Room/RoomSummary/RoomSummaryProvider.swift +++ b/ElementX/Sources/Services/Room/RoomSummary/RoomSummaryProvider.swift @@ -245,7 +245,8 @@ class RoomSummaryProvider: RoomSummaryProviderProtocol { avatarURL: roomInfo.avatarUrl.flatMap(URL.init(string:)), lastMessage: attributedLastMessage, lastMessageFormattedTimestamp: lastMessageFormattedTimestamp, - unreadNotificationCount: UInt(roomInfo.notificationCount), + unreadMessagesCount: UInt(roomInfo.numUnreadMessages), + unreadMentionsCount: UInt(roomInfo.numUnreadMentions), notificationMode: notificationMode, canonicalAlias: roomInfo.canonicalAlias, inviter: inviterProxy, diff --git a/UnitTests/Sources/LoggingTests.swift b/UnitTests/Sources/LoggingTests.swift index 58d48e1db..3a8f2d699 100644 --- a/UnitTests/Sources/LoggingTests.swift +++ b/UnitTests/Sources/LoggingTests.swift @@ -229,7 +229,8 @@ class LoggingTests: XCTestCase { avatarURL: nil, lastMessage: AttributedString(lastMessage), lastMessageFormattedTimestamp: "Now", - unreadNotificationCount: 0, + unreadMessagesCount: 0, + unreadMentionsCount: 0, notificationMode: nil, canonicalAlias: nil, inviter: nil, diff --git a/UnitTests/__Snapshots__/PreviewTests/test_homeScreen.Loaded.png b/UnitTests/__Snapshots__/PreviewTests/test_homeScreen.Loaded.png index 0386b0752..219fd843e 100644 --- a/UnitTests/__Snapshots__/PreviewTests/test_homeScreen.Loaded.png +++ b/UnitTests/__Snapshots__/PreviewTests/test_homeScreen.Loaded.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5d6d5a6fa799a80f4057b45c490d47fd32d191034a7f035d30bd5b31e1a6855b -size 297086 +oid sha256:0e9cc69f6a7d59b4b39ff0f0e1d610425f6d26d8582e6fcda4c6773c8bc9f426 +size 294065 diff --git a/UnitTests/__Snapshots__/PreviewTests/test_homeScreen.Loading.png b/UnitTests/__Snapshots__/PreviewTests/test_homeScreen.Loading.png index 3e60ab78b..ed4a2cef1 100644 --- a/UnitTests/__Snapshots__/PreviewTests/test_homeScreen.Loading.png +++ b/UnitTests/__Snapshots__/PreviewTests/test_homeScreen.Loading.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:213d0979ea41ce5e5a5bbaf91864818b72cbc279d4ac488ffdf01c5e456949dc -size 97007 +oid sha256:0ca50932a6c958e8b4ae292ab0068f673424993a8a3b02a7ed8982c976dfa2cb +size 96097 diff --git a/UnitTests/__Snapshots__/PreviewTests/test_homeScreenEmptyStateView.Constrained-layout.png b/UnitTests/__Snapshots__/PreviewTests/test_homeScreenEmptyStateView.Constrained-layout.png index 3ee722452..12fcb7ade 100644 --- a/UnitTests/__Snapshots__/PreviewTests/test_homeScreenEmptyStateView.Constrained-layout.png +++ b/UnitTests/__Snapshots__/PreviewTests/test_homeScreenEmptyStateView.Constrained-layout.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c2ca57c531d847da14ab639cabe6a1eb37e615cf3a28db4749e6c6ca88f26800 -size 151676 +oid sha256:c2c1eeb6d42077fb58bd4bd9e27adff438d443eb33f140e9846caf911eb8319e +size 152467 diff --git a/UnitTests/__Snapshots__/PreviewTests/test_homeScreenEmptyStateView.Normal-Layout.png b/UnitTests/__Snapshots__/PreviewTests/test_homeScreenEmptyStateView.Normal-Layout.png index a1305474d..ef6325974 100644 --- a/UnitTests/__Snapshots__/PreviewTests/test_homeScreenEmptyStateView.Normal-Layout.png +++ b/UnitTests/__Snapshots__/PreviewTests/test_homeScreenEmptyStateView.Normal-Layout.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a2dafbdd32b395dd007ba56f506e2bde32f4c9817ed31d11d76067f93c34055f -size 104560 +oid sha256:c518b7d94108cc9852a5158e963894c1c809ba326a6c33aa731b8c99e4935916 +size 104897 diff --git a/UnitTests/__Snapshots__/PreviewTests/test_homeScreenRoomCell.1.png b/UnitTests/__Snapshots__/PreviewTests/test_homeScreenRoomCell.1.png deleted file mode 100644 index d5a2d141e..000000000 --- a/UnitTests/__Snapshots__/PreviewTests/test_homeScreenRoomCell.1.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:144567bde78b790121261ea07309fb16470310564a23f38d91117b83034b07fc -size 243748 diff --git a/UnitTests/__Snapshots__/PreviewTests/test_homeScreenRoomCell.Generic.png b/UnitTests/__Snapshots__/PreviewTests/test_homeScreenRoomCell.Generic.png new file mode 100644 index 000000000..fd0afbfeb --- /dev/null +++ b/UnitTests/__Snapshots__/PreviewTests/test_homeScreenRoomCell.Generic.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a008adeae6b250d84187e72067a734e213b2a7557258f4bcd251b45b64c9dc3 +size 241273 diff --git a/UnitTests/__Snapshots__/PreviewTests/test_homeScreenRoomCell.Notifications-State.png b/UnitTests/__Snapshots__/PreviewTests/test_homeScreenRoomCell.Notifications-State.png new file mode 100644 index 000000000..2cc792530 --- /dev/null +++ b/UnitTests/__Snapshots__/PreviewTests/test_homeScreenRoomCell.Notifications-State.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:280155439f431f4f3694c9482807857e053088a6afd904da0027ec06b39fdb66 +size 421031 diff --git a/changelog.d/1823.feature b/changelog.d/1823.feature new file mode 100644 index 000000000..6f98ed8ed --- /dev/null +++ b/changelog.d/1823.feature @@ -0,0 +1 @@ +When mentioned in a room, the room list will display a green at symbol for that room. \ No newline at end of file diff --git a/project.yml b/project.yml index 7c3b3cc40..13e8aac1d 100644 --- a/project.yml +++ b/project.yml @@ -47,7 +47,7 @@ packages: # Element/Matrix dependencies MatrixRustSDK: url: https://github.com/matrix-org/matrix-rust-components-swift - exactVersion: 1.1.29 + exactVersion: 1.1.30 # path: ../matrix-rust-sdk Compound: url: https://github.com/element-hq/compound-ios