diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomSummaryRow.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomSummaryRow.kt index e2598a9e1c0..06f815afcb7 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomSummaryRow.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomSummaryRow.kt @@ -123,7 +123,8 @@ internal fun RoomSummaryRow( NameAndTimestampRow( name = room.name, timestamp = room.timestamp, - isHighlighted = room.isHighlighted + isHighlighted = room.isHighlighted, + isPinned = room.isPinned, ) MessagePreviewAndIndicatorRow(room = room) } @@ -215,7 +216,8 @@ private fun NameAndTimestampRow( name: String?, timestamp: String?, isHighlighted: Boolean, - modifier: Modifier = Modifier + modifier: Modifier = Modifier, + isPinned: Boolean = false, ) { Row( modifier = modifier.fillMaxWidth(), @@ -235,16 +237,29 @@ private fun NameAndTimestampRow( overflow = TextOverflow.Ellipsis ) } - // Timestamp - Text( - text = timestamp ?: "", - style = ElementTheme.typography.fontBodySmMedium, - color = if (isHighlighted) { - ElementTheme.colors.unreadIndicator - } else { - ElementTheme.colors.roomListRoomMessageDate - }, - ) + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = spacedBy(4.dp), + ) { + if (isPinned) { + Icon( + modifier = Modifier.size(14.dp), + imageVector = CompoundIcons.PinSolid(), + contentDescription = stringResource(id = CommonStrings.common_pinned), + tint = ElementTheme.colors.iconSecondary, + ) + } + // Timestamp + Text( + text = timestamp ?: "", + style = ElementTheme.typography.fontBodySmMedium, + color = if (isHighlighted) { + ElementTheme.colors.unreadIndicator + } else { + ElementTheme.colors.roomListRoomMessageDate + }, + ) + } } } diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/datasource/RoomListDataSource.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/datasource/RoomListDataSource.kt index 3ff4339bb26..ffc42b1a00e 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/datasource/RoomListDataSource.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/datasource/RoomListDataSource.kt @@ -24,6 +24,7 @@ import io.element.android.libraries.matrix.api.roomlist.RoomListFilter import io.element.android.libraries.matrix.api.roomlist.RoomListService import io.element.android.libraries.matrix.api.roomlist.RoomSummary import io.element.android.libraries.matrix.api.roomlist.updateVisibleRange +import io.element.android.libraries.preferences.api.store.SessionPreferencesStore import io.element.android.services.analytics.api.AnalyticsService import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList @@ -35,6 +36,7 @@ import kotlinx.coroutines.delay import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.debounce +import kotlinx.coroutines.flow.drop import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach @@ -60,10 +62,12 @@ class RoomListDataSource( private val sessionCoroutineScope: CoroutineScope, private val dateTimeObserver: DateTimeObserver, private val analyticsService: AnalyticsService, + private val sessionPreferencesStore: SessionPreferencesStore, ) { init { observeNotificationSettings() observeDateTimeChanges() + observePinnedRoomsChanges() } private val roomList = roomListService.createRoomList( @@ -145,6 +149,15 @@ class RoomListDataSource( .launchIn(sessionCoroutineScope) } + private fun observePinnedRoomsChanges() { + sessionPreferencesStore.getPinnedRoomsFlow() + .drop(1) // Skip initial value, only react to changes + .onEach { + rebuildAllRoomSummaries() + } + .launchIn(sessionCoroutineScope) + } + private suspend fun replaceWith(roomSummaries: List) = withContext(coroutineDispatchers.computation) { lock.withLock { diffCacheUpdater.updateWith(roomSummaries) @@ -186,6 +199,22 @@ class RoomListDataSource( } } + // Apply pinned state and sort pinned rooms first, ordered by pin recency + val pinnedRoomIds = sessionPreferencesStore.getPinnedRoomsFlow().first() + val pinnedSet = pinnedRoomIds.toSet() + val withPinnedState = roomListRoomSummaries.map { summary -> + if (pinnedSet.contains(summary.roomId.value)) { + summary.copy(isPinned = true) + } else { + summary + } + } + val pinnedIndexMap = pinnedRoomIds.withIndex().associate { (index, id) -> id to index } + val sortedSummaries = withPinnedState.sortedWith( + compareBy { !it.isPinned } + .thenBy { pinnedIndexMap[it.roomId.value] ?: Int.MAX_VALUE } + ) + // TODO remove once https://github.com/element-hq/element-x-android/issues/5031 has been confirmed as fixed val duplicates = cachingResults.filter { (_, operations) -> operations.size > 1 } if (duplicates.isNotEmpty()) { @@ -197,9 +226,9 @@ class RoomListDataSource( ) // Remove duplicates before emitting the new values - _roomSummariesFlow.emit(roomListRoomSummaries.distinctBy { it.roomId }.toImmutableList()) + _roomSummariesFlow.emit(sortedSummaries.distinctBy { it.roomId }.toImmutableList()) } else { - _roomSummariesFlow.emit(roomListRoomSummaries.toImmutableList()) + _roomSummariesFlow.emit(sortedSummaries.toImmutableList()) } } diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/model/RoomListRoomSummary.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/model/RoomListRoomSummary.kt index a59e4444557..9c73951e27e 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/model/RoomListRoomSummary.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/model/RoomListRoomSummary.kt @@ -36,6 +36,7 @@ data class RoomListRoomSummary( val isDirect: Boolean, val isDm: Boolean, val isFavorite: Boolean, + val isPinned: Boolean = false, val inviteSender: InviteSender?, val isTombstoned: Boolean, val heroes: ImmutableList, diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/model/RoomListRoomSummaryProvider.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/model/RoomListRoomSummaryProvider.kt index 400decff6f7..3329c0ba95f 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/model/RoomListRoomSummaryProvider.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/model/RoomListRoomSummaryProvider.kt @@ -127,7 +127,11 @@ open class RoomListRoomSummaryProvider : PreviewParameterProvider eventSink(RoomListEvent.SetRoomIsFavorite(contextMenu.roomId, isFavorite)) }, + onPinChange = { isPinned -> + eventSink(RoomListEvent.SetRoomIsPinned(contextMenu.roomId, isPinned)) + }, onClearCacheRoomClick = { eventSink(RoomListEvent.HideContextMenu) eventSink(RoomListEvent.ClearCacheOfRoom(contextMenu.roomId)) @@ -85,6 +88,7 @@ private fun RoomListModalBottomSheetContent( onRoomSettingsClick: () -> Unit, onLeaveRoomClick: () -> Unit, onFavoriteChange: (isFavorite: Boolean) -> Unit, + onPinChange: (isPinned: Boolean) -> Unit, onRoomMarkReadClick: () -> Unit, onRoomMarkUnreadClick: () -> Unit, onClearCacheRoomClick: () -> Unit, @@ -156,6 +160,31 @@ private fun RoomListModalBottomSheetContent( }, style = ListItemStyle.Primary, ) + val (pinTextResId, pinIcon) = if (contextMenu.isPinned) { + CommonStrings.common_pinned to CompoundIcons.PinSolid() + } else { + CommonStrings.common_pin_to_top to CompoundIcons.Pin() + } + ListItem( + headlineContent = { + Text( + text = stringResource(id = pinTextResId), + style = MaterialTheme.typography.bodyLarge, + ) + }, + leadingContent = ListItemContent.Icon( + iconSource = IconSource.Vector( + pinIcon, + ) + ), + trailingContent = ListItemContent.Switch( + checked = contextMenu.isPinned, + ), + onClick = { + onPinChange(!contextMenu.isPinned) + }, + style = ListItemStyle.Primary, + ) ListItem( headlineContent = { Text( @@ -228,6 +257,7 @@ internal fun RoomListModalBottomSheetContentPreview( onRoomSettingsClick = {}, onLeaveRoomClick = {}, onFavoriteChange = {}, + onPinChange = {}, onClearCacheRoomClick = {}, onReportRoomClick = {}, ) diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListEvent.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListEvent.kt index 3e82ff9809e..840fdb0ef0b 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListEvent.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListEvent.kt @@ -30,5 +30,6 @@ sealed interface RoomListEvent { data class MarkAsRead(val roomId: RoomId) : ContextMenuEvent data class MarkAsUnread(val roomId: RoomId) : ContextMenuEvent data class SetRoomIsFavorite(val roomId: RoomId, val isFavorite: Boolean) : ContextMenuEvent + data class SetRoomIsPinned(val roomId: RoomId, val isPinned: Boolean) : ContextMenuEvent data class ClearCacheOfRoom(val roomId: RoomId) : ContextMenuEvent } diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListPresenter.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListPresenter.kt index 2010555cd7c..45dc6377c9a 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListPresenter.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListPresenter.kt @@ -64,6 +64,7 @@ import kotlinx.collections.immutable.toImmutableSet import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.flatMapLatest @@ -140,6 +141,7 @@ class RoomListPresenter( leaveRoomState.eventSink(LeaveRoomEvent.LeaveRoom(event.roomId, needsConfirmation = event.needsConfirmation)) } is RoomListEvent.SetRoomIsFavorite -> coroutineScope.setRoomIsFavorite(event.roomId, event.isFavorite) + is RoomListEvent.SetRoomIsPinned -> coroutineScope.setRoomIsPinned(event.roomId, event.isPinned) is RoomListEvent.MarkAsRead -> coroutineScope.markAsRead(event.roomId) is RoomListEvent.MarkAsUnread -> coroutineScope.markAsUnread(event.roomId) is RoomListEvent.AcceptInvite -> { @@ -270,6 +272,7 @@ class RoomListPresenter( roomName = event.roomSummary.name, isDm = event.roomSummary.isDm, isFavorite = event.roomSummary.isFavorite, + isPinned = event.roomSummary.isPinned, hasNewContent = event.roomSummary.hasNewContent, displayClearRoomCacheAction = appPreferencesStore.isDeveloperModeEnabledFlow().first(), ) @@ -284,9 +287,15 @@ class RoomListPresenter( .map { it.isFavorite } .distinctUntilChanged() - isFavoriteFlow - .onEach { isFavorite -> - contextMenuState.value = initialState.copy(isFavorite = isFavorite) + val isPinnedFlow = sessionPreferencesStore.getPinnedRoomsFlow() + .map { it.contains(event.roomSummary.roomId.value) } + .distinctUntilChanged() + + combine(isFavoriteFlow, isPinnedFlow) { isFavorite, isPinned -> + isFavorite to isPinned + } + .onEach { (isFavorite, isPinned) -> + contextMenuState.value = initialState.copy(isFavorite = isFavorite, isPinned = isPinned) } .flatMapLatest { isShowingContextMenuFlow } .takeWhile { isShowingContextMenu -> isShowingContextMenu } @@ -303,6 +312,16 @@ class RoomListPresenter( } } + private fun CoroutineScope.setRoomIsPinned(roomId: RoomId, isPinned: Boolean) = launch { + val current = sessionPreferencesStore.getPinnedRoomsFlow().first() + val updated = if (isPinned) { + listOf(roomId.value) + current.filter { it != roomId.value } + } else { + current.filter { it != roomId.value } + } + sessionPreferencesStore.setPinnedRooms(updated) + } + private fun CoroutineScope.markAsRead(roomId: RoomId) = launch { notificationCleaner.clearMessagesForRoom(client.sessionId, roomId) client.getRoom(roomId)?.use { room -> diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListState.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListState.kt index e0f49436213..42757bfcae1 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListState.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListState.kt @@ -43,6 +43,7 @@ data class RoomListState( val roomName: String?, val isDm: Boolean, val isFavorite: Boolean, + val isPinned: Boolean, val hasNewContent: Boolean, val displayClearRoomCacheAction: Boolean, ) : ContextMenu diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListStateContextMenuShownProvider.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListStateContextMenuShownProvider.kt index a1624e49176..e517c3e9877 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListStateContextMenuShownProvider.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListStateContextMenuShownProvider.kt @@ -16,7 +16,8 @@ open class RoomListStateContextMenuShownProvider : PreviewParameterProvider() + val contextMenu = aContextMenuShown(isPinned = false) + rule.setRoomListContextMenu( + contextMenu = contextMenu, + eventSink = eventsRecorder, + ) + rule.clickOn(CommonStrings.common_pin_to_top) + eventsRecorder.assertList( + listOf( + RoomListEvent.SetRoomIsPinned(contextMenu.roomId, true), + ) + ) + } + + @Test + fun `clicking on Pinned generates expected Event`() { + val eventsRecorder = EventsRecorder() + val contextMenu = aContextMenuShown(isPinned = true) + rule.setRoomListContextMenu( + contextMenu = contextMenu, + eventSink = eventsRecorder, + ) + rule.clickOn(CommonStrings.common_pinned) + eventsRecorder.assertList( + listOf( + RoomListEvent.SetRoomIsPinned(contextMenu.roomId, false), + ) + ) + } + private fun AndroidComposeTestRule<*, *>.setRoomListContextMenu( contextMenu: RoomListState.ContextMenu.Shown, canReportRoom: Boolean = false, diff --git a/features/home/impl/src/test/kotlin/io/element/android/features/home/impl/roomlist/RoomListPresenterTest.kt b/features/home/impl/src/test/kotlin/io/element/android/features/home/impl/roomlist/RoomListPresenterTest.kt index 99a5550a082..b3060e92135 100644 --- a/features/home/impl/src/test/kotlin/io/element/android/features/home/impl/roomlist/RoomListPresenterTest.kt +++ b/features/home/impl/src/test/kotlin/io/element/android/features/home/impl/roomlist/RoomListPresenterTest.kt @@ -226,6 +226,7 @@ class RoomListPresenterTest { roomName = summary.name, isDm = false, isFavorite = false, + isPinned = false, hasNewContent = false, displayClearRoomCacheAction = false, ) @@ -243,6 +244,7 @@ class RoomListPresenterTest { roomName = summary.name, isDm = false, isFavorite = true, + isPinned = false, hasNewContent = false, displayClearRoomCacheAction = false, ) @@ -270,6 +272,7 @@ class RoomListPresenterTest { roomName = summary.name, isDm = false, isFavorite = false, + isPinned = false, // true here. hasNewContent = false, displayClearRoomCacheAction = true, @@ -299,6 +302,7 @@ class RoomListPresenterTest { roomName = summary.name, isDm = false, isFavorite = false, + isPinned = false, hasNewContent = false, displayClearRoomCacheAction = false, ) @@ -412,6 +416,20 @@ class RoomListPresenterTest { } } + @Test + fun `present - when set is pinned event is emitted, then the room is pinned in preferences`() = runTest { + val sessionPreferencesStore = InMemorySessionPreferencesStore() + val presenter = createRoomListPresenter(sessionPreferencesStore = sessionPreferencesStore) + presenter.test { + val initialState = awaitItem() + initialState.eventSink(RoomListEvent.SetRoomIsPinned(A_ROOM_ID, true)) + assertThat(sessionPreferencesStore.getPinnedRoomsFlow().first()).contains(A_ROOM_ID.value) + initialState.eventSink(RoomListEvent.SetRoomIsPinned(A_ROOM_ID, false)) + assertThat(sessionPreferencesStore.getPinnedRoomsFlow().first()).doesNotContain(A_ROOM_ID.value) + cancelAndIgnoreRemainingEvents() + } + } + @Test fun `present - when room service returns no room, then contentState is Empty`() = runTest { val roomList = FakeDynamicRoomList( @@ -682,6 +700,7 @@ class RoomListPresenterTest { sessionCoroutineScope = backgroundScope, dateTimeObserver = FakeDateTimeObserver(), analyticsService = FakeAnalyticsService(), + sessionPreferencesStore = sessionPreferencesStore, ), searchPresenter = searchPresenter, sessionPreferencesStore = sessionPreferencesStore, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsEvent.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsEvent.kt index de801e8aae1..694249802c3 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsEvent.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsEvent.kt @@ -14,4 +14,5 @@ sealed interface RoomDetailsEvent { data object UnmuteNotification : RoomDetailsEvent data class CopyToClipboard(val text: String) : RoomDetailsEvent data class SetFavorite(val isFavorite: Boolean) : RoomDetailsEvent + data class SetPinned(val isPinned: Boolean) : RoomDetailsEvent } diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt index 853d76859bc..f6693f6d479 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt @@ -51,12 +51,15 @@ import io.element.android.libraries.matrix.ui.room.getCurrentRoomMember import io.element.android.libraries.matrix.ui.room.getDirectRoomMember import io.element.android.libraries.matrix.ui.room.roomMemberIdentityStateChange import io.element.android.libraries.preferences.api.store.AppPreferencesStore +import io.element.android.libraries.preferences.api.store.SessionPreferencesStore import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.services.analytics.api.AnalyticsService import io.element.android.services.analyticsproviders.api.trackers.captureInteraction import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch @@ -73,6 +76,7 @@ class RoomDetailsPresenter( private val analyticsService: AnalyticsService, private val clipboardHelper: ClipboardHelper, private val appPreferencesStore: AppPreferencesStore, + private val sessionPreferencesStore: SessionPreferencesStore, ) : Presenter { @Composable override fun present(): RoomDetailsState { @@ -88,6 +92,10 @@ class RoomDetailsPresenter( val pinnedMessagesCount by remember { derivedStateOf { roomInfo.pinnedEventIds.size } } + val isPinned by remember { + sessionPreferencesStore.getPinnedRoomsFlow().map { it.contains(room.roomId.value) } + }.collectAsState(false) + LaunchedEffect(Unit) { room.updateRoomNotificationSettings() observeNotificationSettings() @@ -151,6 +159,7 @@ class RoomDetailsPresenter( } } is RoomDetailsEvent.SetFavorite -> scope.setFavorite(event.isFavorite) + is RoomDetailsEvent.SetPinned -> scope.setPinned(event.isPinned) is RoomDetailsEvent.CopyToClipboard -> { clipboardHelper.copyPlainText(event.text) snackbarDispatcher.post(SnackbarMessage(CommonStrings.common_copied_to_clipboard)) @@ -186,6 +195,7 @@ class RoomDetailsPresenter( leaveRoomState = leaveRoomState, roomNotificationSettings = roomNotificationSettingsState.roomNotificationSettings(), isFavorite = isFavorite, + isPinned = isPinned, displayRolesAndPermissionsSettings = !isDm && permissions.canEditRolesAndPermissions, isPublic = joinRule == JoinRule.Public, heroes = roomInfo.heroes.toImmutableList(), @@ -260,4 +270,14 @@ class RoomDetailsPresenter( analyticsService.captureInteraction(Interaction.Name.MobileRoomFavouriteToggle) } } + + private fun CoroutineScope.setPinned(isPinned: Boolean) = launch { + val current = sessionPreferencesStore.getPinnedRoomsFlow().first() + val updated = if (isPinned) { + listOf(room.roomId.value) + current.filter { it != room.roomId.value } + } else { + current.filter { it != room.roomId.value } + } + sessionPreferencesStore.setPinnedRooms(updated) + } } diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsState.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsState.kt index 20ec12fdb9a..5ea74926891 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsState.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsState.kt @@ -38,6 +38,7 @@ data class RoomDetailsState( val leaveRoomState: LeaveRoomState, val roomNotificationSettings: RoomNotificationSettings?, val isFavorite: Boolean, + val isPinned: Boolean, val displayRolesAndPermissionsSettings: Boolean, val isPublic: Boolean, val heroes: ImmutableList, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsStateProvider.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsStateProvider.kt index e40e6b03ef7..679b5d2d7ae 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsStateProvider.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsStateProvider.kt @@ -109,6 +109,7 @@ fun aRoomDetailsState( leaveRoomState: LeaveRoomState = aLeaveRoomState(), roomNotificationSettings: RoomNotificationSettings = aRoomNotificationSettings(), isFavorite: Boolean = false, + isPinned: Boolean = false, displayAdminSettings: Boolean = false, isPublic: Boolean = true, heroes: List = emptyList(), @@ -140,6 +141,7 @@ fun aRoomDetailsState( leaveRoomState = leaveRoomState, roomNotificationSettings = roomNotificationSettings, isFavorite = isFavorite, + isPinned = isPinned, displayRolesAndPermissionsSettings = displayAdminSettings, isPublic = isPublic, heroes = heroes.toImmutableList(), diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsView.kt index c48716db114..02a5c6f206a 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsView.kt @@ -201,6 +201,13 @@ fun RoomDetailsView( } ) + PinItem( + isPinned = state.isPinned, + onPinChanges = { + state.eventSink(RoomDetailsEvent.SetPinned(it)) + } + ) + if (state.canShowSecurityAndPrivacy) { SecurityAndPrivacyItem( onClick = onSecurityAndPrivacyClick @@ -633,6 +640,24 @@ private fun FavoriteItem( ) } +@Composable +private fun PinItem( + isPinned: Boolean, + onPinChanges: (Boolean) -> Unit, +) { + val (textResId, icon) = if (isPinned) { + CommonStrings.common_pinned to CompoundIcons.PinSolid() + } else { + CommonStrings.common_pin_to_top to CompoundIcons.Pin() + } + PreferenceSwitch( + icon = icon, + title = stringResource(id = textResId), + isChecked = isPinned, + onCheckedChange = onPinChanges + ) +} + @Composable private fun ProfileItem( verificationState: UserProfileVerificationState, diff --git a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenterTest.kt b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenterTest.kt index d3550103075..791a01490ff 100644 --- a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenterTest.kt +++ b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenterTest.kt @@ -44,7 +44,9 @@ import io.element.android.libraries.matrix.test.notificationsettings.FakeNotific import io.element.android.libraries.matrix.test.room.aRoomInfo import io.element.android.libraries.matrix.test.room.powerlevels.FakeRoomPermissions import io.element.android.libraries.preferences.api.store.AppPreferencesStore +import io.element.android.libraries.preferences.api.store.SessionPreferencesStore import io.element.android.libraries.preferences.test.InMemoryAppPreferencesStore +import io.element.android.libraries.preferences.test.InMemorySessionPreferencesStore import io.element.android.services.analytics.api.AnalyticsService import io.element.android.services.analytics.test.FakeAnalyticsService import io.element.android.tests.testutils.EventsRecorder @@ -87,7 +89,8 @@ class RoomDetailsPresenterTest { ), encryptionService: FakeEncryptionService = FakeEncryptionService(), clipboardHelper: ClipboardHelper = FakeClipboardHelper(), - appPreferencesStore: AppPreferencesStore = InMemoryAppPreferencesStore() + appPreferencesStore: AppPreferencesStore = InMemoryAppPreferencesStore(), + sessionPreferencesStore: SessionPreferencesStore = InMemorySessionPreferencesStore(), ): RoomDetailsPresenter { val matrixClient = FakeMatrixClient(notificationSettingsService = notificationSettingsService) val roomMemberDetailsPresenterFactory = object : RoomMemberDetailsPresenter.Factory { @@ -115,6 +118,7 @@ class RoomDetailsPresenterTest { analyticsService = analyticsService, clipboardHelper = clipboardHelper, appPreferencesStore = appPreferencesStore, + sessionPreferencesStore = sessionPreferencesStore, ) } @@ -564,6 +568,28 @@ class RoomDetailsPresenterTest { } } + @Test + fun `present - when set is pinned event is emitted, then the room is pinned in preferences`() = runTest { + val sessionPreferencesStore = InMemorySessionPreferencesStore() + val room = aJoinedRoom( + roomPermissions = roomPermissions(), + ) + val presenter = createRoomDetailsPresenter(room = room, sessionPreferencesStore = sessionPreferencesStore) + presenter.testWithLifecycleOwner(lifecycleOwner = fakeLifecycleOwner) { + val initialState = awaitItem() + assertThat(initialState.isPinned).isFalse() + initialState.eventSink(RoomDetailsEvent.SetPinned(true)) + consumeItemsUntilPredicate { it.isPinned }.last().let { state -> + assertThat(state.isPinned).isTrue() + } + initialState.eventSink(RoomDetailsEvent.SetPinned(false)) + consumeItemsUntilPredicate { !it.isPinned }.last().let { state -> + assertThat(state.isPinned).isFalse() + } + cancelAndIgnoreRemainingEvents() + } + } + @Test fun `present - show knock requests`() = runTest { val room = aJoinedRoom( diff --git a/libraries/preferences/api/src/main/kotlin/io/element/android/libraries/preferences/api/store/SessionPreferencesStore.kt b/libraries/preferences/api/src/main/kotlin/io/element/android/libraries/preferences/api/store/SessionPreferencesStore.kt index d3f3fb4e282..8bc36c95045 100644 --- a/libraries/preferences/api/src/main/kotlin/io/element/android/libraries/preferences/api/store/SessionPreferencesStore.kt +++ b/libraries/preferences/api/src/main/kotlin/io/element/android/libraries/preferences/api/store/SessionPreferencesStore.kt @@ -35,5 +35,8 @@ interface SessionPreferencesStore { suspend fun setVideoCompressionPreset(preset: VideoCompressionPreset) fun getVideoCompressionPreset(): Flow + suspend fun setPinnedRooms(roomIds: List) + fun getPinnedRoomsFlow(): Flow> + suspend fun clear() } diff --git a/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultSessionPreferencesStore.kt b/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultSessionPreferencesStore.kt index 907d454ada6..b975c8dbf96 100644 --- a/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultSessionPreferencesStore.kt +++ b/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultSessionPreferencesStore.kt @@ -33,6 +33,8 @@ class DefaultSessionPreferencesStore( @SessionCoroutineScope sessionCoroutineScope: CoroutineScope, ) : SessionPreferencesStore { companion object { + private const val PINNED_ROOMS_SEPARATOR = "|" + fun storeFile(context: Context, sessionId: SessionId): File { val hashedUserId = sessionId.value.hash().take(16) return context.preferencesDataStoreFile("session_${hashedUserId}_preferences") @@ -47,6 +49,7 @@ class DefaultSessionPreferencesStore( private val skipSessionVerification = booleanPreferencesKey("skipSessionVerification") private val compressImages = booleanPreferencesKey("compressMedia") private val compressMediaPreset = stringPreferencesKey("compressMediaPreset") + private val pinnedRoomsKey = stringPreferencesKey("pinnedRoomsOrdered") private val dataStoreFile = storeFile(context, sessionId) private val store = PreferenceDataStoreFactory.create( @@ -94,6 +97,10 @@ class DefaultSessionPreferencesStore( override fun getVideoCompressionPreset(): Flow = get(compressMediaPreset) { VideoCompressionPreset.STANDARD.name } .map { tryOrNull { VideoCompressionPreset.valueOf(it) } ?: VideoCompressionPreset.STANDARD } + override suspend fun setPinnedRooms(roomIds: List) = update(pinnedRoomsKey, roomIds.joinToString(PINNED_ROOMS_SEPARATOR)) + override fun getPinnedRoomsFlow(): Flow> = get(pinnedRoomsKey) { "" } + .map { raw -> if (raw.isEmpty()) emptyList() else raw.split(PINNED_ROOMS_SEPARATOR) } + override suspend fun clear() { dataStoreFile.safeDelete() } diff --git a/libraries/preferences/test/src/main/kotlin/io/element/android/libraries/preferences/test/InMemorySessionPreferencesStore.kt b/libraries/preferences/test/src/main/kotlin/io/element/android/libraries/preferences/test/InMemorySessionPreferencesStore.kt index 7e2027d58fa..0d1c6e59343 100644 --- a/libraries/preferences/test/src/main/kotlin/io/element/android/libraries/preferences/test/InMemorySessionPreferencesStore.kt +++ b/libraries/preferences/test/src/main/kotlin/io/element/android/libraries/preferences/test/InMemorySessionPreferencesStore.kt @@ -22,6 +22,7 @@ class InMemorySessionPreferencesStore( isSessionVerificationSkipped: Boolean = false, doesCompressMedia: Boolean = true, videoCompressionPreset: VideoCompressionPreset = VideoCompressionPreset.STANDARD, + pinnedRooms: List = emptyList(), ) : SessionPreferencesStore { private val isSharePresenceEnabled = MutableStateFlow(isSharePresenceEnabled) private val isSendPublicReadReceiptsEnabled = MutableStateFlow(isSendPublicReadReceiptsEnabled) @@ -31,6 +32,7 @@ class InMemorySessionPreferencesStore( private val isSessionVerificationSkipped = MutableStateFlow(isSessionVerificationSkipped) private val doesCompressMedia = MutableStateFlow(doesCompressMedia) private val videoCompressionPreset = MutableStateFlow(videoCompressionPreset) + private val pinnedRooms = MutableStateFlow(pinnedRooms) var clearCallCount = 0 private set @@ -84,6 +86,12 @@ class InMemorySessionPreferencesStore( return videoCompressionPreset } + override suspend fun setPinnedRooms(roomIds: List) { + pinnedRooms.tryEmit(roomIds) + } + + override fun getPinnedRoomsFlow(): Flow> = pinnedRooms + override suspend fun clear() { clearCallCount++ isSendPublicReadReceiptsEnabled.tryEmit(true) diff --git a/libraries/ui-strings/src/main/res/values/strings.xml b/libraries/ui-strings/src/main/res/values/strings.xml new file mode 100644 index 00000000000..6727604e3a3 --- /dev/null +++ b/libraries/ui-strings/src/main/res/values/strings.xml @@ -0,0 +1,4 @@ + + + "Pin to top" + diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl.components_RoomSummaryRow_Day_36_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl.components_RoomSummaryRow_Day_36_en.png index 078ce023608..c601ea38b1f 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl.components_RoomSummaryRow_Day_36_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl.components_RoomSummaryRow_Day_36_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:20be0dd6e56278f168138622fdbf38d15e7161431812d0c2c4c9b3564bf81b7e -size 12991 +oid sha256:0cef6c52c71da191473e7a3249818f333d78f235a796569adfc743767ba929b5 +size 12223 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl.components_RoomSummaryRow_Day_37_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl.components_RoomSummaryRow_Day_37_en.png index cd60ad3148e..078ce023608 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl.components_RoomSummaryRow_Day_37_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl.components_RoomSummaryRow_Day_37_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9d2dd354988f252db4877f598614ffe50b2e5f5e33c0d6c1420b07b1ecf877a8 -size 13473 +oid sha256:20be0dd6e56278f168138622fdbf38d15e7161431812d0c2c4c9b3564bf81b7e +size 12991 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl.components_RoomSummaryRow_Day_38_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl.components_RoomSummaryRow_Day_38_en.png new file mode 100644 index 00000000000..cd60ad3148e --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/features.home.impl.components_RoomSummaryRow_Day_38_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d2dd354988f252db4877f598614ffe50b2e5f5e33c0d6c1420b07b1ecf877a8 +size 13473 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl.components_RoomSummaryRow_Night_36_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl.components_RoomSummaryRow_Night_36_en.png index 9d7ee6696af..eaa30baf3a6 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl.components_RoomSummaryRow_Night_36_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl.components_RoomSummaryRow_Night_36_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:11e826f01b6b6b5b2fca6a33abb8dbdebd2658baab5dcf5d6b9b7439ee0c1f9c -size 12920 +oid sha256:48036ce43b10d7ad81b9cabe1f055d680449becb22ac82e8d14ebf7889668c44 +size 12207 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl.components_RoomSummaryRow_Night_37_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl.components_RoomSummaryRow_Night_37_en.png index 210e8d26cb8..9d7ee6696af 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl.components_RoomSummaryRow_Night_37_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl.components_RoomSummaryRow_Night_37_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eb77faa7d7fef837af991a8de23684b9ed53defa1035513b8973db36a843ad58 -size 13387 +oid sha256:11e826f01b6b6b5b2fca6a33abb8dbdebd2658baab5dcf5d6b9b7439ee0c1f9c +size 12920 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl.components_RoomSummaryRow_Night_38_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl.components_RoomSummaryRow_Night_38_en.png new file mode 100644 index 00000000000..210e8d26cb8 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/features.home.impl.components_RoomSummaryRow_Night_38_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb77faa7d7fef837af991a8de23684b9ed53defa1035513b8973db36a843ad58 +size 13387 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl.roomlist_RoomListModalBottomSheetContent_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl.roomlist_RoomListModalBottomSheetContent_Day_0_en.png index 9b17990dbe8..ae431f0fcee 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl.roomlist_RoomListModalBottomSheetContent_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl.roomlist_RoomListModalBottomSheetContent_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a81e2f9d2c3834004b49b925025478b886c065a12dc850f1c42733e457630b97 -size 22442 +oid sha256:17e3cc962b8c9c3f3fab52433c3e6c297c384f5fc2cd64274b6ddc7b3f5c98df +size 26247 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl.roomlist_RoomListModalBottomSheetContent_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl.roomlist_RoomListModalBottomSheetContent_Day_1_en.png index 5b45fb30dee..820928394e4 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl.roomlist_RoomListModalBottomSheetContent_Day_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl.roomlist_RoomListModalBottomSheetContent_Day_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d3348885402696e4b8005740a452384223f60a64c524c32713cfbd9b3041e494 -size 22297 +oid sha256:1bf50a9bf9db7eeca88588a8e52c318f48e24c8503b8021753d33f1723db42ba +size 26058 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl.roomlist_RoomListModalBottomSheetContent_Day_2_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl.roomlist_RoomListModalBottomSheetContent_Day_2_en.png index 1ec1abe309b..009ddf57e67 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl.roomlist_RoomListModalBottomSheetContent_Day_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl.roomlist_RoomListModalBottomSheetContent_Day_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a1a54d3171418082d8bdf442bb34c6b149e2707963f88dd7ea7cbff401534fc0 -size 23856 +oid sha256:47e0ada70ae8d6f8adb0ba44837455006a599526fdd2ee82669554a308b14178 +size 28240 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl.roomlist_RoomListModalBottomSheetContent_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl.roomlist_RoomListModalBottomSheetContent_Day_3_en.png new file mode 100644 index 00000000000..f65b0a93fa7 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/features.home.impl.roomlist_RoomListModalBottomSheetContent_Day_3_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a81d1b6162be0697c4604b22f4f09943f2b6cc4d037d56ab78eb1e24582b8b23 +size 25532 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl.roomlist_RoomListModalBottomSheetContent_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl.roomlist_RoomListModalBottomSheetContent_Night_0_en.png index e5a42fb07fe..0d494f66137 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl.roomlist_RoomListModalBottomSheetContent_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl.roomlist_RoomListModalBottomSheetContent_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3ea756319eeb2d9ab6ad2425498a7a9902acada24c3ab359f880b5934f2511e5 -size 21384 +oid sha256:cdf852a91863c5bfadd2280fabf14ba76756002a35746c92649dfd633ffe6140 +size 25054 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl.roomlist_RoomListModalBottomSheetContent_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl.roomlist_RoomListModalBottomSheetContent_Night_1_en.png index 2388eb323d2..f3a703f12dd 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl.roomlist_RoomListModalBottomSheetContent_Night_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl.roomlist_RoomListModalBottomSheetContent_Night_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c75bbb8425fa4b01f9d0d9398d93785f2a149f4abb820dadbfadf17bf4a6673e -size 21077 +oid sha256:318cdefd0db38b782cd6b0e95f437633d1dd6d8f8ff5219ae9b3424b29a6764a +size 24768 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl.roomlist_RoomListModalBottomSheetContent_Night_2_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl.roomlist_RoomListModalBottomSheetContent_Night_2_en.png index 356ee325262..66bca3f3cad 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl.roomlist_RoomListModalBottomSheetContent_Night_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl.roomlist_RoomListModalBottomSheetContent_Night_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:99defb3eb8530142a74c083d4f4ec2e592d465b3d2cf869e1710031ad6a805c9 -size 23136 +oid sha256:077f6c790e888d32396843d9a4de5bca9777f6024772de31d98f48455d4054f4 +size 26914 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl.roomlist_RoomListModalBottomSheetContent_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl.roomlist_RoomListModalBottomSheetContent_Night_3_en.png new file mode 100644 index 00000000000..0686da610f8 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/features.home.impl.roomlist_RoomListModalBottomSheetContent_Night_3_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2aaca0a78375852fcda8aafa9e6b3eb0be11aab1b6489ff42326961752e6080 +size 24254 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_6_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_6_en.png index 99940a44892..b143035e24e 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_6_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9e74b9b1819bf778ddb397a40113f71b2eb0ada0dcb26af85dab26bbc53ed079 -size 54210 +oid sha256:73f3a917a8fd1571baace23289038be8ba22bb8ded87a22fccdfe66675da4e61 +size 53151 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_7_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_7_en.png index 2532044b273..07e52bc2260 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_7_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_7_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a4e56509b4f10e97283d25432edd7be4b511987f0879acc3026ac16dab25b75c -size 54012 +oid sha256:b104177d224aadff5a364e3246a119ba7ba795767cd1d64a3b231c75340a9a87 +size 52964 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_8_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_8_en.png index 0baf9cf0234..17c6c85440d 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_8_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_8_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fe76cc652842cce967d975fae7a387f5cff118153b345bda452d5dbc618b22f8 -size 52255 +oid sha256:578086870b7ad2e0e0cadfbbc76dacbca96d3b9225de7d6cd84e3b011989c4e4 +size 51213 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_6_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_6_en.png index ead9ed0d6d9..9b748acf8b9 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_6_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f2d17c9021392f93fc022ce0ba4305f0739acaeab3ebfd51b7d3294ace365807 -size 51156 +oid sha256:383b5a9bfa21a679c88d150961d251a8cd93cecce9208d3225bd0e3f992ebafd +size 50239 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_7_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_7_en.png index 33f2b46a342..2b34ca03625 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_7_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_7_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:286af36457c34621e10b91226b13c5a9fde77af6b63827d39a0a95697972d4ab -size 50896 +oid sha256:17f5c4c86be8b051b42d4f9683003944f435ae3017acbeecb5d1d5ae058387bf +size 49975 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_8_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_8_en.png index 733a66bb385..da84004ef43 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_8_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_8_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:34a5fe14ee5ede42d962e657e4338f58f56e79e0f9a3f65ba24e37810a9c1250 -size 49205 +oid sha256:0382881175719843fed7e7d2e00a7e968485d2d4ad8c108ed435534f04bee12e +size 48388 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsA11y_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsA11y_en.png index 3df4b3886c3..46f81470583 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsA11y_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsA11y_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dbbd62622843fbd1d8d35b63c7308eaed46b488e6b189e987983144e5395bd09 -size 78972 +oid sha256:62b4054efc8e5a6276d3a1f79558e7a5c70fad51bb5f47f1687262a7cbe1a5a4 +size 81873 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_0_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_0_en.png index 44e3d87eb9e..efcf3d18fa8 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:31d18a5e250e531fd7b986690306366cf69eedcfdbaba28148e3edd1d36ae597 -size 42912 +oid sha256:fd7ddc125cd4c2759dde8fe7d4e5760251feb0303b2ee5c178355181faa07a5b +size 43548 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_10_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_10_en.png index 449dbd74650..1181b60bd3c 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_10_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_10_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a04a5aa9e35df5eb82a0a708b2b743bb83a1a9408fee91beff60d5a1ce2c6d5d -size 41599 +oid sha256:17ab485be5af2935f0bc2a153c531b23b74a4af88ce3a5b75608b2de3c715942 +size 41191 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_11_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_11_en.png index 279035fea1b..d2b912d2d7f 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_11_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_11_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ef69f889a28afe5704da86296ebf9916a7af1de751eb4c1ee4995ca3f70ea12d -size 40737 +oid sha256:7558295bb866aa3271c50459b41d8e0c254ad0d98937aef7394fb6f8af19c6e0 +size 40342 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_12_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_12_en.png index 72f8640e83b..e5efa4f6129 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_12_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_12_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1d4312936ba67965a8b35e714bbc3014214320311c5d077d33382ebb5aca5738 -size 42172 +oid sha256:1b5d26e85e22a069b7114c01ad5559cb58f2d75ab4f7b02d05abafffbae60619 +size 41762 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_13_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_13_en.png index 7c1059539b8..dd0de01ee7f 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_13_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_13_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4b07f6c942ab083d94c22218010b4aa646cf03e87af41fbda89b16620f7b9752 -size 42079 +oid sha256:d4becc2c352e2488730bebe9c55562d6cc62fb5e02e2c4ec91144f1871e2be1f +size 41659 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_14_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_14_en.png index d7691fa7e26..6e40269525a 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_14_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_14_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1b6db26bd05f206661a5707a972cb6f843eef82c76e5e0035775625b4a6268a4 -size 42640 +oid sha256:fa5836b73ba1bb2563c53e2bc2405c43cc802074d490aaa964817ed8efac674c +size 43283 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_15_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_15_en.png index 9e68ee98592..d318d00cc58 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_15_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_15_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5f77eba1f623f67eba427312523def9a45c41581dd4e047701b2c75f787fcffc -size 43178 +oid sha256:7ce623acfce0ee5b04989df3fba5df30657cae7483be0c2e299d2c1bfecd10c8 +size 43824 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_16_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_16_en.png index c42d3ebe599..30014048263 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_16_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_16_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a62965a57fea6665739d8e8b2fda9e15abf119ea59f6bbd5d7d8a269512064b9 -size 42421 +oid sha256:053fa46d0ba20148b4e61b7923105926ddd50f638b09db30274437de7e429378 +size 42007 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_17_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_17_en.png index 45da7b512e3..58238570834 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_17_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_17_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:39780082d7826422d70902ac2b7859013c30b41d31f20aefc25ada8aeae196c2 -size 41684 +oid sha256:33c856ebafa2450964207cbf0db2078a07fc7453c40c258ac0c6ae457d86fed7 +size 41281 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_18_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_18_en.png index 029a2c36395..399701b9b03 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_18_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_18_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5917028dda35add5ed6b32fa9017a9cdcdfb8d273d230aa6d529bebfbf0b95c8 -size 39646 +oid sha256:20c76a9dd3fc93d6048d1381014db4dc22c605975211fd891aac624432511bbc +size 39705 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_19_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_19_en.png index 55a953b2dfd..0ce19d261b5 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_19_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_19_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f65f298b3f14ecb0da53f03a20a5464a7f6ae138dfdf417ad936601a521fbb30 -size 39601 +oid sha256:cfd6b8c4b6f7440b7b43078cfe3b04119a85e1058309526162f8e701fb4f6d55 +size 39664 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_1_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_1_en.png index 7f4cd397318..a63f4ac8023 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:df3ceef42a59cc072e3aa21c89e9b90f0524ac422d1538804b6fcb8abf97752e -size 38090 +oid sha256:a6b0bdd5d482af0a4127ca7ece9d802478da65be05302e7fc0b127d9aa6aab9b +size 36847 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_20_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_20_en.png index 7cc47cba6d6..7f529fd7c90 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_20_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_20_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c66ebe3c16933495fe33596036363f95e20654b6ef5ee822f594a34531ea640f -size 45211 +oid sha256:042b3704cc22988b92bc4d3c05e6463036537a0a0722dd6aa159145dc3eee8d0 +size 45288 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_21_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_21_en.png index 8d4880b59f3..acee159e62f 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_21_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_21_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:de5ccdad3e08ed4fd4330697ad6c7085d5553cb889b7b7c12879aaaa6b34c1de -size 44953 +oid sha256:e75886eb7cd049f678adda848ce192ad3d3aa955a13831f9a2943d448d45b6b4 +size 45126 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_22_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_22_en.png index 52e66c38c84..e417be41baf 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_22_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_22_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e215296d864d34ceacaa53e7fec452643b63d72b253074eb50617bab50915ad1 -size 44670 +oid sha256:99d21cd60196daf4995913af08c24d077c49c704e3ffc95efca3cda8327ce2bf +size 44770 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_2_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_2_en.png index 23ccf2249a7..7a06be8d950 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0bf5c596196e64554117addd1247aa1e5be6e8095d85a595b1c2a6232ed483eb -size 36591 +oid sha256:14468f4212f7df6d4997f7cc961bc671449849ed1a20cc6d8ae47f5cfb63142b +size 36104 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_3_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_3_en.png index 8a7f2e2d758..927bbead05b 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b0cc874a4ba2b8bd0f0b7e290d0ffc67e82d1222fd287360c3321143d5f87ad4 -size 42369 +oid sha256:7886592f98119df3090e5f6e9d317bd9cda4e05a60417bdf86d90a80f261459c +size 41921 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_4_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_4_en.png index 36de539c486..b9e1d4dd00a 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_4_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6900db132e6b79de1c5ac986666af46e3f7ef65a9c4cc7d847dde6962eadd129 -size 41352 +oid sha256:d6f4d5da2952ca6558c7b723d7376ac19af1b0b25c0215ebc862aaf6bde97a89 +size 41566 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_5_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_5_en.png index c5d81c75e3f..0ad094e952a 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_5_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b7199817c8591ccf11241204af8a39d2ed1a60dfe238b06387749d57858cfa65 -size 39288 +oid sha256:b169b8ff192d89e7c207613c7ff1d8dd7080c86fb5e1b5bcf72daaba92e1ca5c +size 39353 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_6_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_6_en.png index 1e0b3070eeb..469dd4e7af9 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_6_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0fac98b00a99771b186e8146b98ab63602be7b4c5cc9febc3ca821c1d5cd6a1b -size 42700 +oid sha256:98afb3020522f3b8e2b9ec09ae1e8106e472ecb2b4f4daa84e623cd2d52f6548 +size 42716 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_7_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_7_en.png index 4b9b30b2ba3..1f20fd33ae2 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_7_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_7_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ed4073d3b427b2a314667f5118b571e5896f1439582b9209077ec9c62ee0e061 -size 43097 +oid sha256:3aa36a6283feddf43224dcdc316caebf7e49cf67df59e8d67ceadc46eba5a9fb +size 42680 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_8_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_8_en.png index 60200cea9a9..2859e5ee45d 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_8_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_8_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c68c895b189a41c7edf8fee58202560ef47e0a98082ddc3a346546f4f1346de7 -size 42100 +oid sha256:340a4c62cf33a638f004cb71cfe8b3635dfaf4d367d203acc0a30ac5c26973f5 +size 41685 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_9_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_9_en.png index f9287533ca7..03486cba839 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_9_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_9_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e1879c3d54dfed55e4bb46d967c9c8c5a4f95f4e31e884afde4c9c517f35402e -size 42093 +oid sha256:14bc58492bf3fb200fd6d31e6315770d6772fdaa2145dd40495de12e451ce944 +size 41678 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_0_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_0_en.png index bb868da01c8..cd906ef23b0 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e2b5dc5cd20ccfdb7e6a1accabf6e139ff343c16378af19232168f835b1c97df -size 43650 +oid sha256:051ffa341d0d76ee9eb7864755ca80722240156bf106f2684273679b9bb28118 +size 44316 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_10_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_10_en.png index 72803025b83..a82f15d96cd 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_10_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_10_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f9c7dce94908b2b0287c196f564c306a05306f058c71d75be3b298a45683bce4 -size 42321 +oid sha256:0fe245d02120a88309230c299ded67afd95a69dcdb040fce2d020bec86a87cff +size 41860 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_11_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_11_en.png index 9d2b4246547..6804a327e39 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_11_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_11_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:743fcac827e8df7742127491722c3ce617a54c0b64fd3336f939994b45376966 -size 41470 +oid sha256:6e40810fde9b93f2da4ef9703733a8c919f6270e68f1cccae3b593ac6a296d61 +size 41005 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_12_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_12_en.png index dd489b5147c..5ba9ef740e1 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_12_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_12_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:671ae1ee2f065705b38063cb354c4bb4a63247e01e1101dd155515b46decb660 -size 42926 +oid sha256:907bc5ffb40292d15b934054ca3c37a5537ce6c47bb945dd5c11da01dead4ba7 +size 42463 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_13_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_13_en.png index d5f14e286e4..9cb9c7b3dbf 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_13_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_13_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8f352ad92472cb8b152ef0660c7f66b55b956ec05bd11dbeb2c9aa543d0db2ca -size 42849 +oid sha256:d2ef5c855c2cd23d3ce5b3257b1c3db59b0399d008177162845c5895d13498b3 +size 42384 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_14_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_14_en.png index cc8b1c74e18..57933e5577b 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_14_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_14_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5742ffdefde6a9e3f01ba021a75eea20599cc520fa4976aa45cf1c10e394f62b -size 43367 +oid sha256:dbc12c789adf564f257befd4c110f10d64c3463d335acc158ef65c2a4621889f +size 44030 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_15_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_15_en.png index c9db5d9a071..bfc347bf55d 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_15_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_15_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0f6be8e586f9692013ce38c483c42fb23f8c135593e17a72f3be19381719fe6c -size 43967 +oid sha256:e590d9e9bc82af320c9da96bfbcfa6689a1f32c19aefe1a9f33cca4257659e9b +size 44637 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_16_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_16_en.png index 6b9fc928037..58169780c9e 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_16_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_16_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7b4b470aa3f3650c26c6e1cf2491ffb7c3ea58db28dd00c0755a7f5727dc60f1 -size 43192 +oid sha256:6cedcee506cf0da4c268b1a261a13f3d114efa551c844e37049b8df313bc247f +size 42735 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_17_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_17_en.png index 12b5fd1b6d6..9191ac271d6 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_17_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_17_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:656c300cea79355aa3b35cd59666f8e35aa4c09d69dd422e816f256cbe6d420d -size 42685 +oid sha256:b2cf15ec5496af4514778b6a9d7bb0debf580718822e7cd03dc4b7f0509840f9 +size 42221 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_18_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_18_en.png index 4c7d16ea221..c50989d61d2 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_18_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_18_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:93fe116bc34f9cf8ee3da2317948a98405e36a6fb98a58b2046a049af435e913 -size 40373 +oid sha256:000fa4e4a9454d956db5a93afe4f8b3bba7fe31bc343aa3b354d8b4b63f555ed +size 40416 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_19_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_19_en.png index 33efb5e55e9..07882447acd 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_19_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_19_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:09f89c67652965407ea147aef158d0b3281850b95cca35f7aec207693bb0af62 -size 40242 +oid sha256:3bffb9963f78aa3a18e2619ca263c8e957951e1332fa3173af99b9b20a8427f8 +size 40287 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_1_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_1_en.png index 5e8f3baa0e2..231e15572a9 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:04c7f8e85d58591c3dd6ade913b9fe0861ff7f774fdb4b46e63c9f86ef5a918a -size 38959 +oid sha256:849f081db49c5617968fddfe1fd6f022bd94fef713cbe5a14fe700312f104258 +size 37567 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_20_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_20_en.png index 9462f1336b1..c72846e4346 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_20_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_20_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:389fcb65c5334f31b3d66731de2c65128d0a17e7380ca7c45be8a36023719732 -size 46097 +oid sha256:1ebedd4942f81f62f6681fc1ce68ab5552cee7ffc5a0e5c56f82730d35f0f1b4 +size 46266 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_21_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_21_en.png index f1f9639eaeb..cba4aebe328 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_21_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_21_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:567cefb525795b66704ccd1738bfe08247004814c947f6c60801588304c768c2 -size 45835 +oid sha256:991da4931bc74e8844fe1a4cae1d06b30207d4ff002664753facfcafb2134f56 +size 46007 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_22_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_22_en.png index fb830369a59..96afd72deec 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_22_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_22_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f87512e18ca91237141d97ed03f4725a8a671268daf50f0a8049ee34bdc42a61 -size 45503 +oid sha256:d0a76126bfe123d51ed4b0e82a90b248fa42662693dfef6d29865bca17790a20 +size 45679 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_2_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_2_en.png index cb6e8c1f807..c8da0ec4734 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:27918a9baa05b2cb8dee7219b6e19cc10be1421be190d1e35724d237270761af -size 37382 +oid sha256:95ec8541a2d0a538a39b3fd90f1f4277faea0f6b1c05def88d40ec17fadb07af +size 36813 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_3_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_3_en.png index a64f6a2843a..eac05a18b29 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cfd96490ce4509620efd7be72e6ecca219eafe73050417c0c3685339444457f1 -size 43060 +oid sha256:8b9a55b7e6bb86b45b8658e44985eca49b1304f324b54e55d341ee5d66d71c18 +size 42602 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_4_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_4_en.png index a8894c7eab8..6de750a1d56 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_4_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8ee0a79abd45fc9573e64b6f06491f33dfca34ddd96c0dbd3d8cf7a9052b47be -size 42072 +oid sha256:6d102a4199fa98985d6ca00ed93931f14092d1f09ceb9312bf212491e717fbac +size 42259 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_5_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_5_en.png index cc81464baab..281cec972c0 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_5_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e7146d365a105c86eecc34027d2b824e90ca1615fcf77ca0f49ed920dbffe22d -size 39903 +oid sha256:253494f9e9c57113b71c0d35f3443555bc4fb44853f36d1feb653656856efc19 +size 39950 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_6_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_6_en.png index 2f72417b731..09bce8a5ff9 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_6_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dd455b5b492eb88bde4e985ca01ab97e23a337d7ac478782c09dbb10803960f2 -size 43430 +oid sha256:5c46112009b3c47b35b2f507812ad0cb94cfd394cd2e12144385275d5dfe5d62 +size 43480 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_7_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_7_en.png index 55d8ab98698..beaed79063c 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_7_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_7_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:863c5db2d8fd863b057d0ddfe26bb3804d15126c2fdb58fc03c0087d79c6a3b3 -size 44056 +oid sha256:0791761a7e26bd8788b026c081b79fa09ab449c6b10176c1690a2ddff6f12be9 +size 43597 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_8_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_8_en.png index 83b9c7131d5..78d1d5ade85 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_8_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_8_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:16b815f5ec48c101a7bde78cd5a4e30e825138f359e415699ef2b14e6ea23869 -size 42968 +oid sha256:74815d21ac2e8cb5115d2e78ac82aa6c9000afe053fedfba9db65bc6883f325b +size 42516 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_9_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_9_en.png index faf5081313c..5aee3ceef4f 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_9_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_9_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5c47ff32beec1987fdb9f92ef6e5c9b7eca04ab20ebab576a2028225a595ba12 -size 42911 +oid sha256:046cc4deb97e8d6ccdd05665d1876091fe46db2014f69209dcf1d6aeadecc633 +size 42452