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 ba9a204a64..2a21518e83 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 @@ -63,6 +63,8 @@ import io.element.android.libraries.designsystem.theme.roomListRoomName import io.element.android.libraries.designsystem.theme.unreadIndicator import io.element.android.libraries.matrix.api.notification.CallIntent import io.element.android.libraries.matrix.api.room.RoomNotificationMode +import io.element.android.libraries.matrix.api.user.DisplayedStatus +import io.element.android.libraries.matrix.ui.components.DisplayNameWithStatus import io.element.android.libraries.matrix.ui.components.InviteSenderView import io.element.android.libraries.matrix.ui.model.InviteSender import io.element.android.libraries.ui.strings.CommonStrings @@ -126,7 +128,8 @@ internal fun RoomSummaryRow( NameAndTimestampRow( name = room.name, timestamp = room.timestamp, - isHighlighted = room.isHighlighted + isHighlighted = room.isHighlighted, + dmUserStatus = room.dmUserStatus, ) MessagePreviewAndIndicatorRow(room = room, showUnreadCount = showUnreadCount) } @@ -142,7 +145,8 @@ internal fun RoomSummaryRow( NameAndTimestampRow( name = room.name, timestamp = null, - isHighlighted = room.isHighlighted + isHighlighted = room.isHighlighted, + dmUserStatus = null, ) if (room.canonicalAlias != null) { Text( @@ -218,22 +222,21 @@ private fun NameAndTimestampRow( name: String?, timestamp: String?, isHighlighted: Boolean, + dmUserStatus: DisplayedStatus?, modifier: Modifier = Modifier ) { Row( modifier = modifier.fillMaxWidth(), horizontalArrangement = spacedBy(16.dp) ) { - Text( - modifier = Modifier - .weight(1f) - .clipToBounds(), + val displayName = name?.toSafeLength(ellipsize = true) ?: stringResource(id = CommonStrings.common_no_room_name) + DisplayNameWithStatus( + name = displayName, + status = dmUserStatus, + modifier = Modifier.weight(1f), style = ElementTheme.typography.fontBodyLgMedium, - text = name?.toSafeLength(ellipsize = true) ?: stringResource(id = CommonStrings.common_no_room_name), - fontStyle = FontStyle.Italic.takeIf { name == null }, - color = ElementTheme.colors.roomListRoomName, - maxLines = 1, - overflow = TextOverflow.Ellipsis + nameColor = ElementTheme.colors.roomListRoomName, + nameFontStyle = FontStyle.Italic.takeIf { name == null }, ) // Timestamp Text( diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/datasource/RoomListRoomSummaryFactory.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/datasource/RoomListRoomSummaryFactory.kt index e34f2845da..96e9f9344b 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/datasource/RoomListRoomSummaryFactory.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/datasource/RoomListRoomSummaryFactory.kt @@ -21,6 +21,7 @@ import io.element.android.libraries.matrix.api.room.CallIntentConsensus import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.roomlist.LatestEventValue import io.element.android.libraries.matrix.api.roomlist.RoomSummary +import io.element.android.libraries.matrix.ui.model.dmUserStatus import io.element.android.libraries.matrix.ui.model.getAvatarData import io.element.android.libraries.matrix.ui.model.toInviteSender import kotlinx.collections.immutable.toImmutableList @@ -76,6 +77,7 @@ class RoomListRoomSummaryFactory( }.toImmutableList(), isTombstoned = roomInfo.successorRoom != null, isSpace = roomInfo.isSpace, + dmUserStatus = roomInfo.dmUserStatus(), ) } 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 628d0d0a9b..3ad568abb6 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 @@ -15,6 +15,7 @@ import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.notification.CallIntent import io.element.android.libraries.matrix.api.room.RoomNotificationMode +import io.element.android.libraries.matrix.api.user.DisplayedStatus import io.element.android.libraries.matrix.ui.model.InviteSender import kotlinx.collections.immutable.ImmutableList @@ -42,6 +43,7 @@ data class RoomListRoomSummary( val isTombstoned: Boolean, val heroes: ImmutableList, val isSpace: Boolean, + val dmUserStatus: DisplayedStatus?, ) { val isHighlighted = userDefinedNotificationMode != RoomNotificationMode.MUTE && (numberOfUnreadNotifications > 0 || numberOfUnreadMentions > 0) || 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 09e6c2e6c9..2e75858e3e 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 @@ -20,6 +20,7 @@ import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.notification.CallIntent import io.element.android.libraries.matrix.api.room.RoomNotificationMode +import io.element.android.libraries.matrix.api.user.DisplayedStatus import io.element.android.libraries.matrix.ui.model.InviteSender import kotlinx.collections.immutable.toImmutableList @@ -182,6 +183,7 @@ internal fun aRoomListRoomSummary( heroes: List = emptyList(), isTombstoned: Boolean = false, isSpace: Boolean = false, + dmUserStatus: DisplayedStatus? = null, ) = RoomListRoomSummary( id = id, roomId = RoomId(id), @@ -204,5 +206,6 @@ internal fun aRoomListRoomSummary( canonicalAlias = canonicalAlias, heroes = heroes.toImmutableList(), isTombstoned = isTombstoned, - isSpace = isSpace + isSpace = isSpace, + dmUserStatus = dmUserStatus, ) diff --git a/features/home/impl/src/test/kotlin/io/element/android/features/home/impl/model/RoomListBaseRoomSummaryTest.kt b/features/home/impl/src/test/kotlin/io/element/android/features/home/impl/model/RoomListBaseRoomSummaryTest.kt index 63f1ecebd7..0e00f43712 100644 --- a/features/home/impl/src/test/kotlin/io/element/android/features/home/impl/model/RoomListBaseRoomSummaryTest.kt +++ b/features/home/impl/src/test/kotlin/io/element/android/features/home/impl/model/RoomListBaseRoomSummaryTest.kt @@ -12,6 +12,7 @@ import com.google.common.truth.Truth.assertThat import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.matrix.api.room.RoomNotificationMode +import io.element.android.libraries.matrix.api.user.DisplayedStatus import io.element.android.libraries.matrix.test.A_ROOM_ID import io.element.android.libraries.matrix.test.A_ROOM_NAME import kotlinx.collections.immutable.toImmutableList @@ -87,6 +88,7 @@ internal fun createRoomListRoomSummary( timestamp: String? = null, isTombstoned: Boolean = false, isSpace: Boolean = false, + dmUserStatus: DisplayedStatus? = null, ) = RoomListRoomSummary( id = A_ROOM_ID.value, roomId = A_ROOM_ID, @@ -109,5 +111,6 @@ internal fun createRoomListRoomSummary( isDm = false, heroes = heroes.toImmutableList(), isTombstoned = isTombstoned, - isSpace = isSpace + isSpace = isSpace, + dmUserStatus = dmUserStatus, ) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt index 17127ff6ec..dd3afb0ea6 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt @@ -84,6 +84,7 @@ import io.element.android.libraries.matrix.api.room.powerlevels.permissionsAsSta import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.libraries.matrix.api.timeline.item.event.EventOrTransactionId import io.element.android.libraries.matrix.ui.messages.reply.map +import io.element.android.libraries.matrix.ui.model.dmUserStatus import io.element.android.libraries.matrix.ui.model.getAvatarData import io.element.android.libraries.matrix.ui.room.getDirectRoomMember import io.element.android.libraries.textcomposer.model.MessageComposerMode @@ -319,6 +320,7 @@ class MessagesPresenter( appName = buildMeta.applicationName, pinnedMessagesBannerState = pinnedMessagesBannerState, dmUserVerificationState = dmUserVerificationState, + dmUserStatus = roomInfo.dmUserStatus(), roomMemberModerationState = roomMemberModerationState, topBarSharedHistoryIcon = topBarSharedHistoryIcon, successorRoom = roomInfo.successorRoom, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesState.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesState.kt index a16485c6f7..d9ec875320 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesState.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesState.kt @@ -27,6 +27,7 @@ import io.element.android.libraries.designsystem.utils.snackbar.SnackbarMessage import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.encryption.identity.IdentityState import io.element.android.libraries.matrix.api.room.tombstone.SuccessorRoom +import io.element.android.libraries.matrix.api.user.DisplayedStatus import kotlinx.collections.immutable.ImmutableList data class MessagesState( @@ -53,6 +54,7 @@ data class MessagesState( val appName: String, val pinnedMessagesBannerState: PinnedMessagesBannerState, val dmUserVerificationState: IdentityState?, + val dmUserStatus: DisplayedStatus?, val roomMemberModerationState: RoomMemberModerationState, /** Type of "shared history" icon to show in the top bar. */ val topBarSharedHistoryIcon: SharedHistoryIcon, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt index f47e76fbef..7315ace96e 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt @@ -50,6 +50,7 @@ import io.element.android.libraries.matrix.api.core.ThreadId import io.element.android.libraries.matrix.api.encryption.identity.IdentityState import io.element.android.libraries.matrix.api.room.tombstone.SuccessorRoom import io.element.android.libraries.matrix.api.timeline.Timeline +import io.element.android.libraries.matrix.api.user.DisplayedStatus import io.element.android.libraries.textcomposer.model.MessageComposerMode import io.element.android.libraries.textcomposer.model.aTextEditorStateMarkdown import io.element.android.libraries.textcomposer.model.aTextEditorStateRich @@ -128,6 +129,7 @@ fun aMessagesState( hasUnreadThreads = false, ), isCurrentlySharingLiveLocationInRoom: Boolean = false, + dmUserStatus: DisplayedStatus? = null, eventSink: (MessagesEvent) -> Unit = {}, ) = MessagesState( roomId = RoomId("!id:domain"), @@ -158,6 +160,7 @@ fun aMessagesState( successorRoom = successorRoom, threads = threads, showLiveLocationShareBanner = isCurrentlySharingLiveLocationInRoom, + dmUserStatus = dmUserStatus, eventSink = eventSink, ) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt index 5e206d5588..db80b92a16 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt @@ -244,6 +244,7 @@ fun MessagesView( heroes = state.heroes, dmUserIdentityState = state.dmUserVerificationState, sharedHistoryIcon = state.topBarSharedHistoryIcon, + dmUserStatus = state.dmUserStatus, onBackClick = { hidingKeyboard { onBackClick() } }, onRoomDetailsClick = { hidingKeyboard { onRoomDetailsClick() } }, menuActions = { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/suggestions/SuggestionsPickerView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/suggestions/SuggestionsPickerView.kt index ef2362c794..a4d8453d10 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/suggestions/SuggestionsPickerView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/suggestions/SuggestionsPickerView.kt @@ -41,6 +41,8 @@ import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.api.room.RoomMembershipState +import io.element.android.libraries.matrix.api.room.getBestName +import io.element.android.libraries.matrix.ui.components.DisplayNameWithStatus import io.element.android.libraries.matrix.ui.model.getAvatarData import io.element.android.libraries.slashcommands.api.SlashCommandSuggestion import io.element.android.libraries.textcomposer.mentions.ResolvedSuggestion @@ -112,12 +114,16 @@ private fun SuggestionItemView( is ResolvedSuggestion.Member -> AvatarType.User is ResolvedSuggestion.Command -> null } - val title = when (suggestion) { + val title: String? = when (suggestion) { is ResolvedSuggestion.AtRoom -> stringResource(R.string.screen_room_mentions_at_room_title) - is ResolvedSuggestion.Member -> suggestion.roomMember.displayName + is ResolvedSuggestion.Member -> suggestion.roomMember.getBestName() is ResolvedSuggestion.Alias -> suggestion.roomName is ResolvedSuggestion.Command -> suggestion.command.command } + val status = when (suggestion) { + is ResolvedSuggestion.Member -> suggestion.roomMember.displayedStatus + else -> null + } val details = when (suggestion) { is ResolvedSuggestion.AtRoom, is ResolvedSuggestion.Member, @@ -148,11 +154,11 @@ private fun SuggestionItemView( horizontalArrangement = Arrangement.spacedBy(4.dp) ) { title?.let { - Text( - text = it, + DisplayNameWithStatus( + name = title, + status = status, style = ElementTheme.typography.fontBodyLgRegular, - maxLines = 1, - overflow = TextOverflow.Ellipsis, + nameColor = ElementTheme.colors.textPrimary, ) } details?.let { @@ -191,6 +197,7 @@ internal fun SuggestionsPickerViewPreview() { role = RoomMember.Role.User, membershipChangeReason = null, isServiceMember = false, + displayedStatus = null, ) val anAlias = remember { RoomAlias("#room:domain.org") } SuggestionsPickerView( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/threads/list/ThreadsListView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/threads/list/ThreadsListView.kt index 3bcb8ab67a..dd44fe0af3 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/threads/list/ThreadsListView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/threads/list/ThreadsListView.kt @@ -383,7 +383,12 @@ fun aThreadListItem( fun aThreadListItemEvent( threadId: ThreadId = ThreadId("\$a-thread-id"), senderId: UserId = UserId("@a-user-id:server"), - senderProfile: ProfileDetails = ProfileDetails.Ready(displayName = USER_NAME_ALICE, displayNameAmbiguous = false, avatarUrl = null), + senderProfile: ProfileDetails = ProfileDetails.Ready( + displayName = USER_NAME_ALICE, + displayNameAmbiguous = false, + avatarUrl = null, + displayedStatus = null, + ), isOwn: Boolean = false, content: EventContent = MessageContent( body = "Hello world!", diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessageShieldView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessageShieldView.kt index 1859e66750..a68d115e08 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessageShieldView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessageShieldView.kt @@ -166,6 +166,7 @@ internal fun MessageShieldViewPreview() { displayName = USER_NAME_ALICE, displayNameAmbiguous = false, avatarUrl = null, + displayedStatus = null, ), ) ) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemContentScannerPreviews.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemContentScannerPreviews.kt index a59a1c0ae0..7ef6b2dffe 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemContentScannerPreviews.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemContentScannerPreviews.kt @@ -315,7 +315,12 @@ private fun inReplyToInvalidContent(): InReplyToDetails.Ready = InReplyToDetails ) ), textContent = "A text content", - senderProfile = ProfileDetails.Ready(displayName = "Sender", displayNameAmbiguous = false, avatarUrl = null) + senderProfile = ProfileDetails.Ready( + displayName = "Sender", + displayNameAmbiguous = false, + avatarUrl = null, + displayedStatus = null + ) ) private fun inReplyToTextContent(): InReplyToDetails.Ready = InReplyToDetails.Ready( @@ -332,5 +337,10 @@ private fun inReplyToTextContent(): InReplyToDetails.Ready = InReplyToDetails.Re ) ), textContent = "A text content", - senderProfile = ProfileDetails.Ready(displayName = "Sender", displayNameAmbiguous = false, avatarUrl = null) + senderProfile = ProfileDetails.Ready( + displayName = "Sender", + displayNameAmbiguous = false, + avatarUrl = null, + displayedStatus = null + ) ) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRow.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRow.kt index 30053294da..fed2ab6577 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRow.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRow.kt @@ -962,6 +962,7 @@ internal fun TimelineItemEventRowWithThreadSummaryPreview() = ElementPreview { displayName = USER_NAME_ALICE, avatarUrl = null, displayNameAmbiguous = false, + displayedStatus = null, ), timestamp = 0L, ) @@ -1140,6 +1141,7 @@ internal fun ThreadSummaryViewPreview() { displayName = USER_NAME_ALICE, avatarUrl = null, displayNameAmbiguous = true, + displayedStatus = null, ), timestamp = 0L, ) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/topbars/MessagesViewTopBar.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/topbars/MessagesViewTopBar.kt index 4f023ad2bd..2daa90af53 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/topbars/MessagesViewTopBar.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/topbars/MessagesViewTopBar.kt @@ -26,7 +26,6 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.semantics.heading import androidx.compose.ui.semantics.semantics import androidx.compose.ui.text.font.FontStyle -import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons @@ -46,9 +45,10 @@ import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.ROOM_NAME import io.element.android.libraries.designsystem.theme.components.HorizontalDivider import io.element.android.libraries.designsystem.theme.components.Icon -import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.matrix.api.encryption.identity.IdentityState +import io.element.android.libraries.matrix.api.user.DisplayedStatus +import io.element.android.libraries.matrix.ui.components.DisplayNameWithStatus import io.element.android.libraries.matrix.ui.components.aMatrixUserList import io.element.android.libraries.matrix.ui.model.getAvatarData import io.element.android.libraries.ui.strings.CommonStrings @@ -65,6 +65,7 @@ internal fun MessagesViewTopBar( heroes: ImmutableList, dmUserIdentityState: IdentityState?, sharedHistoryIcon: SharedHistoryIcon, + dmUserStatus: DisplayedStatus?, onRoomDetailsClick: () -> Unit, onBackClick: () -> Unit, modifier: Modifier = Modifier, @@ -91,6 +92,7 @@ internal fun MessagesViewTopBar( roomAvatar = roomAvatar, isTombstoned = isTombstoned, heroes = heroes, + dmUserStatus = dmUserStatus, modifier = titleModifier ) @@ -144,6 +146,7 @@ private fun RoomAvatarAndNameRow( roomAvatar: AvatarData, heroes: ImmutableList, isTombstoned: Boolean, + dmUserStatus: DisplayedStatus?, modifier: Modifier = Modifier ) { Row( @@ -157,14 +160,13 @@ private fun RoomAvatarAndNameRow( isTombstoned = isTombstoned, ), ) - Text( - modifier = Modifier - .padding(start = 8.dp), - text = roomName ?: stringResource(CommonStrings.common_no_room_name), + DisplayNameWithStatus( + name = roomName ?: stringResource(CommonStrings.common_no_room_name), + status = dmUserStatus, + modifier = Modifier.padding(start = 8.dp), style = ElementTheme.typography.fontBodyLgMedium, - fontStyle = FontStyle.Italic.takeIf { roomName == null }, - maxLines = 1, - overflow = TextOverflow.Ellipsis + nameColor = ElementTheme.colors.textPrimary, + nameFontStyle = FontStyle.Italic.takeIf { roomName == null }, ) } } @@ -184,6 +186,7 @@ internal fun MessagesViewTopBarPreview() = ElementPreview { roomCallState: RoomCallState = RoomCallState.Unavailable, dmUserIdentityState: IdentityState? = null, sharedHistoryIcon: SharedHistoryIcon = SharedHistoryIcon.NONE, + dmUserStatus: DisplayedStatus? = null, displayThreads: Boolean = false, ) = MessagesViewTopBar( roomName = roomName, @@ -192,6 +195,7 @@ internal fun MessagesViewTopBarPreview() = ElementPreview { heroes = heroes, dmUserIdentityState = dmUserIdentityState, sharedHistoryIcon = sharedHistoryIcon, + dmUserStatus = dmUserStatus, onRoomDetailsClick = {}, onBackClick = {}, menuActions = { @@ -246,5 +250,11 @@ internal fun MessagesViewTopBarPreview() = ElementPreview { AMessagesViewTopBar( displayThreads = true, ) + HorizontalDivider() + AMessagesViewTopBar( + roomName = "A DM with a very very very long name", + dmUserIdentityState = IdentityState.Verified, + dmUserStatus = DisplayedStatus.InCall(0L) + ) } } diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/userstatus/UserStatusState.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/userstatus/UserStatusState.kt index 925bec5b86..fa225ae277 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/userstatus/UserStatusState.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/userstatus/UserStatusState.kt @@ -41,9 +41,9 @@ sealed interface EmojiPickerSheetState { } enum class PredefinedUserStatus(val emoji: String, @StringRes val labelRes: Int) { - IN_A_MEETING("💬", R.string.common_user_status_in_a_meeting), - FOCUS_TIME("💡", R.string.common_user_status_focus_time), - ON_THE_ROAD("🚙", R.string.common_user_status_on_the_road), - BE_RIGHT_BACK("☕", R.string.common_user_status_be_right_back), - AWAY("🌴", R.string.common_user_status_away), + IN_A_MEETING("💬", R.string.screen_settings_user_status_in_a_meeting), + FOCUS_TIME("💡", R.string.screen_settings_user_status_focus_time), + ON_THE_ROAD("🚙", R.string.screen_settings_user_status_on_the_road), + BE_RIGHT_BACK("☕", R.string.screen_settings_user_status_be_right_back), + AWAY("🌴", R.string.screen_settings_user_status_away), } diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/userstatus/UserStatusView.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/userstatus/UserStatusView.kt index abdd060e0a..f145ef76ca 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/userstatus/UserStatusView.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/userstatus/UserStatusView.kt @@ -132,7 +132,7 @@ private fun EmptyStatusRow( ListItem( headlineContent = { Text( - text = stringResource(R.string.screen_preferences_user_status_placeholder), + text = stringResource(R.string.screen_settings_user_status_placeholder), modifier = Modifier.padding(vertical = 16.dp), ) }, @@ -150,7 +150,7 @@ private fun CurrentStatusRow( ) { val (emoji, text) = when (displayedStatus) { is DisplayedStatus.UserSet -> displayedStatus.status.emoji to displayedStatus.status.text - is DisplayedStatus.InCall -> "🎧" to stringResource(R.string.common_user_status_on_a_call) + is DisplayedStatus.InCall -> "🎧" to stringResource(CommonStrings.common_on_a_call) } ListItem( headlineContent = { Text(text = text, modifier = Modifier.padding(vertical = 16.dp)) }, @@ -225,7 +225,7 @@ private fun UserStatusPickerBottomSheet( } ListItem( headlineContent = { - Text(text = stringResource(R.string.common_user_status_custom)) + Text(text = stringResource(R.string.screen_settings_user_status_custom)) }, leadingContent = ListItemContent.Custom { EmojiText("✏️") }, onClick = { @@ -265,7 +265,7 @@ private fun CustomStatusInputRow( TextField( modifier = Modifier.focusRequester(focusRequester), state = textFieldState, - placeholder = stringResource(R.string.screen_preferences_user_status_custom_hint), + placeholder = stringResource(R.string.screen_settings_user_status_custom_hint), inputTransformation = InputTransformation.maxLength(CUSTOM_STATUS_TEXT_MAX_LENGTH), keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), onKeyboardAction = { if (hasChanges) onConfirm() }, diff --git a/features/preferences/impl/src/main/res/values/localazy.xml b/features/preferences/impl/src/main/res/values/localazy.xml index 7a02bbc839..b4b97375b5 100644 --- a/features/preferences/impl/src/main/res/values/localazy.xml +++ b/features/preferences/impl/src/main/res/values/localazy.xml @@ -101,6 +101,14 @@ If you proceed, some of your settings may change." "system settings" "System notifications turned off" "Notifications" + "Away" + "Be right back" + "Custom…" + "Custom status…" + "Focus time" + "In a meeting" + "On the road" + "What\'s your status?" "Black" "Dark" "Light" diff --git a/features/preferences/impl/src/main/res/values/temporary.xml b/features/preferences/impl/src/main/res/values/temporary.xml deleted file mode 100644 index b22f265891..0000000000 --- a/features/preferences/impl/src/main/res/values/temporary.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - In a meeting - Focus time - On the road - Be right back - Away - On a call - Custom… - What\'s your status? - Custom status… - 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 935b7293ae..6aa4f11a8e 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 @@ -26,6 +26,7 @@ import io.element.android.libraries.matrix.api.room.RoomMembershipState import io.element.android.libraries.matrix.api.room.RoomNotificationMode import io.element.android.libraries.matrix.api.room.RoomNotificationSettings import io.element.android.libraries.matrix.api.room.history.RoomHistoryVisibility +import io.element.android.libraries.matrix.api.user.DisplayedStatus import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.ui.components.aMatrixUserList import kotlinx.collections.immutable.toImmutableList @@ -75,6 +76,7 @@ fun aDmRoomMember( role: RoomMember.Role = RoomMember.Role.User, membershipChangeReason: String? = null, isServiceMember: Boolean = false, + displayedStatus: DisplayedStatus? = null, ) = RoomMember( userId = userId, displayName = displayName, @@ -86,6 +88,7 @@ fun aDmRoomMember( role = role, membershipChangeReason = membershipChangeReason, isServiceMember = isServiceMember, + displayedStatus = displayedStatus, ) fun aRoomDetailsState( @@ -178,12 +181,13 @@ fun aDmRoomDetailsState( roomName: String = "Daniel", isEncrypted: Boolean = true, dmRoomMemberVerificationState: UserProfileVerificationState = UserProfileVerificationState.UNKNOWN, + displayedStatus: DisplayedStatus? = null, ) = aRoomDetailsState( roomName = roomName, isPublic = false, isEncrypted = isEncrypted, canInvite = true, - roomType = RoomDetailsType.Dm(otherMember = aDmRoomMember(isIgnored = isDmMemberIgnored)), + roomType = RoomDetailsType.Dm(otherMember = aDmRoomMember(isIgnored = isDmMemberIgnored, displayedStatus = displayedStatus)), dmOtherMemberDetailsState = aUserProfileState( isBlocked = AsyncData.Success(isDmMemberIgnored), verificationState = dmRoomMemberVerificationState, 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 591ff7ff1e..e55144985a 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 @@ -37,6 +37,7 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import im.vector.app.features.analytics.plan.Interaction @@ -88,6 +89,7 @@ import io.element.android.libraries.matrix.api.room.RoomNotificationMode import io.element.android.libraries.matrix.api.room.getBestName import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.ui.model.getAvatarData +import io.element.android.libraries.matrix.ui.model.toText import io.element.android.libraries.testtags.TestTags import io.element.android.libraries.testtags.testTag import io.element.android.libraries.ui.strings.CommonStrings @@ -489,11 +491,23 @@ private fun RoomHeaderSection( } .testTag(TestTags.roomDetailAvatar) ) - TitleAndSubtitle( - title = roomName, - subtitle = roomAlias?.value, - onSubtitleClick = onSubtitleClick, + Spacer(modifier = Modifier.height(24.dp)) + Text( + text = roomName, + style = ElementTheme.typography.fontHeadingLgBold, + textAlign = TextAlign.Center, ) + if (roomAlias != null) { + Spacer(modifier = Modifier.height(12.dp)) + Text( + modifier = Modifier.niceClickable { onSubtitleClick(roomAlias.value) }, + text = roomAlias.value, + style = ElementTheme.typography.fontBodyLgRegular, + color = ElementTheme.colors.textSecondary, + textAlign = TextAlign.Center, + ) + } + Spacer(modifier = Modifier.height(12.dp)) } } @@ -531,37 +545,34 @@ private fun DmHeaderSection( } .testTag(TestTags.roomDetailAvatar) ) - TitleAndSubtitle( - title = roomName, - subtitle = otherMember.userId.value, - onSubtitleClick = onSubtitleClick, - ) - } -} - -@Composable -private fun TitleAndSubtitle( - title: String, - subtitle: String?, - onSubtitleClick: (String) -> Unit, -) { - Column(horizontalAlignment = Alignment.CenterHorizontally) { Spacer(modifier = Modifier.height(24.dp)) Text( - text = title, + text = roomName, style = ElementTheme.typography.fontHeadingLgBold, textAlign = TextAlign.Center, ) - if (subtitle != null) { - Spacer(modifier = Modifier.height(6.dp)) + val userStatus = otherMember.displayedStatus?.toText() + if (userStatus != null) { + Spacer(modifier = Modifier.height(12.dp)) Text( - modifier = Modifier.niceClickable { onSubtitleClick(subtitle) }, - text = subtitle, - style = ElementTheme.typography.fontBodyLgRegular, + text = userStatus, + style = ElementTheme.typography.fontBodyLgMedium, + maxLines = 1, color = ElementTheme.colors.textSecondary, + overflow = TextOverflow.Ellipsis, textAlign = TextAlign.Center, + modifier = Modifier.fillMaxWidth() ) } + Spacer(modifier = Modifier.height(12.dp)) + Text( + modifier = Modifier.niceClickable { onSubtitleClick(otherMember.userId.value) }, + text = otherMember.userId.value, + style = ElementTheme.typography.fontBodyLgRegular, + color = ElementTheme.colors.textSecondary, + textAlign = TextAlign.Center, + ) + Spacer(modifier = Modifier.height(12.dp)) } } diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListStateProvider.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListStateProvider.kt index 23c6292294..472a185076 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListStateProvider.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListStateProvider.kt @@ -28,6 +28,7 @@ import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.encryption.identity.IdentityState import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.api.room.RoomMembershipState +import io.element.android.libraries.matrix.api.user.DisplayedStatus import kotlinx.collections.immutable.persistentListOf internal class RoomMemberListStateProvider : PreviewParameterProvider { @@ -129,6 +130,7 @@ fun aRoomMember( role: RoomMember.Role = RoomMember.Role.User, membershipChangeReason: String? = null, isServiceMember: Boolean = false, + displayedStatus: DisplayedStatus? = null, ) = RoomMember( userId = userId, displayName = displayName, @@ -140,6 +142,7 @@ fun aRoomMember( role = role, membershipChangeReason = membershipChangeReason, isServiceMember = isServiceMember, + displayedStatus = displayedStatus, ) fun aRoomMemberList() = persistentListOf( diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsPresenter.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsPresenter.kt index f47ea0e8b3..9b18c88c93 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsPresenter.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsPresenter.kt @@ -128,6 +128,7 @@ class RoomMemberDetailsPresenter( return userProfileState.copy( userName = roomUserName ?: userProfileState.userName, avatarUrl = roomUserAvatar ?: userProfileState.avatarUrl, + displayedStatus = roomMember?.displayedStatus ?: userProfileState.displayedStatus, verificationState = verificationState, snackbarMessage = snackbarMessage, eventSink = ::handleEvent, diff --git a/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/InternalRoomMemberModerationStateProvider.kt b/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/InternalRoomMemberModerationStateProvider.kt index 2bb4db0c69..2c32f2c47a 100644 --- a/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/InternalRoomMemberModerationStateProvider.kt +++ b/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/InternalRoomMemberModerationStateProvider.kt @@ -16,6 +16,7 @@ import io.element.android.features.roommembermoderation.api.RoomMemberModeration import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.designsystem.preview.USER_NAME_ALICE import io.element.android.libraries.matrix.api.core.UserId +import io.element.android.libraries.matrix.api.user.DisplayedStatus import io.element.android.libraries.matrix.api.user.MatrixUser import kotlinx.collections.immutable.toImmutableList @@ -82,6 +83,7 @@ fun anAlice() = MatrixUser( userId = UserId(value = "@alice:server.org"), displayName = USER_NAME_ALICE, avatarUrl = null, + displayedStatus = DisplayedStatus.InCall(0L), ) fun aRoomMembersModerationState( diff --git a/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationView.kt b/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationView.kt index 410c573e4d..9b0686a64f 100644 --- a/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationView.kt +++ b/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationView.kt @@ -57,6 +57,7 @@ import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.ui.model.getAvatarData import io.element.android.libraries.matrix.ui.model.getBestName +import io.element.android.libraries.matrix.ui.model.toText import io.element.android.libraries.ui.strings.CommonStrings import kotlinx.collections.immutable.ImmutableList import kotlinx.coroutines.launch @@ -264,9 +265,23 @@ private fun RoomMemberActionsBottomSheet( overflow = TextOverflow.Ellipsis, textAlign = TextAlign.Center, modifier = Modifier - .padding(start = 16.dp, end = 16.dp, bottom = 8.dp) + .padding(start = 16.dp, end = 16.dp, bottom = 12.dp) .fillMaxWidth() ) + val userStatus = user.displayedStatus?.toText() + if (userStatus != null) { + Text( + text = userStatus, + style = ElementTheme.typography.fontBodyLgMedium, + maxLines = 1, + color = ElementTheme.colors.textSecondary, + overflow = TextOverflow.Ellipsis, + textAlign = TextAlign.Center, + modifier = Modifier + .padding(start = 16.dp, end = 16.dp, bottom = 12.dp) + .fillMaxWidth() + ) + } // Show user ID only if it's different from the display name if (bestName != user.userId.value) { Text( diff --git a/features/userprofile/api/src/main/kotlin/io/element/android/features/userprofile/api/UserProfileState.kt b/features/userprofile/api/src/main/kotlin/io/element/android/features/userprofile/api/UserProfileState.kt index 0e0016ee14..4de0d50ca4 100644 --- a/features/userprofile/api/src/main/kotlin/io/element/android/features/userprofile/api/UserProfileState.kt +++ b/features/userprofile/api/src/main/kotlin/io/element/android/features/userprofile/api/UserProfileState.kt @@ -13,6 +13,7 @@ import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.designsystem.utils.snackbar.SnackbarMessage import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.UserId +import io.element.android.libraries.matrix.api.user.DisplayedStatus data class UserProfileState( val userId: UserId, @@ -26,6 +27,7 @@ data class UserProfileState( val dmRoomId: RoomId?, val canCall: Boolean, val snackbarMessage: SnackbarMessage?, + val displayedStatus: DisplayedStatus?, val eventSink: (UserProfileEvents) -> Unit ) { enum class ConfirmationDialog { diff --git a/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/root/UserProfilePresenter.kt b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/root/UserProfilePresenter.kt index 7e09a03ec3..24977713c0 100644 --- a/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/root/UserProfilePresenter.kt +++ b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/root/UserProfilePresenter.kt @@ -145,6 +145,7 @@ class UserProfilePresenter( userId = userId, userName = userProfile?.displayName, avatarUrl = userProfile?.avatarUrl, + displayedStatus = userProfile?.displayedStatus, isBlocked = isBlocked.value, verificationState = UserProfileVerificationState.UNKNOWN, startDmActionState = startDmActionState.value, diff --git a/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileHeaderSection.kt b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileHeaderSection.kt index 5ba0280b14..4f1c56e80e 100644 --- a/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileHeaderSection.kt +++ b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileHeaderSection.kt @@ -42,6 +42,8 @@ import io.element.android.libraries.designsystem.theme.components.ButtonSize import io.element.android.libraries.designsystem.theme.components.OutlinedButton import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.matrix.api.core.UserId +import io.element.android.libraries.matrix.api.user.DisplayedStatus +import io.element.android.libraries.matrix.ui.model.toText import io.element.android.libraries.testtags.TestTags import io.element.android.libraries.testtags.testTag import io.element.android.libraries.ui.strings.CommonStrings @@ -56,6 +58,7 @@ fun UserProfileHeaderSection( openAvatarPreview: (url: String) -> Unit, onUserIdClick: () -> Unit, withdrawVerificationClick: () -> Unit, + displayedStatus: DisplayedStatus?, modifier: Modifier = Modifier ) { Column( @@ -90,7 +93,16 @@ fun UserProfileHeaderSection( style = ElementTheme.typography.fontHeadingLgBold, textAlign = TextAlign.Center, ) - Spacer(modifier = Modifier.height(6.dp)) + Spacer(modifier = Modifier.height(12.dp)) + } + displayedStatus?.let { status -> + Text( + text = status.toText(), + style = ElementTheme.typography.fontBodyLgMedium, + color = ElementTheme.colors.textSecondary, + textAlign = TextAlign.Center, + ) + Spacer(modifier = Modifier.height(12.dp)) } Text( modifier = Modifier.niceClickable { onUserIdClick() }, @@ -99,6 +111,7 @@ fun UserProfileHeaderSection( color = ElementTheme.colors.textSecondary, textAlign = TextAlign.Center, ) + Spacer(modifier = Modifier.height(12.dp)) when (verificationState) { UserProfileVerificationState.UNKNOWN, UserProfileVerificationState.UNVERIFIED -> Unit UserProfileVerificationState.VERIFIED -> { @@ -143,6 +156,7 @@ internal fun UserProfileHeaderSectionPreview() = ElementPreview { userId = UserId("@alice:example.com"), userName = USER_NAME_ALICE, verificationState = UserProfileVerificationState.VERIFIED, + displayedStatus = DisplayedStatus.InCall(0L), openAvatarPreview = {}, onUserIdClick = {}, withdrawVerificationClick = {}, @@ -157,6 +171,7 @@ internal fun UserProfileHeaderSectionWithVerificationViolationPreview() = Elemen userId = UserId("@alice:example.com"), userName = USER_NAME_ALICE, verificationState = UserProfileVerificationState.VERIFICATION_VIOLATION, + displayedStatus = DisplayedStatus.InCall(0L), openAvatarPreview = {}, onUserIdClick = {}, withdrawVerificationClick = {}, diff --git a/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileStateProvider.kt b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileStateProvider.kt index fe318a8670..4e25284753 100644 --- a/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileStateProvider.kt +++ b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileStateProvider.kt @@ -18,6 +18,7 @@ import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.designsystem.utils.snackbar.SnackbarMessage import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.UserId +import io.element.android.libraries.matrix.api.user.DisplayedStatus import io.element.android.libraries.matrix.ui.components.aMatrixUser open class UserProfileStateProvider : PreviewParameterProvider { @@ -48,6 +49,7 @@ fun aUserProfileState( dmRoomId: RoomId? = null, canCall: Boolean = false, snackbarMessage: SnackbarMessage? = null, + displayedStatus: DisplayedStatus? = null, eventSink: (UserProfileEvents) -> Unit = {}, ) = UserProfileState( userId = userId, @@ -61,5 +63,6 @@ fun aUserProfileState( dmRoomId = dmRoomId, canCall = canCall, snackbarMessage = snackbarMessage, + displayedStatus = displayedStatus, eventSink = eventSink, ) diff --git a/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileView.kt b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileView.kt index 5d541edf2b..a09a091834 100644 --- a/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileView.kt +++ b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileView.kt @@ -78,6 +78,7 @@ fun UserProfileView( userId = state.userId, userName = state.userName, verificationState = state.verificationState, + displayedStatus = state.displayedStatus, openAvatarPreview = { avatarUrl -> openAvatarPreview(state.userName ?: state.userId.value, avatarUrl) }, diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/MatrixBadgeRowMolecule.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/MatrixBadgeRowMolecule.kt index 16f4a40993..26ee9927b9 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/MatrixBadgeRowMolecule.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/MatrixBadgeRowMolecule.kt @@ -25,7 +25,7 @@ fun MatrixBadgeRowMolecule( ) { FlowRow( modifier = modifier - .padding(start = 16.dp, end = 16.dp, top = 8.dp), + .padding(start = 16.dp, end = 16.dp), horizontalArrangement = Arrangement.spacedBy(8.dp, Alignment.CenterHorizontally), verticalArrangement = Arrangement.spacedBy(8.dp) ) { diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/RoomMember.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/RoomMember.kt index abf685a38b..1874986d70 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/RoomMember.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/RoomMember.kt @@ -10,6 +10,7 @@ package io.element.android.libraries.matrix.api.room import androidx.compose.runtime.Immutable import io.element.android.libraries.matrix.api.core.UserId +import io.element.android.libraries.matrix.api.user.DisplayedStatus import io.element.android.libraries.matrix.api.user.MatrixUser data class RoomMember( @@ -23,6 +24,7 @@ data class RoomMember( val role: Role, val membershipChangeReason: String?, val isServiceMember: Boolean, + val displayedStatus: DisplayedStatus?, ) { /** * Role of the RoomMember, based on its [powerLevel]. diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/ProfileDetails.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/ProfileDetails.kt index 6393a27bb2..73b0478d63 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/ProfileDetails.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/ProfileDetails.kt @@ -10,6 +10,7 @@ package io.element.android.libraries.matrix.api.timeline.item.event import androidx.compose.runtime.Immutable import io.element.android.libraries.matrix.api.core.UserId +import io.element.android.libraries.matrix.api.user.DisplayedStatus @Immutable sealed interface ProfileDetails { @@ -20,7 +21,8 @@ sealed interface ProfileDetails { data class Ready( val displayName: String?, val displayNameAmbiguous: Boolean, - val avatarUrl: String? + val avatarUrl: String?, + val displayedStatus: DisplayedStatus?, ) : ProfileDetails data class Error( diff --git a/libraries/matrix/api/src/test/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/ProfileTimelineDetailsTest.kt b/libraries/matrix/api/src/test/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/ProfileTimelineDetailsTest.kt index ffb59ba7d1..8021abd9c9 100644 --- a/libraries/matrix/api/src/test/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/ProfileTimelineDetailsTest.kt +++ b/libraries/matrix/api/src/test/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/ProfileTimelineDetailsTest.kt @@ -38,6 +38,7 @@ class ProfileTimelineDetailsTest { displayName = null, displayNameAmbiguous = false, avatarUrl = null, + displayedStatus = null, ).getDisambiguatedDisplayName(aUserId) ).isEqualTo(A_USER_ID) } @@ -49,6 +50,7 @@ class ProfileTimelineDetailsTest { displayName = "Alice", displayNameAmbiguous = false, avatarUrl = null, + displayedStatus = null, ).getDisambiguatedDisplayName(aUserId) ).isEqualTo("Alice") } @@ -60,6 +62,7 @@ class ProfileTimelineDetailsTest { displayName = "Alice", displayNameAmbiguous = true, avatarUrl = null, + displayedStatus = null, ).getDisambiguatedDisplayName(aUserId) ).isEqualTo("Alice ($A_USER_ID)") } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/member/RoomMemberMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/member/RoomMemberMapper.kt index 33ecb74ff3..b2a530f806 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/member/RoomMemberMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/member/RoomMemberMapper.kt @@ -30,6 +30,8 @@ object RoomMemberMapper { role = mapRole(roomMember.suggestedRoleForPowerLevel, powerLevel), membershipChangeReason = roomMember.membershipChangeReason, isServiceMember = roomMember.isServiceMember, + // TODO map this value when available + displayedStatus = null, ) } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventTimelineItemMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventTimelineItemMapper.kt index 297b0b31a4..801d5fd146 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventTimelineItemMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventTimelineItemMapper.kt @@ -74,7 +74,9 @@ fun RustProfileDetails.map(): ProfileDetails { is RustProfileDetails.Ready -> ProfileDetails.Ready( displayName = displayName, displayNameAmbiguous = displayNameAmbiguous, - avatarUrl = avatarUrl + avatarUrl = avatarUrl, + // TODO map this value when available + displayedStatus = null, ) } } diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomMemberFixture.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomMemberFixture.kt index 33a1b68ba3..1a19eddba0 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomMemberFixture.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomMemberFixture.kt @@ -11,6 +11,7 @@ package io.element.android.libraries.matrix.test.room import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.api.room.RoomMembershipState +import io.element.android.libraries.matrix.api.user.DisplayedStatus import kotlinx.collections.immutable.persistentListOf fun aRoomMember( @@ -24,6 +25,7 @@ fun aRoomMember( role: RoomMember.Role = RoomMember.Role.User, membershipChangeReason: String? = null, isServiceMember: Boolean = false, + displayedStatus: DisplayedStatus? = null, ) = RoomMember( userId = userId, displayName = displayName, @@ -35,6 +37,7 @@ fun aRoomMember( role = role, membershipChangeReason = membershipChangeReason, isServiceMember = isServiceMember, + displayedStatus = displayedStatus, ) fun aRoomMemberList() = persistentListOf( diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/TimelineFixture.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/TimelineFixture.kt index 2825e7c5be..b61009a5c6 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/TimelineFixture.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/TimelineFixture.kt @@ -33,6 +33,7 @@ import io.element.android.libraries.matrix.api.timeline.item.event.SendHandlePro import io.element.android.libraries.matrix.api.timeline.item.event.StickerContent import io.element.android.libraries.matrix.api.timeline.item.event.TextMessageType import io.element.android.libraries.matrix.api.timeline.item.event.TimelineItemDebugInfoProvider +import io.element.android.libraries.matrix.api.user.DisplayedStatus import io.element.android.libraries.matrix.test.AN_EVENT_ID import io.element.android.libraries.matrix.test.A_USER_ID import io.element.android.libraries.matrix.test.A_USER_NAME @@ -84,11 +85,13 @@ fun anEventTimelineItem( fun aProfileDetails( displayName: String? = A_USER_NAME, displayNameAmbiguous: Boolean = false, - avatarUrl: String? = null + avatarUrl: String? = null, + displayedStatus: DisplayedStatus? = null, ): ProfileDetails = ProfileDetails.Ready( displayName = displayName, displayNameAmbiguous = displayNameAmbiguous, avatarUrl = avatarUrl, + displayedStatus = displayedStatus, ) fun aProfileChangeMessageContent( diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/CheckableUserRow.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/CheckableUserRow.kt index 917b03f309..ce516ecd54 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/CheckableUserRow.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/CheckableUserRow.kt @@ -19,6 +19,7 @@ import androidx.compose.runtime.Immutable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.semantics.Role +import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import io.element.android.libraries.designsystem.components.avatar.AvatarData @@ -50,7 +51,7 @@ fun CheckableUserRow( UserRow( modifier = rowModifier, avatarData = data.avatarData, - name = data.name, + name = AnnotatedString(data.name), subtext = data.subtext, enabled = enabled, ) diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/DisplayNameWithStatus.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/DisplayNameWithStatus.kt new file mode 100644 index 0000000000..627b892fc5 --- /dev/null +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/DisplayNameWithStatus.kt @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial. + * Please see LICENSE files in the repository root for full details. + */ + +package io.element.android.libraries.matrix.ui.components + +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.width +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clipToBounds +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontStyle +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import io.element.android.compound.theme.ElementTheme +import io.element.android.libraries.designsystem.theme.components.Text +import io.element.android.libraries.matrix.api.user.DisplayedStatus +import io.element.android.libraries.matrix.ui.model.toEmojiText + +/** + * Component to display side by side a display name and an optional status. + */ +@Composable +fun DisplayNameWithStatus( + name: String, + status: DisplayedStatus?, + style: TextStyle, + modifier: Modifier = Modifier, + nameColor: Color = Color.Unspecified, + nameFontStyle: FontStyle? = null, +) { + Row( + modifier = modifier, + verticalAlignment = Alignment.CenterVertically, + ) { + Text( + text = name, + modifier = Modifier + .weight(1f, fill = false) + .clipToBounds(), + maxLines = 1, + overflow = TextOverflow.Ellipsis, + style = style, + color = nameColor, + fontStyle = nameFontStyle, + ) + if (status != null) { + Spacer(Modifier.width(4.dp)) + Text( + text = status.toEmojiText(), + style = style, + color = ElementTheme.colors.textSecondary, + ) + } + } +} diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserHeader.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserHeader.kt index 0b9bde0fb9..89b0532580 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserHeader.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserHeader.kt @@ -18,7 +18,6 @@ import androidx.compose.foundation.layout.width import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.clipToBounds import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp @@ -58,13 +57,11 @@ fun MatrixUserHeader( verticalArrangement = Arrangement.spacedBy(2.dp) ) { // Name - Text( - modifier = Modifier.clipToBounds(), - text = matrixUser.getBestName(), - maxLines = 1, + DisplayNameWithStatus( + name = matrixUser.getBestName(), + status = matrixUser.displayedStatus, + nameColor = ElementTheme.colors.textPrimary, style = ElementTheme.typography.fontHeadingMdRegular, - overflow = TextOverflow.Ellipsis, - color = ElementTheme.colors.textPrimary, ) // Id if (matrixUser.displayName.isNullOrEmpty().not()) { diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserProvider.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserProvider.kt index 639bafbcbf..7bc7d00f09 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserProvider.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserProvider.kt @@ -21,6 +21,7 @@ import io.element.android.libraries.designsystem.preview.USER_NAME_SUSIE import io.element.android.libraries.designsystem.preview.USER_NAME_VICTOR import io.element.android.libraries.designsystem.preview.USER_NAME_WALTER import io.element.android.libraries.matrix.api.core.UserId +import io.element.android.libraries.matrix.api.user.DisplayedStatus import io.element.android.libraries.matrix.api.user.MatrixUser open class MatrixUserProvider : PreviewParameterProvider { @@ -28,6 +29,7 @@ open class MatrixUserProvider : PreviewParameterProvider { get() = sequenceOf( aMatrixUser(), aMatrixUser(displayName = null), + aMatrixUser(displayedStatus = DisplayedStatus.InCall(0L)), ) } @@ -43,10 +45,12 @@ fun aMatrixUser( id: String? = null, displayName: String? = USER_NAME_ALICE, avatarUrl: String? = null, + displayedStatus: DisplayedStatus? = null, ) = MatrixUser( userId = UserId(id ?: "@${displayName?.lowercase()?.replace(" ", "_") ?: "id"}:server.org"), displayName = displayName, avatarUrl = avatarUrl, + displayedStatus = displayedStatus, ) fun aMatrixUserList() = listOf( diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserRow.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserRow.kt index ed7fd63435..9fc7ea7b4a 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserRow.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserRow.kt @@ -13,6 +13,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp +import io.element.android.compound.theme.ElementTheme import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight @@ -29,7 +30,14 @@ fun MatrixUserRow( trailingContent: @Composable (() -> Unit)? = null, ) = UserRow( avatarData = matrixUser.getAvatarData(avatarSize), - name = matrixUser.getBestName(), + nameContent = { + DisplayNameWithStatus( + name = matrixUser.getBestName(), + status = matrixUser.displayedStatus, + nameColor = ElementTheme.colors.textPrimary, + style = ElementTheme.typography.fontBodyLgRegular, + ) + }, subtext = if (matrixUser.displayName.isNullOrEmpty()) null else matrixUser.userId.value, modifier = modifier, verticalSpaceWidth = verticalSpaceWidth, diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/UserRow.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/UserRow.kt index 8d236d1a2a..fba2f606e3 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/UserRow.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/UserRow.kt @@ -18,6 +18,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clipToBounds +import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp @@ -30,7 +31,37 @@ import io.element.android.libraries.designsystem.theme.components.Text @Composable internal fun UserRow( avatarData: AvatarData, - name: String, + name: AnnotatedString, + subtext: String?, + modifier: Modifier = Modifier, + enabled: Boolean = true, + verticalSpaceWidth: Dp = 12.dp, + trailingContent: @Composable (() -> Unit)? = null, +) { + UserRow( + avatarData = avatarData, + nameContent = { + Text( + modifier = Modifier.clipToBounds(), + text = name, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + color = if (enabled) ElementTheme.colors.textPrimary else ElementTheme.colors.textDisabled, + style = ElementTheme.typography.fontBodyLgRegular, + ) + }, + subtext = subtext, + modifier = modifier, + enabled = enabled, + verticalSpaceWidth = verticalSpaceWidth, + trailingContent = trailingContent, + ) +} + +@Composable +internal fun UserRow( + avatarData: AvatarData, + nameContent: @Composable () -> Unit, subtext: String?, modifier: Modifier = Modifier, enabled: Boolean = true, @@ -52,14 +83,7 @@ internal fun UserRow( modifier = Modifier.weight(1f), ) { // Name - Text( - modifier = Modifier.clipToBounds(), - text = name, - maxLines = 1, - overflow = TextOverflow.Ellipsis, - color = if (enabled) ElementTheme.colors.textPrimary else ElementTheme.colors.textDisabled, - style = ElementTheme.typography.fontBodyLgRegular, - ) + nameContent() // Id subtext?.let { Text( diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/RoomMemberProfilesCache.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/RoomMemberProfilesCache.kt index 4a9f4f98a4..9e131d5621 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/RoomMemberProfilesCache.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/RoomMemberProfilesCache.kt @@ -13,6 +13,7 @@ import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.room.RoomMember +import io.element.android.libraries.matrix.api.user.DisplayedStatus import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.drop @@ -31,4 +32,8 @@ class RoomMemberProfilesCache { fun getDisplayName(userId: UserId): String? { return cache.value[userId]?.disambiguatedDisplayName } + + fun getDisplayedStatus(userId: UserId): DisplayedStatus? { + return cache.value[userId]?.displayedStatus + } } diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/reply/InReplyToDetailsProvider.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/reply/InReplyToDetailsProvider.kt index ca118349e9..b335ef9609 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/reply/InReplyToDetailsProvider.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/reply/InReplyToDetailsProvider.kt @@ -167,4 +167,5 @@ fun aProfileDetailsReady( displayName = displayName, displayNameAmbiguous = displayNameAmbiguous, avatarUrl = avatarUrl, + displayedStatus = null, ) diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/sender/SenderName.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/sender/SenderName.kt index cdca0937c1..42432c6950 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/sender/SenderName.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/sender/SenderName.kt @@ -24,6 +24,7 @@ import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.timeline.item.event.ProfileDetails +import io.element.android.libraries.matrix.ui.model.toText // https://www.figma.com/file/Ni6Ii8YKtmXCKYNE90cC67/Timeline-(new)?type=design&node-id=917-80169&mode=design&t=A0CJCBbMqR8NOwUQ-0 @Composable @@ -54,6 +55,19 @@ fun SenderName( SecondaryText(text = senderId.value, mode = senderNameMode) } } + val userStatus = senderProfile.displayedStatus + if (senderNameMode is SenderNameMode.Timeline && userStatus != null) { + Text( + modifier = Modifier + .clipToBounds() + .alignByBaseline(), + text = userStatus.toText(), + style = ElementTheme.typography.fontBodyMdMedium, + color = ElementTheme.colors.textSecondary, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + ) + } } } } @@ -74,13 +88,16 @@ private fun RowScope.MainText( SenderNameMode.ActionList, SenderNameMode.Reply -> Modifier } + val color = when (mode) { is SenderNameMode.Timeline -> mode.mainColor SenderNameMode.ActionList, SenderNameMode.Reply -> ElementTheme.colors.textPrimary } Text( - modifier = modifier.clipToBounds(), + modifier = modifier + .clipToBounds() + .weight(1f, fill = false), text = text, style = style, color = color, diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/sender/SenderNameDataProvider.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/sender/SenderNameDataProvider.kt index 96ad91b869..e4ca73e69c 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/sender/SenderNameDataProvider.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/sender/SenderNameDataProvider.kt @@ -12,6 +12,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.tooling.preview.PreviewParameterProvider import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.timeline.item.event.ProfileDetails +import io.element.android.libraries.matrix.api.user.DisplayedStatus data class SenderNameData( val userId: UserId, @@ -47,12 +48,14 @@ open class SenderNameDataProvider : PreviewParameterProvider { private fun aSenderNameData( senderNameMode: SenderNameMode, displayNameAmbiguous: Boolean = false, + displayedStatus: DisplayedStatus? = null, ) = SenderNameData( userId = UserId("@alice:${senderNameMode.javaClass.simpleName.lowercase()}"), profileDetails = ProfileDetails.Ready( displayName = "Alice ${senderNameMode.javaClass.simpleName}", displayNameAmbiguous = displayNameAmbiguous, - avatarUrl = null + avatarUrl = null, + displayedStatus = displayedStatus, ), senderNameMode = senderNameMode, ) diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/DisplayedStatusExtention.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/DisplayedStatusExtention.kt new file mode 100644 index 0000000000..31d4a57b32 --- /dev/null +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/DisplayedStatusExtention.kt @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial. + * Please see LICENSE files in the repository root for full details. + */ + +package io.element.android.libraries.matrix.ui.model + +import androidx.compose.runtime.Composable +import androidx.compose.ui.res.stringResource +import io.element.android.libraries.matrix.api.user.DisplayedStatus +import io.element.android.libraries.ui.strings.CommonStrings + +fun DisplayedStatus.toEmojiText(): String = when (this) { + is DisplayedStatus.UserSet -> status.emoji + is DisplayedStatus.InCall -> "🎧" +} + +@Composable +fun DisplayedStatus.toText(): String = when (this) { + is DisplayedStatus.UserSet -> "${status.emoji} ${status.text}" + is DisplayedStatus.InCall -> "🎧 ${stringResource(CommonStrings.common_on_a_call)}" +} diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/RoomInfoExtension.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/RoomInfoExtension.kt index 3a03d8329b..cf5ac37d74 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/RoomInfoExtension.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/RoomInfoExtension.kt @@ -13,6 +13,7 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.room.RoomInfo import io.element.android.libraries.matrix.api.room.RoomMember +import io.element.android.libraries.matrix.api.user.DisplayedStatus fun RoomInfo.getAvatarData(size: AvatarSize) = AvatarData( id = id.value, @@ -45,3 +46,14 @@ fun RoomInfo.roleOf(userId: UserId): RoomMember.Role { val powerLevel = powerLevelOf(userId = userId) return RoomMember.Role.forPowerLevel(powerLevel) } + +/** + * Return the [DisplayedStatus] of the other member in a DM. + */ +fun RoomInfo.dmUserStatus(): DisplayedStatus? { + return if (isDm) { + heroes.firstOrNull()?.displayedStatus + } else { + null + } +} diff --git a/libraries/previewutils/src/main/kotlin/io/element/android/libraries/previewutils/room/RoomMemberFixture.kt b/libraries/previewutils/src/main/kotlin/io/element/android/libraries/previewutils/room/RoomMemberFixture.kt index 49f77ddefb..e835075d81 100644 --- a/libraries/previewutils/src/main/kotlin/io/element/android/libraries/previewutils/room/RoomMemberFixture.kt +++ b/libraries/previewutils/src/main/kotlin/io/element/android/libraries/previewutils/room/RoomMemberFixture.kt @@ -21,6 +21,7 @@ import io.element.android.libraries.designsystem.preview.USER_NAME_WALTER import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.api.room.RoomMembershipState +import io.element.android.libraries.matrix.api.user.DisplayedStatus import kotlinx.collections.immutable.persistentListOf fun aRoomMember( @@ -34,6 +35,7 @@ fun aRoomMember( role: RoomMember.Role = RoomMember.Role.User, membershipChangeReason: String? = null, isServiceMember: Boolean = false, + displayedStatus: DisplayedStatus? = null, ) = RoomMember( userId = userId, displayName = displayName, @@ -45,6 +47,7 @@ fun aRoomMember( role = role, membershipChangeReason = membershipChangeReason, isServiceMember = isServiceMember, + displayedStatus = displayedStatus, ) fun aRoomMemberList() = persistentListOf( diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpan.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpan.kt index e2ae08c421..937561e2a5 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpan.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpan.kt @@ -39,11 +39,15 @@ class MentionSpan( private var typeface: Typeface = Typeface.DEFAULT private var measuredTextWidth = 0 + private var measuredTrailingWidth = 0 // The formatted display text, will be set by the formatter var displayText: CharSequence = "" private set + var trailingText: String? = null + private set + /** * Updates the visual properties of this span. */ @@ -80,6 +84,10 @@ class MentionSpan( displayText = formatter.formatDisplayText(type) } + fun updateTrailingText(trailingText: String?) { + this.trailingText = trailingText + } + override fun getSize( paint: Paint, text: CharSequence?, @@ -91,7 +99,8 @@ class MentionSpan( textPaint.typeface = typeface // Measure the full text width without truncation measuredTextWidth = textPaint.measureText(displayText, 0, displayText.length).roundToInt() - return measuredTextWidth + startPadding + endPadding + measuredTrailingWidth = trailingText?.let { textPaint.measureText(" $it").roundToInt() } ?: 0 + return measuredTextWidth + measuredTrailingWidth + startPadding + endPadding } override fun draw( @@ -106,7 +115,8 @@ class MentionSpan( paint: Paint ) { val availableWidth = (canvas.width - x).coerceAtLeast(0f) - val measuredWidth = measuredTextWidth + startPadding + endPadding + + val measuredWidth = measuredTextWidth + measuredTrailingWidth + startPadding + endPadding val pillWidth = minOf(availableWidth, measuredWidth.toFloat()) backgroundPaint.color = backgroundColor @@ -118,18 +128,18 @@ class MentionSpan( textPaint.color = textColor textPaint.typeface = typeface - val availableWidthForText = availableWidth - startPadding - endPadding + val availableWidthForText = availableWidth - startPadding - endPadding - measuredTrailingWidth val textToDraw = if (measuredTextWidth > availableWidthForText) { - TextUtils.ellipsize( - displayText, - textPaint, - availableWidthForText, - TextUtils.TruncateAt.END - ) + TextUtils.ellipsize(displayText, textPaint, availableWidthForText, TextUtils.TruncateAt.END) } else { displayText } canvas.drawText(textToDraw, 0, textToDraw.length, x + startPadding, y.toFloat(), textPaint) + + trailingText?.let { + val drawnTextWidth = minOf(availableWidthForText, measuredTextWidth.toFloat()) + canvas.drawText(" $it", x + startPadding + drawnTextWidth, y.toFloat(), textPaint) + } } } diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanUpdater.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanUpdater.kt index a530d64437..2142220e24 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanUpdater.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanUpdater.kt @@ -18,6 +18,7 @@ import io.element.android.compound.theme.ElementTheme import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.ui.messages.RoomMemberProfilesCache import io.element.android.libraries.matrix.ui.messages.RoomNamesCache +import io.element.android.libraries.matrix.ui.model.toEmojiText interface MentionSpanUpdater { fun updateMentionSpans(text: CharSequence): CharSequence @@ -48,6 +49,13 @@ class DefaultMentionSpanUpdater( for (mentionSpan in text.getMentionSpans()) { mentionSpan.updateTheme(theme) mentionSpan.updateDisplayText(formatter) + mentionSpan.updateTrailingText( + if (mentionSpan.type is MentionType.User) { + roomMemberProfilesCache.getDisplayedStatus(mentionSpan.type.userId)?.toEmojiText() + } else { + null + } + ) } return text } diff --git a/libraries/ui-strings/src/main/res/values/localazy.xml b/libraries/ui-strings/src/main/res/values/localazy.xml index ed45f312e3..88fdf821de 100644 --- a/libraries/ui-strings/src/main/res/values/localazy.xml +++ b/libraries/ui-strings/src/main/res/values/localazy.xml @@ -23,6 +23,7 @@ "Join call" "Jump to bottom" "Jump to unread" + "Jump to first unread message" "Move the map to my location" "Mentions only" "Muted" @@ -143,6 +144,7 @@ "Manage account & devices" "Manage devices" "Manage rooms" + "Mark as read" "Message" "Minimise" "Next" @@ -515,6 +517,8 @@ Are you sure you want to continue?" "%1$d people" "On the map" + "Your homeserver is on your local network. To connect, Element needs permission to reach devices on this network." + "Allow access to local network" "Failed selecting media, please try again." "Press on a message and choose “%1$s” to include here." "Pin important messages so that they can be easily discovered" diff --git a/libraries/ui-strings/src/main/res/values/temporary.xml b/libraries/ui-strings/src/main/res/values/temporary.xml index 2526f254d3..c704e811ff 100644 --- a/libraries/ui-strings/src/main/res/values/temporary.xml +++ b/libraries/ui-strings/src/main/res/values/temporary.xml @@ -6,12 +6,8 @@ --> - "Mark as read" - "Jump to first unread message" "Expanded" "Collapsed" - Allow access to local network - Your homeserver is on your local network. To connect, Element needs permission to reach other devices on this network. Active Inactive diff --git a/tests/uitests/src/test/snapshots/images/appnav.loggedin_LoggedInView_Day_4_en.png b/tests/uitests/src/test/snapshots/images/appnav.loggedin_LoggedInView_Day_4_en.png index 5cfd616c0e..652703aae3 100644 --- a/tests/uitests/src/test/snapshots/images/appnav.loggedin_LoggedInView_Day_4_en.png +++ b/tests/uitests/src/test/snapshots/images/appnav.loggedin_LoggedInView_Day_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:924b97967296d3f50e1f911a14bd63b9d5d0d3d5d171053c1a0e6a5048c4d336 -size 34048 +oid sha256:d9eff127b4c393418646e3874a174e807aaaeea37587b07ca2716a551fb10d8e +size 33418 diff --git a/tests/uitests/src/test/snapshots/images/appnav.loggedin_LoggedInView_Day_5_en.png b/tests/uitests/src/test/snapshots/images/appnav.loggedin_LoggedInView_Day_5_en.png index ea86b6f571..88e414ee25 100644 --- a/tests/uitests/src/test/snapshots/images/appnav.loggedin_LoggedInView_Day_5_en.png +++ b/tests/uitests/src/test/snapshots/images/appnav.loggedin_LoggedInView_Day_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5f98480a126f3cd955fc10e42404d8aa812e2f7fb59a9655593bbebb1c8fa972 -size 33249 +oid sha256:bb2dc44a39b82a4138b15214cccc945eef34b2f244b4646e925a2a62568dec37 +size 32619 diff --git a/tests/uitests/src/test/snapshots/images/appnav.loggedin_LoggedInView_Night_4_en.png b/tests/uitests/src/test/snapshots/images/appnav.loggedin_LoggedInView_Night_4_en.png index 348422394b..8dae0180a8 100644 --- a/tests/uitests/src/test/snapshots/images/appnav.loggedin_LoggedInView_Night_4_en.png +++ b/tests/uitests/src/test/snapshots/images/appnav.loggedin_LoggedInView_Night_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c89fc51cf4c9a8b623bb7582aa1490109220cec3b0bfc9ce58e150c5a7702029 -size 32158 +oid sha256:94d9e39df7c1aba7a6ca7eb6abf073f0170469ef837c95afcb5f199f8c2bd7ec +size 31504 diff --git a/tests/uitests/src/test/snapshots/images/appnav.loggedin_LoggedInView_Night_5_en.png b/tests/uitests/src/test/snapshots/images/appnav.loggedin_LoggedInView_Night_5_en.png index d66f1ab4f2..603fbef2f1 100644 --- a/tests/uitests/src/test/snapshots/images/appnav.loggedin_LoggedInView_Night_5_en.png +++ b/tests/uitests/src/test/snapshots/images/appnav.loggedin_LoggedInView_Night_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:794613b9e61283cab807a35b23875b4ea9c1198789c844958c755699279fa3b7 -size 31413 +oid sha256:7ba2563c905c2400a50f81c6d029bc9cf4a99d1cb6483ee3ee8cfe373601a0dd +size 30770 diff --git a/tests/uitests/src/test/snapshots/images/features.login.impl.changeserver_ChangeServerView_Day_6_en.png b/tests/uitests/src/test/snapshots/images/features.login.impl.changeserver_ChangeServerView_Day_6_en.png index 7ff27996e2..09b645e184 100644 --- a/tests/uitests/src/test/snapshots/images/features.login.impl.changeserver_ChangeServerView_Day_6_en.png +++ b/tests/uitests/src/test/snapshots/images/features.login.impl.changeserver_ChangeServerView_Day_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ee3174b63b166511e6c51725a8b6fe00b31eafff011f9059f2f728b77823b465 -size 33670 +oid sha256:487e0a1f72382c418f95d337edbf8047228e8d3b116d192ce3f8abf3cf97fbd4 +size 33063 diff --git a/tests/uitests/src/test/snapshots/images/features.login.impl.changeserver_ChangeServerView_Night_6_en.png b/tests/uitests/src/test/snapshots/images/features.login.impl.changeserver_ChangeServerView_Night_6_en.png index 2c304a2695..6cbd05d003 100644 --- a/tests/uitests/src/test/snapshots/images/features.login.impl.changeserver_ChangeServerView_Night_6_en.png +++ b/tests/uitests/src/test/snapshots/images/features.login.impl.changeserver_ChangeServerView_Night_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7910112f7ab526dbf0e5326213e03c3f3fe109dc8cc1bd3a8bf5fb05ddb5b0a7 -size 32054 +oid sha256:36300a7d6bd6f2529bcd72ae3f654b6ef40706e0533f54d9473a9dff23df560e +size 31406 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.actionlist_ActionListViewContent_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.actionlist_ActionListViewContent_Day_3_en.png index b6f510f5f1..3756f9ed3e 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.actionlist_ActionListViewContent_Day_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.actionlist_ActionListViewContent_Day_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6e42d39ee8965360d92cb66485670b48c265c0728240529c3d35d14a27f325d1 -size 46965 +oid sha256:29b6dc68656a924ba73148f570eaf72b20e9f887b1ae42bfd3c5dc378f2b3791 +size 46613 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.actionlist_ActionListViewContent_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.actionlist_ActionListViewContent_Night_3_en.png index a3529b5d97..948d5d1f87 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.actionlist_ActionListViewContent_Night_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.actionlist_ActionListViewContent_Night_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bf69710dd5e9926970b9c13ebbe5dbaa9d2e87773ba7c439fe18f3474459fc40 -size 46325 +oid sha256:a0177ab6b9034de7eb35bc5774bef46f8ecf89b63695aa92e20407e605c1b0f5 +size 45968 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.messagecomposer.suggestions_SuggestionsPickerView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.messagecomposer.suggestions_SuggestionsPickerView_Day_0_en.png index ed3c8abf17..064bc60974 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.messagecomposer.suggestions_SuggestionsPickerView_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.messagecomposer.suggestions_SuggestionsPickerView_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a1a4672f87cf79f8052e29650be198bee1ee6c00a24ded5fb243b6a32b51c372 -size 38017 +oid sha256:8cb541e97832b6dfc8190c017f4bd8fef3f952fadaa13dc0622a52e22ba664cb +size 41970 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.messagecomposer.suggestions_SuggestionsPickerView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.messagecomposer.suggestions_SuggestionsPickerView_Night_0_en.png index 6798590348..bd64300ada 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.messagecomposer.suggestions_SuggestionsPickerView_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.messagecomposer.suggestions_SuggestionsPickerView_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f8c69700f738d00379102fac8d2d1f33891983558d4a650edce317282e16b6c7 -size 37737 +oid sha256:955ec27126825710b2829fe2447773ccaabd0f4415c92195853bbafcc8b2c1ea +size 41552 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.topbars_MessagesViewTopBar_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.topbars_MessagesViewTopBar_Day_0_en.png index 3ea918900d..bcbf444dd1 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.topbars_MessagesViewTopBar_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.topbars_MessagesViewTopBar_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e088da462be419f059caa750afe0ce5d806ce25e682cb5aaaf37f88e5c236ee3 -size 55745 +oid sha256:7faf196e521dd713a99a7ea22786a429c937884a25194ce4bbbd55bde12e8bdf +size 62797 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.topbars_MessagesViewTopBar_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.topbars_MessagesViewTopBar_Night_0_en.png index 695f6809c7..abd96c1fb9 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.topbars_MessagesViewTopBar_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.topbars_MessagesViewTopBar_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f5658c53966bfab8a24a1e123d10a1b3c98b7d43361469ba8d6519c2d2f1cc22 -size 55067 +oid sha256:292167265d9c1135e545b911f7268d45a9a0195768fd09fc88c1eaf7a5c57b09 +size 62322 diff --git a/tests/uitests/src/test/snapshots/images/features.preferences.impl.user_UserPreferences_Day_2_en.png b/tests/uitests/src/test/snapshots/images/features.preferences.impl.user_UserPreferences_Day_2_en.png new file mode 100644 index 0000000000..0a34d0b390 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/features.preferences.impl.user_UserPreferences_Day_2_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b3ecf110c258f4ec5fd5d2a4126395e248d73d894afd54a0135dc710f680c0ee +size 12395 diff --git a/tests/uitests/src/test/snapshots/images/features.preferences.impl.user_UserPreferences_Night_2_en.png b/tests/uitests/src/test/snapshots/images/features.preferences.impl.user_UserPreferences_Night_2_en.png new file mode 100644 index 0000000000..58a30a7304 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/features.preferences.impl.user_UserPreferences_Night_2_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6bc66cd4269ee462103e77bfa24723a740d8a91dc7e06ca808b8109e74d1784f +size 12127 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 232eff8a27..e9863d1b93 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:dd57c6da7471850cbf9d4fd749b249589cd1dd71eebeac50fcef8a1db9efc04e -size 67420 +oid sha256:8a6fbd84c3f2a9e40a2e8e81a00ffb82d48e8714035a2da737953e15bac7ea93 +size 67635 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 77c11f54a2..29980e7099 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:a78e7d4a345b9beca19dedd29282f9a891ceabdc05d203cb4091790924b0bbf3 -size 40335 +oid sha256:fbb8a435e9753f441c832db6622ed94b404dce4237996add3aeb72e518cc14fb +size 40522 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 5764767fef..b45888cc98 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:29304b6e03fae0031e6fb536ffa038c436b224cf6c2fe095af1509d8cf1729ff -size 38520 +oid sha256:c4c5e6f2905960f6042ecb61d57a7a2a2b882c73fb49d043bd2d9d71e075c3e8 +size 38657 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 d242f48a87..18caac8b41 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:966f9a73b258b8b0036255d2519c64a306c07098001f9a140d5a3af9a7ed7734 -size 38088 +oid sha256:f45a01ce91d5e56c19d47a01fd3845a92d32f364925d2490ccaca889e288077e +size 38221 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 d3baeac29c..231dfeaa33 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:44fbeb3efaad275d864b9cf58075fcc1df67c49f5498017e53a6c203ad5d0513 -size 38858 +oid sha256:9d87f7b70a1043231c213cc2e11c8d6aec03b49b24a7fce2261a865d16fd3146 +size 39008 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 a1e27998fa..78ddf668e3 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:82f34129e77fb9e84c513a950b7c3d2e20af376f357135cd7bfec67ec0850b62 -size 38790 +oid sha256:4684ba74e78e6ed36ce3fa168ce50c3bd828d70e9bf54c9c3f8d8ddccf7e5d81 +size 38948 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 fb02b6a6ed..c7db94c48b 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:cfa7cf1c8e98ecf02f00a20096e5edd5a720050dffd8a359335d479493b40f50 -size 40212 +oid sha256:e6a301bdb68740effd68841d5f4afab2ad211ff02fdf99828f9780bb43975709 +size 40361 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 1da1c133bb..8d2ee2032e 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:8f5be262e881a33b9ad1425164ff8424ca72e12a276918f173fd3ff5cffb9ed5 -size 40555 +oid sha256:7cdd7dce0071f305c82c4a084a8d6112fde6ee79c0e347109edba61baddebeb6 +size 40714 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 645a7ac9f4..58f6776089 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:dd555ca1156752b9d07d808702c2e7bb04af00bf8240947e1cb4a7ffdc4814a4 -size 39066 +oid sha256:548a7a2b247dca3a454951d168eb30a8fdce2d1c0c5de77ee7e623e3a2355b3d +size 39235 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 99451027b5..e1dccc7bc3 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:8630ba0169ecb20ed5076623fc9a6bfab6d30c75c8040958fcbe3663661f5cf1 -size 38502 +oid sha256:1131ffbf59970257df26ba42bf2a5612398a7b62393c41753e84af0fe1a61af2 +size 38648 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 9647ec0023..68b81c731a 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:57d4c23cf1f13899370c0bf0c99e23b0113039dd50a8fdbc1706df7691943044 -size 37354 +oid sha256:6922b04770ab6805693ef7fe9f0c5ddd93afdceb2725b3b1b795c6ab8c10d136 +size 37520 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 b786e48fd2..f1f356e0a1 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:9256ef115348a6fbcdc5bd275c7dd97c5018b890104c1074b65d0eef6d2ca319 -size 37334 +oid sha256:ffccceb346d0c768fa98e233701058fa5b73f480f6390b26dbbf2ab7240511ad +size 37525 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 9114e9a598..211d398cdb 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:9c4a343ba9e0a8a6c75eb9cc54c4fbd460606de184c8078242a4e06eef7c3304 -size 34641 +oid sha256:3abf55145dd71a1f511ebb07b7481f4538eeb2730bf3a23d83e4dbd2fbd5100d +size 34829 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 449946c634..bc377f0cf3 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:ef52fdbd2ed8efdf526efe2fab402d7100952522b7e01023ec73e10415e27700 -size 39183 +oid sha256:c5137c3539f68dd9d501d8745645847304ca40a58517baa4d4fc21fc99702520 +size 39382 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 b10f7d38d0..8a5000cdf7 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:0215a5c510ebd2b99176525f7f317654e3c3b2fda4f5599c63b589f5c6286efc -size 38951 +oid sha256:c6a26f7ac512ab192f0b022bf59ade1c0275b34943e4c06016d873ee6dc1b49e +size 39107 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 5fd4e0e5ca..1ef2d75e9f 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:bf37f6deee46b8949ab91e88c49811013876307009b9c84ffaefd8229034a26a -size 38837 +oid sha256:3b8cfb69cf931f52a5110b08b262cfe943e82cc95d10afb5c3126acdd6908055 +size 39002 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 96f469822a..28bf4f49dc 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:569c1c17bae3b57d21f04d9ffec1ee91f7bae1ee773e75e7418850e9f83f3281 -size 32286 +oid sha256:9e086cdd74b0f4620ab8e1fd026792e91365f6d71b246d7f34688f55f29e9d91 +size 32270 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 557f249715..1bcec82516 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:6db7bc187b92d8fda605212e54168649f1385f7fd5d938496510289cbbdcfe63 -size 30729 +oid sha256:af53108a51bba6dd19f89d416a513a014dc93709bb92e84f1a97a3936e9a656b +size 30989 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 240291e5da..c02a47d24c 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:8be6501b50d413f75e860bd04f03803cc13965a991e7d64019e1a7e39a0bbf2b -size 37416 +oid sha256:250ec00454674d1a240eb1189586bb313f61950d8bf736d6812208c0c49c223c +size 37459 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 7ee59b0d02..2dd2e61820 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:c56e98e7ff452bd15b7a635d748815b1c8dd5490b9309e09a93a3cd4832db660 -size 37066 +oid sha256:446b9f6e5b9fd3ead36ef3983eec7445fb647b28719ac37ea42911a34ba639d8 +size 37236 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 f30bbd9f27..f3b24f79b7 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:a10328f429081b196dba40ae60a6100f2489a60a2aab37388deb645549fadfcb -size 31485 +oid sha256:de8a33b55900579b94ba7201a924a35e0d64a7c231591743386f3653f334f3be +size 31516 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 ea46034c38..35b64abb88 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:cb772e96c733fddf80ba6dda94039d971b1541a39ae349b3736e1a272f0857b2 -size 39440 +oid sha256:8c15274bfe393b43066b7885e300b8fbeba83993d4ada34c260cb41fb6425476 +size 39555 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 00e9e79aa4..5af1e44f46 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:cbdce666db6f4fb2a35f854b3e3c652dbbf4c0ba798aff3f5f7bfe0da4510950 -size 38841 +oid sha256:69cb1432c2fdcf5b9f29774baa8cd5d628a76feee10fda86e3aeb284078a108f +size 39005 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 7530f500f9..5d0b8251fa 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:d9fbc551023fce72f97c6f562306e80e4e43bf83ed35ddbfcd86a1a3053c1545 -size 38936 +oid sha256:cf9e568b617a863fc2c4ad221f6453a739a385867e30cb2f813c55964fd27646 +size 39153 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 f63ae1fe95..ffea1c96ec 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:3b7a58ad7ba5f3a81f0b06a9f464f91ec3b4b39fea3e4db6657bb9bd43f80321 -size 41501 +oid sha256:bdc91adbd0eafe0ca75381cf1362e4421c12b9871efc558f8203fba43b119e84 +size 41670 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 d292c67bfc..b17010db4a 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:5f92b85722afbc65a584f6e6f064fe6b3b38a888965d97c569c727253f4cc7d7 -size 39519 +oid sha256:4078a0609c3b9c45307bbe5d2a1dcf8aedbcd58e3fefa24c0d1ae4156702ad49 +size 39733 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 f36d741372..04927b495b 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:77e3e9dd2ec03e1a4a988e25a8a094d96296149ce7b6dc1d319c71b84dabfb2f -size 39357 +oid sha256:7ef80e3950422cb5ea2cbbf4822d3a34229286719cb0d43159f6d252eaed5cf7 +size 39515 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 069df089eb..af9e54e79a 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:8c182019343e29d186a1f2a7551f82573999a26d12c77c10ee2563aee44045d9 -size 39893 +oid sha256:e17a12f4586b3b6f57a99a0dd6a26e5b6029bcac995ee6f70c9047f913708242 +size 40060 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 d8d659411d..048c1037ba 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:85e5490ba14a46176971c2c23eec05d352e871463eed9241862faa9929c11188 -size 39837 +oid sha256:fd6ec055f0139812c8b0ab9017526760706d5ee7ba29aedc9e292e8286994687 +size 40004 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 01041d80be..00c3a5cf5b 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:c07ef87165b3f4e13108882f108cd3f217f3c6f8930c703b8909f431b2a9ed2a -size 41337 +oid sha256:3a443622d261092af01abe5717ba1e52b06ab5e46c5428d21523b57c6dd76738 +size 41511 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 5a90de8c66..964d90da1f 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:19dbd2929dda9108118ede7627241db2249f8ab7a062f17bdc3619ff42253594 -size 41768 +oid sha256:20fd55f968c30945318e80f2c003c67c02d7495b661475087fc0b0e724210f84 +size 41940 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 3d2700e9af..e099e70827 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:c87ff2cbbe4d5912cb17fccfe5fa7614d5260b43ada3b952dedee57a3c004cbb -size 40117 +oid sha256:25ec51f2100062e64501a88595a4f4ca7a8ab2e70aaf18ce65df49fd444b81ad +size 40303 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 10b75e049f..21cfb86dab 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:77359209da8ffbdd933d123a1a6952da961c75b3ca6a70b6d49ee9be188fca7c -size 39670 +oid sha256:27a90a335b3ea802a72e6157493b2aa3f8e131a9de39e88a3cad6843f1f4c038 +size 39833 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 4cbe816fd3..ca593f67c9 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:a7190a790a208709d20691052ea3de64a359e7ca16d8a988d0ef62b33a64da3f -size 38756 +oid sha256:72bbf2ec4beb1b9cb526d47013773b26267ac2e019c218cf81231f86cca6b13b +size 39164 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 8eeffdbcf1..781c3c3aa6 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:15458edded2d32980c16163e6674d714d67442a2421d0af73594590cf6f144d3 -size 38718 +oid sha256:e93f90d704f810f2cd0ddc82170e429c53d09039a39c45d2177e431f1c3e683c +size 39102 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 c4c2f1822d..76bbb7afe4 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:13ac1bdcdacb72bd268cf00e8e754f5746928723891fe1f70277daa46f67ef1f -size 35720 +oid sha256:8ee504b49e9b7595feeff6a2cb7e96a581ae39cf096732fff9b8eedaf2779ccd +size 35959 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 c70dbc195d..bfcb5051ef 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:b4b9ca327302ed396498c60db4341c78e3d48079e04bfdbb4ce8f024e82684f8 -size 40307 +oid sha256:8cfc4b97ed57ae7bf2f54ab574cd82b3190fcc2bc6873447a5d1fbe63e374b73 +size 40418 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 3a06126d05..ffb83196e8 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:f4c7a00882958b916e99ef643cd698229f8659fb8f21e4e2b86db1432362f508 -size 40007 +oid sha256:8a1aa73c2c4316ce86d8d657d563d146080bfb81e120328b512cef714e57d340 +size 40176 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 e6ccda4710..c1d344c706 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:a9bab5037912d2bdeb85ed013e169d98f5f7333c274430d69667e32dfc72c1fa -size 39880 +oid sha256:616d6eeae9be6af14620508ad4ac835e6651537b8656b556624b062c89e84ae8 +size 40064 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 0f9431284b..bfc5a1bdd1 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:c074ba644aa7ab073e2b1893a2f82a8e11eb479e8f50ab9cbd6e991709cc5d5e -size 33376 +oid sha256:1804ad3cea84565e84944959c9d57faa546e8f2ddefe59998c9dae352951d72d +size 33392 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 56cfd78cd6..347ca6f537 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:a07f005c828af6a622527a062e6cd2d8f4120ed4ac4a63daf675cfaf1b36da11 -size 31486 +oid sha256:89a7d8046a9206a5bb0d5969eaf406fc1a4922d47871782b3e153fb7859ec36f +size 31928 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 f82973cda9..97cfa26a7d 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:ee239549a179ce7678494cc20b32db88a211bba1f6368ba17fa1b18ca3400810 -size 38586 +oid sha256:e3b592944d49fa32a35042fada1a6fe7ccc64fac066c14214a351ac922dcb860 +size 38524 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 a37eaa2ae6..0cbdcde004 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:b56916b6d08aa4fcf55ee414ae928946d5a2bc5eeb610f9ec4ac86cf783aa11e -size 38429 +oid sha256:5500501d34b1cf5db3b68b0c620e915fe882536d5cede2bc920de05ca43100b6 +size 38825 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 f305d86263..25545ffdcc 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:b576b33a5c3bedaa8d1e7df6e95541730559c8149f5a0d920c9245449b33c26d -size 32616 +oid sha256:f7f6d55c95501d8c8259a4318f7897f11f5e0effd53f37b441a7adfd409935d3 +size 32822 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 964ccd2680..a32798b98b 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:a7b1c29bca9904fc55d17356c27a8dbe035e1fbbf0ffa27ee2b466cf1558c418 -size 40573 +oid sha256:ff81f7a43722314cedd1d4fc271d994002502141fab672d5d1d142403eaf4732 +size 40714 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 2ced0a9e17..37ec51d503 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:8ad0f0df59f4231bd85a0ae99ad6eccb74b338975353a201f434e5047fd58628 -size 39963 +oid sha256:b8776b535fa481298d2b3e29621174048b42590a9a4f8a2aaf644dc020bd08eb +size 40131 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 9e24db9017..951615ddbd 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:616b6050ca126b0630b5283901afe4096f7d041a40a5d6ae8e64ff808f2d4e7d -size 39971 +oid sha256:f2ce271672bcae59e254facedf7fdfe7f71ae21f9f3a147fe9657d2943281bcb +size 40165 diff --git a/tests/uitests/src/test/snapshots/images/features.roommembermoderation.impl_RoomMemberModerationView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.roommembermoderation.impl_RoomMemberModerationView_Day_0_en.png index 202f8a06db..60997dceec 100644 --- a/tests/uitests/src/test/snapshots/images/features.roommembermoderation.impl_RoomMemberModerationView_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roommembermoderation.impl_RoomMemberModerationView_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:75880628a454ca00a186e5d1c5438117e7af4ab9b23eb6fbf9c9696210234169 -size 17246 +oid sha256:bc0c611e5c552906b26adda91bd3601f34fc190860a1b1368b0e1c9b0835c9eb +size 20056 diff --git a/tests/uitests/src/test/snapshots/images/features.roommembermoderation.impl_RoomMemberModerationView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.roommembermoderation.impl_RoomMemberModerationView_Day_1_en.png index 9186ac2de4..f646e0ee30 100644 --- a/tests/uitests/src/test/snapshots/images/features.roommembermoderation.impl_RoomMemberModerationView_Day_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roommembermoderation.impl_RoomMemberModerationView_Day_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1fe61c20e2c6a7bb72e82aefd546469dfc49bf736b6d12f4c1927628df1bdb3e -size 20211 +oid sha256:03e68ff235e90c659a3a15d26f3ede94aa169fd7142eabc19b5511047577df93 +size 22912 diff --git a/tests/uitests/src/test/snapshots/images/features.roommembermoderation.impl_RoomMemberModerationView_Day_2_en.png b/tests/uitests/src/test/snapshots/images/features.roommembermoderation.impl_RoomMemberModerationView_Day_2_en.png index ca8464fad9..51dd1fea52 100644 --- a/tests/uitests/src/test/snapshots/images/features.roommembermoderation.impl_RoomMemberModerationView_Day_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roommembermoderation.impl_RoomMemberModerationView_Day_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ca3ee9a09bbbc69f2ba7e8b40cdc5196cc53745fe3222282d98bcf948dc16745 -size 22596 +oid sha256:baa29dce32895f21a4799a47a62e7152c99d56fc22a3882ac7da7f005a3532f2 +size 25259 diff --git a/tests/uitests/src/test/snapshots/images/features.roommembermoderation.impl_RoomMemberModerationView_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.roommembermoderation.impl_RoomMemberModerationView_Day_3_en.png index 945743ff26..72bc2e1d8b 100644 --- a/tests/uitests/src/test/snapshots/images/features.roommembermoderation.impl_RoomMemberModerationView_Day_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roommembermoderation.impl_RoomMemberModerationView_Day_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:96971a8981aea8918c01827403933c9e75275a2fda92716f803e6f28ad284bae -size 22702 +oid sha256:e02e039a0586a8f36c00d4e237885a55713040036b4481f0626beb2b3b8ea161 +size 25365 diff --git a/tests/uitests/src/test/snapshots/images/features.roommembermoderation.impl_RoomMemberModerationView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.roommembermoderation.impl_RoomMemberModerationView_Night_0_en.png index c1b0c4ff1e..834857696d 100644 --- a/tests/uitests/src/test/snapshots/images/features.roommembermoderation.impl_RoomMemberModerationView_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roommembermoderation.impl_RoomMemberModerationView_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bc96eec2d61713f01d43c92812bbf27bc44a202ce55f0fa1dc8e8659dabcfcf2 -size 16347 +oid sha256:38d2e1c53d09debe38dbd49a058f3612c4a6cc4d3a604f53f86d0db29f0efecb +size 19047 diff --git a/tests/uitests/src/test/snapshots/images/features.roommembermoderation.impl_RoomMemberModerationView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.roommembermoderation.impl_RoomMemberModerationView_Night_1_en.png index 16b567164c..778f0c8209 100644 --- a/tests/uitests/src/test/snapshots/images/features.roommembermoderation.impl_RoomMemberModerationView_Night_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roommembermoderation.impl_RoomMemberModerationView_Night_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:56c4df7da32b71dca109a1db1f4a797a2930e3b42c00eb51d72f0e1f5b99bf48 -size 19200 +oid sha256:4680eb47d53ea43ba48e4164ad819278fd8844e24f77badee742aa4e8ddca452 +size 21859 diff --git a/tests/uitests/src/test/snapshots/images/features.roommembermoderation.impl_RoomMemberModerationView_Night_2_en.png b/tests/uitests/src/test/snapshots/images/features.roommembermoderation.impl_RoomMemberModerationView_Night_2_en.png index ec10d3fd8a..1bcdbbd146 100644 --- a/tests/uitests/src/test/snapshots/images/features.roommembermoderation.impl_RoomMemberModerationView_Night_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roommembermoderation.impl_RoomMemberModerationView_Night_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:592c6ec197b193803679eee5df7769fa4858fe883a2f3a1294f39ad87f9f4ff1 -size 21610 +oid sha256:d07c9ab2a4bea18c3604675225d23b0d4dfa41d16676eba821adcbcc619bdabf +size 24246 diff --git a/tests/uitests/src/test/snapshots/images/features.roommembermoderation.impl_RoomMemberModerationView_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.roommembermoderation.impl_RoomMemberModerationView_Night_3_en.png index 5ff44ac3a4..9a97f2911f 100644 --- a/tests/uitests/src/test/snapshots/images/features.roommembermoderation.impl_RoomMemberModerationView_Night_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roommembermoderation.impl_RoomMemberModerationView_Night_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:62e99b8070a394ea5b2d666f3a8abf0fe41ea4a34a382223903f2de4085195dc -size 21710 +oid sha256:e596a8cda9c1054b5f780798fd455a004acb1b848bc21069e415dc700a106b10 +size 24337 diff --git a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileHeaderSectionWithVerificationViolation_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileHeaderSectionWithVerificationViolation_Day_0_en.png index a141a26bce..2a90fdd71b 100644 --- a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileHeaderSectionWithVerificationViolation_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileHeaderSectionWithVerificationViolation_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3ceaeb4841d4d480fd66d1014dd0f1257fe7c40db3a66cf18f0ff71d7ef79b9d -size 24170 +oid sha256:26a21536fcc98041b4c349498f126da520251e57b601f0f5943225c191d00910 +size 26241 diff --git a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileHeaderSectionWithVerificationViolation_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileHeaderSectionWithVerificationViolation_Night_0_en.png index ba0aee9b41..649da85f0e 100644 --- a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileHeaderSectionWithVerificationViolation_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileHeaderSectionWithVerificationViolation_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bcba7790fd7f16a1f0db0dc248a8ce895534c1a5155b96f4877b2137ec5a6412 -size 23456 +oid sha256:84a13525255fc639f817d1ef8dacef0dcfd48c2d72bab309175f99ccd56a34cd +size 25903 diff --git a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileHeaderSection_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileHeaderSection_Day_0_en.png index cf5c451505..809e2624f6 100644 --- a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileHeaderSection_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileHeaderSection_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d09796f261ba9552fd94f595467a958ff7cf7113c3ca23117128cdf76f729e43 -size 15808 +oid sha256:326840103b3ad46a5d80c80c5cb58604d0c561dc484cdd505ae837ff4cf71bad +size 18632 diff --git a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileHeaderSection_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileHeaderSection_Night_0_en.png index 09475dd0ac..39e2b34bda 100644 --- a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileHeaderSection_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileHeaderSection_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:49216216b3078897afd41a04c3eea2d82cc89d13390c2f61ef8045b84ad69e6f -size 15253 +oid sha256:dc027c17c7e4b41774ba20b39b38fd98fc7199b41ea7610ec01b184c4bf9ec99 +size 17925 diff --git a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_0_en.png index 1e86845bc2..fc6d33f7f0 100644 --- a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d705422db764094ca6e92ace3cb61eb7b855a9bc1fb37e840b8a886b5306e181 -size 23994 +oid sha256:413a3f42ad23bbab9a920128950b40f9eac5ef9248fd5ca164b838b7d10d9cdc +size 24062 diff --git a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_1_en.png index 6f74640f03..c5b576ef74 100644 --- a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:197ce66690463abeed16142edb0a212d5e49f2ef1df1233a3d6a0fd9d5153f2e -size 21772 +oid sha256:5893b1d1b8851d26d3bdb12f6b68954d03c9234d4ebf0ced6aff13b155595f83 +size 21828 diff --git a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_2_en.png b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_2_en.png index 3419a50b07..f255914d84 100644 --- a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9973d9a9fa00d362eae8f50c2936e5ae0adc2653b4671413b856c1e73538eb73 -size 24261 +oid sha256:ba293e027a30171d36aba06bbead8b616c706822fefea912b1f4beb9a3985da0 +size 24290 diff --git a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_3_en.png index fca3f7ed9b..43b8414534 100644 --- a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f707615c108e66cda3ccac1f70f6b1f6909ac88f4e8c43b86062ac11d7ad3f27 -size 36171 +oid sha256:a233930f23a1ffd82b9c48a3106218de88df49ef785b252ba1844a126c7eddd9 +size 36159 diff --git a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_4_en.png b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_4_en.png index 45e42c6ad0..51a45218fc 100644 --- a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_4_en.png +++ b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c6a2a849c7335452fc79215f4fc1c50ca606d491879cd6ec6b265e4f443f665e -size 27706 +oid sha256:2583c6fca6d7528b7bb8ea2eb3d82e012b970ef7b024c5bbeefc1c4973794e32 +size 28715 diff --git a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_5_en.png b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_5_en.png index 7e6ca5d507..2d7523e28c 100644 --- a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_5_en.png +++ b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4a4154169fd6e74358001ecc151a0cb4635423bf4a0b2d72f1d5bb12dfb0ea95 -size 22446 +oid sha256:94b86f639e03998bd47b423f0c90dbb9767165cd2905a700b5ed29ecfa63d525 +size 22496 diff --git a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_6_en.png b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_6_en.png index f7ee67c10a..1b3752626a 100644 --- a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_6_en.png +++ b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b3e9e3da0ba44d070fbc0e434be2c52dc0391eda581792b227587cb4d16997a2 -size 22945 +oid sha256:9848fa1e1af5dd63be1f6df0375627efab136fbada1c6afb7aa058db697f245b +size 22284 diff --git a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_7_en.png b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_7_en.png index 1c84803007..356db152ec 100644 --- a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_7_en.png +++ b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_7_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fa809d53b1ad821c047fabc9b655e47150e201941e004d5b8f769a0ebe1a2b74 -size 26629 +oid sha256:db9f567fdf457f2ce5072c0c848ad48942f92f5af96c7d0f144d4e12fd651e6e +size 26688 diff --git a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_8_en.png b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_8_en.png index aef669fae0..805f752c50 100644 --- a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_8_en.png +++ b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_8_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:781bf8c86e88c9ee564f45de7446ee2eb554efe68ae9e708aa1b5bde7fce6d6b -size 34137 +oid sha256:5fa1c110fa0804eb0363cf6c9631ed5664a547e2213eb76c211b7d11194c64a0 +size 33532 diff --git a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_9_en.png b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_9_en.png index d30cff8678..bd9cb74dc5 100644 --- a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_9_en.png +++ b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_9_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:85b62859396f9c34ee7bbb4166d6f030474bd750b043c7bc1f14eb6e75e613d6 -size 32374 +oid sha256:e87058ca16fa51807d79a8112aa3c105957c9785ae057686a92403133a556c2c +size 32353 diff --git a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_0_en.png index c3e2d149b3..3b4a36e777 100644 --- a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7fb347c3b537220d85af8e6473dac0e7658b2104cc4a1746a8019265f8085947 -size 23379 +oid sha256:33356c2a7ba816a0a6920e50eb8bf20212a062d11d6ba117923c9ea973d171d8 +size 23455 diff --git a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_1_en.png index 95e144b3f3..ce6861e02c 100644 --- a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7378680765db7cf811b1ba3c7901cb954765794cc741454bf31b4418c5f77da0 -size 21317 +oid sha256:c4d8861aae54ab13cc8fdba1d506b8bb682fc41bf05584db55ca8fce688ef240 +size 21435 diff --git a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_2_en.png b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_2_en.png index 224210123e..097e96258f 100644 --- a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e28754f90d584c329a5e3c51eba89c166320c69fda309b6b06b6f5ee9c74c1b2 -size 23549 +oid sha256:e42a2617242df3e2dcad13ca623ef2a2f60fd133a2da287a49255808cf31ff4e +size 23640 diff --git a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_3_en.png index 0c63f7b2c5..34304b7884 100644 --- a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0d88762c47be041fa9978b987f3a1226c55d711e8eab1a68c7c1fed72bc4a0ac -size 33925 +oid sha256:3acb94720610f1a0ea9a1861a091109b1fb9555b09faf432fb1bd702f5c81320 +size 33946 diff --git a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_4_en.png b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_4_en.png index b7c5aa9fa2..cc712188d9 100644 --- a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_4_en.png +++ b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:24310edc91b912416a1c20240bfce6a5a14165fe9c77f2123a35a9148e2ea50c -size 25833 +oid sha256:490fcf83d06592f39d88906b445aa826f6f4c0d0735e7fd8187b1eada5474d79 +size 26981 diff --git a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_5_en.png b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_5_en.png index 408be83664..2056976aac 100644 --- a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_5_en.png +++ b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3b815d4cf8ed95cb983072d75419637c10bd4808ddfbf14865409d0a4fd64c37 -size 22070 +oid sha256:89b989f3c910c24270a09e2804e9e5bf1901d0247d00f7abc6045f394acb7dfa +size 22030 diff --git a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_6_en.png b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_6_en.png index d945d1c6f8..981ac8e6a6 100644 --- a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_6_en.png +++ b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:85a6cf5a532ecbcfc07cc4a6e3bfa2370f7a401c357aa1e251bb15f7cd8611ba -size 21672 +oid sha256:25496e6505e3905108d74bbd0d299576a24d1a40e78107b0780f50a5ed1617ab +size 21065 diff --git a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_7_en.png b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_7_en.png index 46417d9248..43a79d0897 100644 --- a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_7_en.png +++ b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_7_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8b6f0f76fd0bb0f6f8dc9532c801d86e7574e53a62e828400c2fcfcf5fe9fe29 -size 25880 +oid sha256:e29852c6193c1fdac9b81629844d32399d8e8451e1ec7ff1f5185904a2eb2361 +size 25947 diff --git a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_8_en.png b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_8_en.png index 3c90a4f7ef..c3527328e3 100644 --- a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_8_en.png +++ b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_8_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:45c706bb63ab7df8e66898ec67fabbf8c227cac421b8c5eda84a2f6532c8f199 -size 32504 +oid sha256:2446d1ac74dceba5fc64507eea199773549dc65769aa8950fb88cdf411046abf +size 31858 diff --git a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_9_en.png b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_9_en.png index 2021017f88..3b411f6e37 100644 --- a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_9_en.png +++ b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_9_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c382fc5a53d664ce6fd78e1187be311cd8675a75a217992ad21bbc943139d8a0 -size 31438 +oid sha256:92b56ea3b119795c4d4f9b4a8f430a5ddac400f87651419e35d1668c90833e13 +size 31285 diff --git a/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_MatrixUserHeader_Day_2_en.png b/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_MatrixUserHeader_Day_2_en.png new file mode 100644 index 0000000000..0a34d0b390 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_MatrixUserHeader_Day_2_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b3ecf110c258f4ec5fd5d2a4126395e248d73d894afd54a0135dc710f680c0ee +size 12395 diff --git a/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_MatrixUserHeader_Night_2_en.png b/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_MatrixUserHeader_Night_2_en.png new file mode 100644 index 0000000000..58a30a7304 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_MatrixUserHeader_Night_2_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6bc66cd4269ee462103e77bfa24723a740d8a91dc7e06ca808b8109e74d1784f +size 12127 diff --git a/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_MatrixUserRow_Day_2_en.png b/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_MatrixUserRow_Day_2_en.png new file mode 100644 index 0000000000..181261b486 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_MatrixUserRow_Day_2_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e685aef8bc10159ba5cde38217382b3b33273bb04bf3c7e8dda392a0612d8a20 +size 10460 diff --git a/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_MatrixUserRow_Night_2_en.png b/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_MatrixUserRow_Night_2_en.png new file mode 100644 index 0000000000..a13027690a --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_MatrixUserRow_Night_2_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff742cfbc02f4a728a034e7cb3f161c98d706f5c05d8032cb8e3bb1d9e52a646 +size 10242 diff --git a/tools/localazy/config.json b/tools/localazy/config.json index ac5b1295fe..8a7790be1e 100644 --- a/tools/localazy/config.json +++ b/tools/localazy/config.json @@ -329,6 +329,7 @@ "includeRegex" : [ "screen_advanced_settings_.*", "screen\\.advanced_settings\\..*", + "screen\\.settings\\..*", "screen_edit_profile_.*", "screen_notification_settings_.*", "screen\\.notification_settings\\..*",